Ubuntu20.04搭建postgresql12主从
postgresql主服务器(10.0.0.2):
# apt-get install postgresql
# mkdir /space/postgresqldb
# systemctl stop postgresql
# rsync –av –progress /var/lib/postgresql/12/main /space/postgresqldb/
# mv /var/lib/postgresql /var/lib/postgresql.bak
# vi /etc/postgresql/12/main/postgresql.conf
按a或i进入编辑模式
data_directory = '/space/postgresqldb/main'
listen_addresses = ‘*’ (默认为注释的,此处不改从postgresql同步时会报连接拒绝)
wal_level = hot_standby (默认为注释的)
max_wal_senders = 10 (默认为注释,这个参数是控制主库最多可以有多少个并发的standby数据库)
wal_keep_segments = 32 (默认为注释,设置足够大的值,以防止主库生成wal日志太快,日志还没有来得及传送到standby就会循环覆盖了)
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log' (绝对路径为:/var/lib/postgresql/9.1/main/)
log_file_name = 'postgresql-%y-%m-%d_%H%M%S.log'
log_rotation_size = 10MB
按Esc键退出编辑
:wq (保存并退出)
# vi /etc/postgresql/12/main/pg_hba.conf
按a或i进入编辑模式
host replication postsync 10.0.0.3/32 md5 (md5是需要密码,trust是不需要密码)
按Esc键退出编辑
:wq (保存并退出)
$ psql
postgres=# create user postsync superuser password '*****';
postgres=# \q
重启postgresql
# service postgresql restart
postgresql从服务器(10.0.0.3):
注:从postgresql会将主postgresql的所有数据同步,包括创建的账号及权限
# apt-get install postgresql
# mkdir /space/postgresqldb
# systemctl stop postgresql
# rsync –av –progress /var/lib/postgresql/12/main /space/postgresqldb/
# mv /var/lib/postgresql /var/lib/postgresql.bak
$ vi /etc/postgresql/12/main/postgresql.conf
按a或i进入编辑模式
data_directory = '/space/postgresqldb/main'
hot_standby = on (默认为注释)
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log' (绝对路径为:/var/lib/postgresql/9.1/main/)
log_file_name = 'postgresql-%y-%m-%d_%H%M%S.log'
log_rotation_size = 10MB
按Esc键退出编辑
:wq (保存并退出)
# /usr/lib/postgresql/12/bin/pg_basebackup -h 10.0.0.2 -U postsync -D /space/postgresqldb/main/ -X stream -P -p 5432
# vi /space/postgresqldb/main/tandby.signal
standby_mode='on'
:wq
# vi /space/postgresqldb/main/postgresql.auto.conf
primary_conninfo='host=10.0.0.2 port=5432 user=postsync password=xxxxxx’
:wq
# service postgresql restart
# cat /space/postgresqldb/main/pg_log/postgresql-2021-10-14_180349.log (主要是看有没有“LOG: entering standby mode”和“consistent recovery state reached at 0/3000000”)
在主的postgresql里执行下面命令(能看到从ip和async状态)
select client_addr,sync_state from pg_stat_replication;
验证:
此时在主postgresql上新建数据库或表等,然后再到从postgresql上查看是否已经同步