更新时间:2025-07-30 GMT+08:00
PostgreSQL本地Slave搭建步骤
PostgreSQL是什么?
PostgreSQL是一个开源对象关系型数据库管理系统,并侧重于可扩展性和标准的符合性。PostgreSQL面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore),支持GIS地理信息处理,在可靠性、数据完整性方面有良好声誉,适用于互联网网站、位置应用系统、复杂数据对象处理等应用场景。
本文指导您使用华为云弹性云服务器搭建PostgreSQL。
搭建前准备
- 创建弹性云服务器。
- 配置弹性云服务器安全组规则:开放 5432 端口。
本文使用的云服务器操作系统:CentOS 7.6 64bit
本文使用的PostgreSQL版本:PostgreSQL (11.2)
主节点配置
- 依次执行以下命令,安装PostgreSQL。
yum update -y yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install postgresql11-server yum install postgresql11 /usr/pgsql-11/bin/postgresql-11-setup initdb systemctl enable postgresql-11 systemctl start postgresql-11
- 执行以下命令,切换到postgres用户(安装好生成默认的用户)。
su - postgres
- 执行以下命令,进入数据库 。
psql
- 执行以下命令,创建账号并授权。
create role 账户名 login replication encrypted password '密码';
上述命令中密码必须用单引号。
以创建的账号名为dbar,密码为xxxxx为例,命令如下:
create role dbar login replication encrypted password 'xxxxx';
- 执行以下命令,修改/var/lib/pgsql/11/data/pg_hba.conf配置文件,添加如下内容。
vim /var/lib/pgsql/11/data/pg_hba.conf
host all all 192.168.1.0/24 md5 #允许VPC网段中md5密码认证连接 host replication dbar 从库实际IP/24 md5 #允许用户从replication数据库进行数据同步
- 执行以下命令,修改/var/lib/pgsql/11/data/postgresql.conf。
vim postgresql.conf
wal_level = hot_standby #热备模式 max_wal_senders= 6 #可以设置最多几个流复制链接 wal_sender_timeout = 60s #流复制主机发送数据的超时时间 max_connections = 512 #从库的 max_connections要大于主库 archive_command=’cp %p /var/lib/pgsql/11/data/archivelog/%f’ #归档 wal_keep_segments=10240 archive_mode = on #允许归档 listen_addresses= xxx.xx.xx.xx #实际的本地ip地址
- 执行以下命令,重启服务。
systemctl restart postgresql-11
从节点配置
- 依次执行以下命令,完成从节点安装。
yum update -y yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install postgresql11-server yum install postgresql11
- 执行以下命令,复制master配置相关文件。
pg_basebackup -h 主节点ip -U dbar -D /var/lib/pgsql/11/data -X stream -P cp /usr/pgsql-11/share/recovery.conf.sample /var/lib/pgsql/11/data/recovery.conf
- 执行以下命令,修改recovery.conf文件。
vim recovery.conf
standby_mode = on # 声明此节点为从库 primary_conninfo = 'host=主节点IP port=5432 user=dbar password=xxxxx(此处密码不能加单引号) trigger_file = '/var/lib/pgsql/11/data/trigger.kenyon' #主从切换后的触发文件 recovery_target_timeline = 'latest' restore_command = 'cp /var/lib/pgsql/11/data/archivelog/%f %p' archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/11/data/archivelog %r' #清除过期归档
- 执行以下命令,修改postgresql.conf文件。
chown -R postgres.postgres /var/lib/pgsql/11/data
- 修改/var/lib/pgsql/11/data/postgresql.conf。
listen_addresses= xxx.xx.xx.xx #实际的本地IP地址 max_connections = 600
- 执行以下命令,启动服务,设置开机自启。
systemctl enable postgresql-11 systemctl start postgresql-11
验证部署完成
- 执行以下命令,在主节点中可查看到sender进程。
ps aux |grep sender
- 执行以下命令,从节点中可查看到receiver进程。
ps aux | grep receiver
- 执行以下命令,主库中可查看到从库状态。
su - postgres -bash-4.2# psql replication=# select * from pg_stat_replication;
- 在主库建一个库,验证从库是否可以同步。
- 在主库执行以下命令
postgres=# create database testdb; postgres=# \l
- 在从库执行以下命令查看。
postgres=# \l
- 在主库执行以下命令
父主题: 搭建应用