此次主从搭建全部使用pg9.6,在同一个机器上安装主库和从库,主库从库分别使用不同的端口
目录
1 环境准备
1.1 软件准备
文件:postgresql-9.6.17.tar.bz2(直接官网下载)
解压:tar -xvf /pg/soft/postgresql-9.6.17.tar.bz2
软件目录:
/pg/soft/postgresql-9.6.17
安装目录:(prefix指定安装目录)
/pg/pg96
主库data目录:/pg/pg96data_pri
从库data目录:/pg/pg96data_slave
(注意区分软件目录,安装目录,data目录)
1.2 configure
cd /pg/soft/postgresql-9.6.17
./configure --prefix=/pg/pg96
1.3 编译
make && make install
2 主从搭建-主库
2.1 创建主库
/pg/pg96/bin/initdb -D /pg/pg96data_pri
2.2 创建同步用户
启动数据库
/pg/pg96/bin/pg_ctl -D /pg/pg96data_pri -l /pg/pg96data_pri/server.log start
登陆数据库
psql postgres
创建用户
create role lzl login replication encrypted password 'lzl';
2.3 网络访问设置 pg_hba.conf
vi /pg/pg96data_pri/pg_hba.conf
host replication lzl 172.17.100.150/32 md5
#host replication lzl 0.0.0.0/0 trust
2.4 数据库配置 postgresql.conf
vi /pg/pg96data_pri/postgresql.conf
listen_addresses = '172.17.100.150' #监听地址
wal_level = hot_standby #热备模式
max_wal_senders= 6 #可以设置最多几个流复制链接
wal_keep_segments = 64
max_connections = 512
archive_mode = on #允许归档
archive_command = 'cd ./'
2.5 重启主库
/pg/pg96/bin/pg_ctl -D /pg/pg96data_pri stop
/pg/pg96/bin/pg_ctl -D /pg/pg96data_pri -l /pg/pg96data_pri/server.log start
3.主从搭建-备库
3.1 备份一个复制库
/pg/pg96/bin/pg_basebackup -h 172.17.100.150 -U lzl -D /pg/pg96data_sla -X stream -P
3.2 recovery.conf
#copy recovery.conf文件不太需要cp,它仅是一个都是注释的一般配置文件
#cp /pg/pg96/share/postgresql/recovery.conf.sample /pg/pg96data_sla/recovery.conf
编辑recovery.conf
vi /pg/pg96data_sla/recovery.conf
standby_mode = on
primary_conninfo = 'host=172.17.100.150 port=5432 user=lzl password=lzl'
trigger_file = '/pg/pg96data_sla/trigger.kenyon'
recovery_target_timeline = 'latest'
3.3 配置从库配置文件postgresql.conf
vi /pg/pg96data_sla/postgresql.conf
listen_addresses = '172.17.100.150'
port = 5433 #端口
wal_level = hot_standby
hot_standby = on #从库开启查询
max_connections = 512
3.4 启动从库
/pg/pg96/bin/pg_ctl -D /pg/pg96data_sla -l /pg/pg96data_sla/server.log start
4.主从同步状态检查
4.1 同步状态检查
#>psql postgres
postgres=# \x on
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 15335
usesysid | 16384
usename | lzl
application_name | walreceiver
client_addr | 172.17.100.150
client_hostname |
client_port | 13336
backend_start | 2021-07-27 09:22:57.140532+00
backend_xmin |
state | streaming
sent_location | 0/3000AE0
write_location | 0/3000AE0
flush_location | 0/3000AE0
replay_location | 0/3000AE0
sync_priority | 0
sync_state | async
4.2 数据同步测试
#>psql postgres
create table t1(a int);
insert into t1 values(1);
#>psql -p5433 postgres
postgres=# select * from t1;
a
---
1
(1 row)
5.安装过程中的问题
./configure 报错
configure时报错如下:
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
解决办法:
1. --without-zlib zlib会用于pg的压缩功能,如果不用可以不需要编译
2.yum install zlib-devel 如果只安装zlib是不行的,同样会报zlib找不到,需要安装zlib-devel
备库启动报错
备库start报错如下:
FATAL: data directory "/pg/pg96data_sla" has group or world access
DETAIL: Permissions should be u=rwx (0700).
解决办法:
data目录权限因为0700
chmod 700 /pg/pg96data_sla
参考资料:
http://www.postgres.cn/docs/12/warm-standby.html#STREAMING-REPLICATION
https://www.cnblogs.com/sunshine-long/p/9059695.html
https://blog.csdn.net/yaoqiancuo3276/article/details/80404883
https://blog.csdn.net/zhuenze1991/article/details/78517842
https://blog.csdn.net/qianglei6077/article/details/94379351