新闻中心
新闻中心与新手教程
新闻中心与新手教程
发布时间:2024-10-13 12:51:25
我将为您提供centos、debian和ubuntu系统的新旧版本上搭建postgresql主从架构的详细步骤和故障排查方法。由于这个主题涉及多个操作系统和版本,内容会比较丰富,我们将分步骤来讨论。
# centos 7/8 (旧版本/新版本)
## 安装postgresql
# centos 7
sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/el-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql12-server postgresql12-contrib
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12
# centos 8
sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/el-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install postgresql12-server postgresql12-contrib
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12
## 配置主服务器
sudo nano /var/lib/pgsql/12/data/postgresql.conf
# 修改以下参数:
# listen_addresses = '*'
# wal_level = replica
# max_wal_senders = 10
# wal_keep_size = 32
sudo nano /var/lib/pgsql/12/data/pg_hba.conf
# 添加从服务器的访问权限:
# host replication replica 192.168.1.101/32 md5
# debian 10 (旧版本) / debian 11 (新版本)
## 安装postgresql
# debian 10/11
sudo apt update
sudo apt install wget ca-certificates
wget --quiet -o - https://www.postgresql.org/media/keys/accc4cf8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt install postgresql-12 postgresql-contrib-12
## 配置主服务器
sudo nano /etc/postgresql/12/main/postgresql.conf
# 修改以下参数:
# listen_addresses = '*'
# wal_level = replica
# max_wal_senders = 10
# wal_keep_size = 32
sudo nano /etc/postgresql/12/main/pg_hba.conf
# 添加从服务器的访问权限:
# host replication replica 192.168.1.101/32 md5
# ubuntu 18.04 (旧版本) / ubuntu 20.04 (新版本)
## 安装postgresql
# ubuntu 18.04/20.04
sudo apt update
sudo apt install wget ca-certificates
wget --quiet -o - https://www.postgresql.org/media/keys/accc4cf8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt install postgresql-12 postgresql-contrib-12
## 配置主服务器
sudo nano /etc/postgresql/12/main/postgresql.conf
# 修改以下参数:
# listen_addresses = '*'
# wal_level = replica
# max_wal_senders = 10
# wal_keep_size = 32
sudo nano /etc/postgresql/12/main/pg_hba.conf
# 添加从服务器的访问权限:
# host replication replica 192.168.1.101/32 md5
# 所有系统通用步骤
## 创建用于复制的用户
sudo -u postgres psql
create user replica with replication encrypted password 'your_password';
## 重启postgresql服务
# centos 7/8
sudo systemctl restart postgresql-12
# debian 和 ubuntu
sudo systemctl restart postgresql
# 从服务器配置(所有系统)
## 停止postgresql服务
sudo systemctl stop postgresql-12 # centos
sudo systemctl stop postgresql # debian/ubuntu
## 清空数据目录
# centos
sudo rm -rf /var/lib/pgsql/12/data/*
# debian/ubuntu
sudo rm -rf /var/lib/postgresql/12/main/*
## 使用pg_basebackup从主服务器复制数据
# centos
sudo -u postgres pg_basebackup -h 192.168.1.100 -d /var/lib/pgsql/12/data -p -u replica --wal-method=fetch
# debian/ubuntu
sudo -u postgres pg_basebackup -h 192.168.1.100 -d /var/lib/postgresql/12/main -p -u replica --wal-method=fetch
## 配置从服务器
# centos
sudo nano /var/lib/pgsql/12/data/postgresql.auto.conf
# debian/ubuntu
sudo nano /var/lib/postgresql/12/main/postgresql.auto.conf
# 添加以下内容:
# primary_conninfo = 'host=192.168.1.100 port=5432 user=replica password=your_password'
# hot_standby = on
# centos
sudo touch /var/lib/pgsql/12/data/standby.signal
# debian/ubuntu
sudo touch /var/lib/postgresql/12/main/standby.signal
## 启动从服务器上的postgresql服务
# centos
sudo systemctl start postgresql-12
# debian/ubuntu
sudo systemctl start postgresql
## 验证复制状态
# 在主服务器上:
sudo -u postgres psql -c "select * from pg_stat_replication;"
# 在从服务器上:
sudo -u postgres psql -c "select * from pg_stat_wal_receiver;"
---------------------------------------------------------------------------
现在我们已经列出了在不同操作系统上搭建postgresql主从架构的详细步骤。接下来,让我们讨论一下各系统的故障排查方法:
/var/lib/pgsql/12/data/log/
/var/log/postgresql/postgresql-12-main.log
sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload
sudo ufw allow 5432/tcp
ping
和 telnet
测试getenforce
enforcing
,可以临时设置为permissive
:sudo setenforce 0
/etc/selinux/config
firewalld
,确保添加了postgresql服务: sudo firewall-cmd --permanent --add-service=postgresql && sudo firewall-cmd --reload
/etc/apparmor.d/usr.sbin.postgresql
sudo aa-disable /etc/apparmor.d/usr.sbin.postgresql
netstat -tuln | grep 5432
,应该看到 0.0.0.0:5432
或 :::5432
wal_keep_segments
替代 wal_keep_size
select * from pg_replication_slots;
b) 在从服务器上检查复制状态: select * from pg_stat_wal_receiver;
c) 检查主从服务器的系统时间是否同步pg_stat_statements
视图以识别慢查询 b) 使用 explain analyze
分析特定查询的执行计划 c) 调整 shared_buffers
、work_mem
等参数以优化性能感谢提供:05互联