使用PostgreSQL9.5配置级联复制
首先
继续MySQL之后,我们也可以在PostgreSQL中配置相同的复制。
在MySQL中,chained replication被称为PostgreSQL中的cascading replication。
即是指
主节点 -> 从节点1 -> 从节点2
的配置。
在这种情况下,Slave 1也是Slave 2的主节点。
特别事项
通过在slave1和slave2上执行常规的复制构建步骤,可以实现级联复制。但是,如果直接将slave1晋升为master,那么slave1->slave2的复制将停止。
由于slave1晋升时TimeLineID会增加,导致与slave2的TimeLineID产生差异。
为了避免这种情况发生,需要在slave的recovery.conf中添加额外的设置。
前提 tí) – premise, assumption, prerequisite
-
- PostgreSQL9.5
-
- ストリーミングレプリケーション(スレーブ非同期)
-
- レプリケーション用ユーザ:replicator
-
- 各ノードは全て192.168.1.0/24のネットワークに所属
- Ubuntu16.04
必要的设置 (bì de shè zhì)
共通 []
postgresql.conf 触发器_settings_customize.sql_file。
wal_level = hot_standby
synchronous_commit = local #スレーブ非同期
max_wal_senders = 2 #1以上、slaveの数+1
wal_keep_segments = 8 #任意
pg_hba.conf (PG Host-Based Authentication Configuration file) 在中国本地化被称为 “主机身份验证配置文件”。
host replication replicator 192.168.1.0/24 trust #必要に応じてmd5
在进行基本备份时,MD5将要求输入replicator用户的密码。
由postgres用户进行公钥认证设置。
我将省略详细步骤。
我们将确保所有节点都允许postgres用户使用公钥认证进行ssh登录。
师傅
创建用于复制的用户
postgres=# create user replicator replication password 'replicator';
奴隶一号
停下 PostgreSQL
$ sudo service postgresql stop
基本备份
$ sudo su - postgres
$ mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.org
$ pg_basebackup -U replicator -h MASTER_IP -D /var/lib/postgresql/9.5/main --xlog --progress --verbose
创建recovery.conf文件
$ sudo su - postgres
$ vi /var/lib/postgresql/9.5/main/recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=replicator password=replicator host= MASTER_IP'
trigger_file = '/var/lib/postgresql/9.5/main/failover'
recovery_target_timeline='latest'
restore_command = 'scp MASTER_IP:/var/lib/postgresql/9.5/main/pg_xlog/%f %p 2> /dev/null'
启动PostgreSQL
$ sudo service postgresql start
奴隶2
停止 PostgreSQL
$ sudo service postgresql stop
备份基础
$ sudo su - postgres
$ mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.org
$ pg_basebackup -U replicator -h SLAVE1_IP -D /var/lib/postgresql/9.5/main --xlog --progress --verbose
创建recovery.conf文件
$ sudo su - postgres
$ vi /var/lib/postgresql/9.5/main/recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=replicator password=replicator host= MASTER_IP'
trigger_file = '/var/lib/postgresql/9.5/main/failover'
recovery_target_timeline='latest'
restore_command = 'scp SLAVE1_IP:/var/lib/postgresql/9.5/main/pg_xlog/%f %p 2> /dev/null'
启动PostgreSQL
$ sudo service postgresql start
复制确认
师傅,奴隶1
$ sudo -i -u postgres psql -x -c 'SELECT * from pg_stat_replication;'
state | streaming
であればレプリケーションが正常に行なわれている
故障切换(主节点晋升)
只需按照recovery.conf文件中指定的触发器文件创建该文件,然后通过重新启动postgresql即可实现主服务器升级。
奴隶1或奴隶2
$ sudo su - postgres
$ touch /var/lib/postgresql/9.5/main/failover
$ exit
$ sudo service postgresql restart