根据搜集的资料安装测试并在安装测试过程中整理的文档,如有不足希望不吝赐教。
目录
一、环境介绍
二、主节点配置
1.修改配置文件
2.创建超级用户
3.基础备份
三、配置备节点
1.修改配置文件
四、查询主备
1.pg_controldata命令
2.字典表pg_stat_replication
3.进程信息识别
4.通过pg函数
一、环境介绍
系统:两台CentOS7.5
ip:172.17.0.84(主)、172.17.0.86(备)
数据库版本:PotsgreSQL11
主从流复制配置:
二、主节点配置
1.修改配置文件
使用postgres用户:su - postgres
进入data目录(实际目录可能不同):cd /var/lib/pgsql/11/data
修改配置文件:vim postgresql.conf
编辑文件内容,找到如下设置项并修改:
wal_level = hot_standby # 这个是设置主为wal的主机
max_wal_senders = 1 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 500 # 设置流复制保留的最多的xlog数目
hot_standby = on
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log’
上边配置项部分需要取消注释,日志配置如果已经有,保持默认即可。修改完成后保存退出。
2.创建超级用户
登录数据库,在主节点数据库中创建一个超级用户,standby数据库会使用这个用户连接到主库上拖WAL日志。
psql
下面创建用户命令是在登录数据库后执行:
create user standby SUPERUSER LOGIN password 'standby';
3.基础备份
开启备份功能
psql -c "select pg_start_backup('backup0001')"
使用scp命令将data目录下数据远程拷贝到备库data目录下:
scp -r /var/lib/pgsql/11/data/* 172.17.0.86:/var/lib/pgsql/11/data/
因为上面的命令会默认使用postgresql创建的用户postgres,因此此处使用了root用户发送,但是需要在发送完成后在备机上修改文件属组,直接递归将整个data目录的用户和组全部修改即可(chown -R postgres:postgres data/)。
scp -r /var/lib/pgsql/11/data/* root@172.17.0.86:/var/lib/pgsql/11/data/
关闭备份功能
psql -c "select pg_stop_backup()"
修改完成后重启主数据库。
三、配置备节点
1.修改配置文件
修改data目录下postgresql.conf文件,把其中的hot_standby设置为on。
拷贝示例文件/usr/pgsql-11/share/recovery.conf.sample到/var/lib/pgsql/11/data/目录下,然后改名成recovery.conf:
mv recovery.conf.sample recovery.conf
编辑(vim)recovery.conf修改相关的配置项为如下内容:
standby_mode = 'on'
primary_conninfo = 'host=172.17.0.84 port=5432 user=standby password=standby'
修改完成后保存退出,然后重启从数据库。
四、查询主备
1.pg_controldata命令
首先切换到postgres用户(已经切换忽略):su - postgres
然后使用pg_controldata命令查看状态,这里需要注意的是,pg_controldata命令并不一定是在data目录下,也不一定可以直接使用,因此可以用find命令(find / -name pg_controldata)查找pg_controldata位置,然后再使用命令的完整路径查看。
本次完整路径为:/usr/pgsql-11/bin/pg_controldata,执行命令查看:
主机:
备机:
可以看到主机的cluster state是in production,备机的cluster state是in archive recovery。
2.字典表pg_stat_replication
在postgres用户下,登录数据库,然后使用下面查询语句:
select pid,application_name,client_addr,client_port,state,sync_state from pg_stat_replication;
在主机字典表中是能查到记录,备机中是查询不到的。如下:
主机:
备机:
3.进程信息识别
使用命令ps -ef|grep postgres查看进程,可以通过进程信息识别主备机。如下:
主机:
备机:
4.通过pg函数
在postgres用户下,登录数据库,然后使用下面查询语句:
select pg_is_in_recovery();
主机是f,备机是t。
主机:
备机:
END