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上查看是否已经同步