- CREATE ROLE 用户名
- login # 有登录权限的角色即是用户
- replication #复制权限
- encrypted password '密码';
修改 pg_hba.conf 文件 (相当于开放防火墙)
- # 类型 数据库 用户 地址 方法
-
- # "local" is for Unix domain socket connections only
- host all 上面创建的用户名 从库地址 trust
-
-
- # Allow replication connections from localhost, by a user with the
- # replication privilege.
- host replication 上面创建的用户名 从库地址 trust
上面是允许登录的 地址
下面是允许复制的地址
修改主库配置文件 postgresql.conf
- wal_level = replica # wal级别:minimal, replica, or logical
-
- max_wal_senders = 4 # 最大发送进程数
- wal_keep_size = 16 # 多大wal文件被写满,单位M; 0 disables
- wal_sender_timeout = 60s # wal发送超时时间
-
- max_connections = 100 # 最大连接数,从库需要大于主库这个值
1.删除从库的数据文件
2.使用物理备份命令备份主库数据文件到从库
pg_basebackup -h 主库地址 -p 主库端口 -D 复制到从库数据目录 -U 有复制权限的用户 -Fp -Xs -Pv -R --checkpoint=fast
- max_connections = 200
-
- recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID 恢复哪个时间点
-
-
- primary_conninfo = 'host=10.0.12.12 port=5432 user=用户名 password=密码' # 连接主库信息
- hot_standby = on # "off" disallows queries during recovery
- max_standby_streaming_delay = 30s # 最大延迟时间
- wal_receiver_status_interval = 10s # 向主库发送wal接收状态时间
- hot_standby_feedback = on # 发送错误信息
- wal_receiver_timeout = 60s # 接收wal超时时间
- wal_retrieve_retry_interval = 5s # 等待重试时间间隔
查询复制信息
select client_addr,sync_state from pg_stat_replication;
表示主从部署成功
模拟主库宕机,从库手动升级为主库,原主库恢复变成从库。
1.主库停机
2.从库使用命令 pg_ctl promote升级为主库
3.这时恢复原主库作为从库,需要同步主库数据
- # 先删除这个从库数据,再同步主库数据
- pg_basebackup -h 新主库地址 -D /var/lib/postgresql/data -p 新主库端口 -U 备份用户 -Fp -Xs -Pv -R --checkpoint=fast
还有一种 利用pg_rewind 命令实现增量同步数据这里没有实现
4.重启从库
5.验证
主库执行
select client_addr,sync_state from pg_stat_replication;