PostgreSQL在9.0之后引入了主从的流复制机制,从服务器通过
tcp
流从主服务器中同步相应的数据。流复制允许备库更新,同时也能提供只读服务,流复制默认是异步的。
实例准备
role | ip | port | version |
---|---|---|---|
master | 192.168.1.2 | 5432 | 10.9 |
slave | 192.168.1.3 | 5432 | 10.9 |
架构图
配置主库
创建复制用户
初始化数据库
1 | $ rm -rf /var/lib/pgsql/10/data/* |
启动数据库
1 | $ systemctl start postgresql-10 |
创建用户repuser,并赋予复制和登录的权限。
1 | $ su - postgres |
更新认证方式
编辑配置文件pg_hba.conf
,新增
1 | host all all 192.168.1.3/32 trust |
更新PostgreSQL配置
编辑配置文件postgresql.conf
1 | listen_addresses = '*' |
新增归档目录 pg_archive
1 | $ mkdir /var/lib/pgsql/10/pg_archive |
重启主库
1 | $ systemctl restart postgresql-10 |
配置从库
初始化数据库
1 | $ rm -rf /var/lib/pgsql/10/data/* |
新增文件.pgpass
在postgres
用户根目录下创建.pgpass
,并追加认证信息
1 | $ touch .pgpass |
从主节点拷贝数据到从节点
1 | $ su - postgres |
配置recovery.conf
拷贝配置文件recovery.conf.sample
为recovery.conf
1 | $ cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf |
更新配置文件recovery.conf
1 | standby_mode = on |
配置postgresql.conf
1 | listen_addresses = '*' |
重启从库
1 | $ systemctl restart postgresql-10 |
验证
在主节点上命令验证
1 | postgres=# select application_name, client_addr, sync_state from pg_stat_replication; |
说明192.168.1.3
是从服务器,在接收流,而且是异步流复制。
可以分别在主、从节点上运行 ps -ef | grep postgres
来查看进程验证
主服务器有一个 wal sender
进程
1 | $ ps -ef | grep postgres |
从服务器有一个 wal receiver
进程
1 | $ ps -ef | grep postgres |