PostgreSQL10.6主从复制搭建和故障切换
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,1、环境操作系统版本:CentOS Linux release 8.0.1905 (Core)PostgreSQL版本:10.6主机: test1 192.168.1.11 test2 1
千家信息网最后更新 2026年11月03日PostgreSQL10.6主从复制搭建和故障切换
1、环境
操作系统版本:CentOS Linux release 8.0.1905 (Core)
PostgreSQL版本:10.6
主机:
test1 192.168.1.11 test2 192.168.1.12 test3 192.168.1.132、在3台机器安装并初始化PostgreSQL
[root@test1 ~]# yum install postgresql-server -y[root@test1 ~]# postgresql-setup initdbWARNING: using obsoleted argument syntax, try --helpWARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log3、主库配置
编辑主库配置文件
[root@test1 ~]# vim /var/lib/pgsql/data/postgresql.conflisten_addresses = '192.168.1.11'wal_log_hints = onarchive_mode = onarchive_command = 'cp %p /var/lib/pgsql/pg_archive/%f' 配置认证文件
[root@test1 ~]# vim /var/lib/pgsql/data/pg_hba.conf#追加三行host replication replica 192.168.1.11/32 md5host replication replica 192.168.1.12/32 md5host replication replica 192.168.1.13/32 md5创建pg_archive目录
[root@test1 ~]# mkdir -p /var/lib/pgsql/pg_archive[root@test1 ~]# chown postgres:postgres /var/lib/pgsql/pg_archive配置recovery.conf
[root@test1 ~]# vim /var/lib/pgsql/data/recovery.bakstandby_mode = onprimary_conninfo = 'host=192.168.1.11 port=5432 user=replica password=replica'recovery_target_timeline = 'latest'[root@test1 ~]# chown postgres:postgres /var/lib/pgsql/data/recovery.bak新建pgpass文件
[postgres@test1 ~]$ vim ~/.pgpass192.168.1.11:5432:replication:replica:replica192.168.1.12:5432:replication:replica:replica192.168.1.13:5432:replication:replica:replica[root@test1 ~]# chown 600 /var/lib/pgsql/.pgpass启动数据库,关闭服务
[root@test1 ~]# systemctl start postgresql[root@test1 ~]# systemctl stop firewalld.service 创建同步用户
[root@test3 ~]# su - postgres[postgres@test3 ~]$ psql psql (10.6)Type "help" for help.postgres=# create role replica login replication encrypted password 'replica';CREATE ROLEpostgres=# \q[postgres@test1 ~]$ 4、配置两台从库
从主库复制备份过来
[root@test2 ~]# rm -rf /var/lib/pgsql/data/*[root@test2 ~]# pg_basebackup -h 192.168.1.11 -p 5432 -U replica -F p -P -D /var/lib/pgsql/data/Password: replica22797/22797 kB (100%), 1/1 tablespace[root@test2 ~]# chown postgres:postgres -R /var/lib/pgsql/data重命名recovery配置文件
[root@test2 ~]# mv /var/lib/pgsql/data/recovery.bak /var/lib/pgsql/data/recovery.conf新建pgpass文件
[root@test2 ~]# su - postgres[postgres@test2 ~]$ vim ~/.pgpass192.168.1.11:5432:replication:replica:replica192.168.1.12:5432:replication:replica:replica192.168.1.13:5432:replication:replica:replica[root@test2 ~]# chown 600 /var/lib/pgsql/.pgpass创建pg_archive目录
[root@test2 ~]# mkdir -p /var/lib/pgsql/pg_archive[root@test2 ~]# chown postgres:postgres /var/lib/pgsql/pg_archive修改监听ip地址,并启动服务
[root@test2 ~]# vim /var/lib/pgsql/data/postgresql.conflisten_addresses = '192.168.1.12'[root@test2 ~]# systemctl start postgresql[root@test2 ~]# systemctl stop firewalld.service在test3重复做一次
5、测试主从同步状态
在主库查看同步节点
[postgres@test1 ~]$ psql psql (10.6)Type "help" for help.postgres=# select * from pg_stat_replication;
创建测试库,然后检查两个从库是否同步
在主库操作
postgres=# CREATE DATABASE test_db;CREATE DATABASE查看从库
test2同步了
test3同步了
搭建完成
6、主从切换
模拟主库故障,切换至从库,然后把原来的主库设置为从库
查看同步状态
主库在in production状态
[root@test1 ~]# pg_controldata /var/lib/pgsql/data/pg_control version number: 1002Catalog version number: 201707211Database system identifier: 6782563721072319907Database cluster state: in productionpg_control last modified: Fri 17 Jan 2020 10:39:41 PM CSTtest2从库在in archive recovery
[root@test2 ~]# pg_controldata /var/lib/pgsql/data/pg_control version number: 1002Catalog version number: 201707211Database system identifier: 6782563721072319907Database cluster state: in archive recoverypg_control last modified: Fri 17 Jan 2020 10:39:44 PM CSTtest3从库在in archive recovery
[root@test3 ~]# pg_controldata /var/lib/pgsql/data/pg_control version number: 1002Catalog version number: 201707211Database system identifier: 6782563721072319907Database cluster state: in archive recoverypg_control last modified: Fri 17 Jan 2020 10:39:47 PM CST模拟主库故障
[root@test1 ~]# systemctl stop postgresql.service把test2提升为主库,查看test2状态,这是test2变成主库了,可以写了
[root@test2 ~]# su - postgres -c "pg_ctl promote"waiting for server to promote.... doneserver promoted[root@test2 ~]# pg_controldata /var/lib/pgsql/data/pg_control version number: 1002Catalog version number: 201707211Database system identifier: 6782563721072319907Database cluster state: in productionpg_control last modified: Fri 17 Jan 2020 10:48:12 PM CST把test3指向新主库,修改recovery里面的host,然后重启
[root@test3 ~]# vim /var/lib/pgsql/data/recovery.conf standby_mode = onprimary_conninfo = 'host=192.168.1.12 port=5432 user=replica password=replica'recovery_target_timeline = 'latest'[root@test3 ~]# systemctl restart postgresql.service 这时候test2就可以看到test3从库连过来了
把test1旧主库变成从库,指向test2
[root@test1 ~]# mv /var/lib/pgsql/data/recovery.bak /var/lib/pgsql/data/recovery.conf[root@test1 ~]# vim /var/lib/pgsql/data/recovery.confstandby_mode = onprimary_conninfo = 'host=192.168.1.12 port=5432 user=replica password=replica'recovery_target_timeline = 'latest'[root@test1 ~]# systemctl start postgresql.service去test2查看节点,test1连接上来了
test1的状态也变成in archive recovery了
[root@test1 ~]# pg_controldata /var/lib/pgsql/data/pg_control version number: 1002Catalog version number: 201707211Database system identifier: 6782563721072319907Database cluster state: in archive recoverypg_control last modified: Fri 17 Jan 2020 10:54:51 PM CST切换完成
同步
配置
文件
状态
切换
主从
故障
指向
版本
目录
节点
服务
测试
操作系统
两个
主机
地址
备份
数据
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精品咖啡豆
湖南永感互联网科技有限公司
北京路客互联网科技有限公司
互联网是不是新科技
腾讯阿里互联网科技
互联网金融公司科技
华中科技大学互联网
沃里互联网科技
成都狮子座互联网科技
青岛中康互联网医疗科技有限公司
南山科技园互联网公司有哪些
互联网校园科技培训
昊天互联网科技有限公司
华夏互联网科技业
民营互联网公司国防科技
高科技互联网发展前景如何
伊宁互联网科技做什么的
银行科技岗属于互联网吗
同城互联网络科技
互联网科技快速发展优美句子
互联网女皇 腾讯科技
深圳期待互联网科技
互联网养老 桔豆科技
北京大学互联网科技怎么样
华夏恒生互联网科技013171
阿里互联网科技企业
江苏互联网智能科技软件
吉林省码上互联网科技电话
优雇互联网科技有限公司
广州全民伙伴互联网科技有限公司