我的问题与以下题目中的问题相同
目前我正在使用Postgresql 9.5,我有一个主服务器和两个从服务器,在主服务器崩溃后,其中一个从服务器被指定为新的主服务器,我想要更改其他从服务器的主服务器,而不需要完全的基本备份。
我试着写了答案的步骤,但似乎不起作用,有人能指导我解决这个问题吗?
我正在写一些关于我的配置的细节,以防有帮助。
standby_mode = on
primary_conninfo = 'host=10.10.10.160 port=5432 user=repuser password=*****'
restore_command = 'cp /archivedir/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'10.10.10.160是新主服务器的IP地址。
而且,在主服务器和从服务器中,/archivedir文件夹看起来都是空的,这正常吗?postgresql.conf中存在以下设置:
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /archivedir/%f && cp %p /archivedir/%f'
max_wal_senders = 3
hot_standby = on发布于 2016-08-12 08:01:34
我设法在德佐的帮助下解决了这个问题。
为此,我使用了级联复制。当前的体系结构类似于M -> S1 -> S2。
师父: 10.10.10.146,S1: 10.10.10.130,s2: 10:10:10:160,
首先,我使用以下命令在所有三个系统中创建了repuser。
sudo -u postgres createuser -U postgres repuser -P -c 5 --replication它将要求您指定一个密码,键入您喜欢的内容,并创建repuser。我们将使用此用户进行与复制相关的操作。
在主服务器上,当前的配置是:
postgresql.conf
listen_addresses = 'localhost, 10,10,10,146'
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /here i wrote full directory starting from root/%f && cp %p /here i wrote full directory starting from root/%f'
max_wal_senders = 3pg_hba.conf
# Allow replication connections
host replication repuser 10.10.10.130/32 md5
host replication repuser 10.10.10.160/32 md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5在此配置之后,重新启动主服务器。
现在,我们需要从master S1获得完全备份。首先在S1上停止postgresql服务。然后删除数据目录(我的系统的目录是var/lib/pgsql/9.5/data )。删除“运行完全备份”命令后:
sudo -u postgres pg_basebackup -h 10.10.10.146 -D /var/lib/pgsql/9.5/data -U repuser -v -P --xlog-method=stream这将将数据文件夹复制到S1服务器。现在在postgresql.conf中打开S1,并进行以下更改
listen_addresses = 'localhost, 10,10,10,130'
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /full directory starting from root/%f && cp %p /full directory starting from root/%f'
max_wal_senders = 3
hot standby=on打开pg_hba.conf并进行以下更改:
# Allow replication connections
host replication repuser 10.10.10.160/32 md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5最后,在data文件夹下创建一个recovery.conf文件。recovery.conf应该是这样的:
standby_mode=on
primary_conninfo='host=10.10.10.146 port=5432 user=repuser password=password_of_repuser'
trigger_file='/full directory starting from root/any_folder_name'例如,如果在trigger_file = '/tmp/trigger_failover'文件中写入recovery.conf,然后在/tmp目录下创建一个名为trigger_failover的文件夹,则S1将启动故障转移进程,并开始充当主服务器。
在上述配置之后,启动S1服务器,现在M和S1应该充当主从服务器。接下来,我们需要配置S2服务器。步骤与配置S1非常相似。
首先在S2上停止postgresql服务。然后像我们在S1中所做的那样,删除数据目录。在我的示例中,S2具有与S1相同的文件夹结构,因此数据文件夹也存在于/var/lib/pgsql/9.5/数据目录中。现在运行下面的命令--这一次,我们将从S1服务器获得完全备份。
sudo -u postgres pg_basebackup -h 10.10.10.30 -D /var/lib/pgsql/9.5/data -U repuser -v -P --xlog-method=stream不,我们将更改S2中的配置文件。在postgresql.conf中,进行以下更改:
listen_addresses = 'localhost, 10,10,10,160'
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /full directory starting from root/%f && cp %p /full directory starting from root/%f'
max_wal_senders = 3
hot standby=on在recovery.conf中,进行以下更改:
standby_mode=on
primary_conninfo='host=10.10.10.160 port=5432 user=repuser password=password_of_repuser'
recovery_target_timeline='latest'你就完蛋了。现在在S2中启动postgresql服务,并看到复制机制在M、S1和S2中工作。
通过这种架构:
https://dba.stackexchange.com/questions/146382
复制相似问题