Gaussdb数据库修改同步备机数量

Gaussdb数据库修改同步备机数量

背景说明

当前使用的测试环境为gaussdb主备集群1主3备1仲裁共5个节点,由于测试的需要,现需要把同步备的数量修改为1。

操作步骤

1、根据当前的版本,如果裸金属部署版本大于等于503.2版本且需要把synchronous_standby_names的参数修改为any1或first1,需要修改enable_az_auto_switchover参数为0,否则不需要修改该参数,跳过该步骤

enable_az_auto_switchover

参数说明:

AZ自动切换开关,若打开,则表示允许cm_server自动切换AZ。否则当发生dn故障等情况时,即使当前AZ已经不再可用,也不会自动切换到其它AZ上,除非手动执行切换命令。
取值范围:

非负整型,0或1,0表示开关关闭,1表示开关打开。修改后可以reload生效,参数修改请参考表14-2进行设置。默认值:1

gs_guc reload -Z cmserver -N all -I all -c "enable_az_auto_switchover"="0"

2、查询当前synchronous_standby_names参数在各个DN节点的配置

synchronous_standby_names,当前集群该参数默认为ANY 2

参数说明:

潜在同步复制的备机名称列表,每个名称用逗号分隔。当前连接的同步备机是列表中的第一个名称。如果当前同步备机失去连接,则它会立即更换下一个优先级更高的备机,并将此备机的名称放入列表中。备机名称可以通过设置环境变量PGAPPNAME指定。

取值范围:

字符串。当取值为*,表示匹配任意提供同步复制的备机名称。支持按如下格式配置:
● ANY num_sync (standby_name [, …]) [, ANY num_sync (standby_name [, …])]
● [FIRST] num_sync (standby_name [, …])
● standby_name [, …]
说明
1.其中num_sync是事务需要等待其回复的同步复制的备机的数量,standby_name是备机的名称,FIRST以及ANY指定从所列服务器中选取同步复制的备机的策略。
2.ANY N (dn_instanceId1, dn_instanceId2,…)表示在括号内任选N个主机名称作为同步复制的备机名称列表。例如,ANY 1(dn_instanceId1, dn_instanceId2)表示在dn_instanceId1和dn_instanceId2中任选一个作为同步复制的备机名称。
3.FIRST N (dn_instanceId1, dn_instanceId2,…)表示在括号内按出现顺序的先后作为优先级选择前N个主机名称作为同步复制的备机名称列表。例如,FIRST 1 (dn_instanceId1,dn_instanceId2)表示选择dn_instanceId1作为同步复制的备机名称。
4.dn_instanceId1, dn_instanceId2,…和FIRST 1 (dn_instanceId1, dn_instanceId2,…)具有的含义相同。

[omm@ZHHALxjspo0db009 ~]$ gs_guc check -Z datanode -N all -I all -c "synchronous_standby_names"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c synchronous_standby_names check ].

Total GUC values: 4. Failed GUC values: 0.
The details for synchronous_standby_names:
[103.X.X.171]  synchronous_standby_names='ANY 2(dn_6002,dn_6003,dn_6004)'  [/data/data/dn/dn_6001/postgresql.conf]
[103.X.X.172]  synchronous_standby_names='ANY 2(dn_6001,dn_6003,dn_6004)'  [/data/data/dn/dn_6002/postgresql.conf]
[103.X.X.173]  synchronous_standby_names='ANY 2(dn_6004,dn_6001,dn_6002)'  [/data/data/dn/dn_6003/postgresql.conf]
[103.X.X.174]  synchronous_standby_names='ANY 2(dn_6003,dn_6001,dn_6002)'  [/data/data/dn/dn_6004/postgresql.conf]

3、根据查询节点的配置然后修改命令并分别在对应节点执行如下命令

--DN1节点执行
gs_guc reload -Z datanode -D  /data/data/dn/dn_6001 -N 103.161.73.171  -c "synchronous_standby_names='ANY 1(dn_6002,dn_6003,dn_6004)'"
--DN2节点执行
gs_guc reload -Z datanode -D  /data/data/dn/dn_6002 -N 103.161.73.172  -c "synchronous_standby_names='ANY 1(dn_6001,dn_6003,dn_6004)'"
--DN3节点执行
gs_guc reload -Z datanode -D  /data/data/dn/dn_6003 -N 103.161.73.173  -c "synchronous_standby_names='ANY 1(dn_6004,dn_6001,dn_6002)'"
--DN4节点执行
gs_guc reload -Z datanode -D  /data/data/dn/dn_6004 -N 103.161.73.174  -c "synchronous_standby_names='ANY 1(dn_6003,dn_6001,dn_6002)'"
要实现GaussDB数据库的主从同步,可以使用Python编写一个脚本来完成。下面是一个可能的实现示例: ```python import psycopg2 import psycopg2.extensions def sync_master_slave(master_conn, slave_conn): master_conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) slave_conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) # 获取主库的最新LSN(Log Sequence Number) master_cur = master_conn.cursor() master_cur.execute("SELECT pg_current_wal_lsn()") lsn = master_cur.fetchone()[0] master_cur.close() # 设置从库的同步位置为主库的LSN slave_cur = slave_conn.cursor() slave_cur.execute(f"SELECT pg_stat_replication.sync_replication_slot('{slot_name}', '{lsn}')") slave_cur.close() # 开始流复制 slave_cur = slave_conn.cursor() slave_cur.execute("START_REPLICATION SLOT {slot_name}") slave_conn.commit() slave_cur.close() # 监听从库的状态变化 while True: slave_conn.poll() if slave_conn.notifies: for notify in slave_conn.notifies: if notify.channel == 'state_change' and notify.payload == 'STREAMING': print("从库同步完成") return if __name__ == '__main__': master_conn = psycopg2.connect(dbname='master_db', user='username', password='password', host='master_host') slave_conn = psycopg2.connect(dbname='slave_db', user='username', password='password', host='slave_host') sync_master_slave(master_conn, slave_conn) ``` 在这个示例中,我们使用psycopg2库来连接主库和从库,并进行数据库操作。首先,我们获取主库的最新LSN,然后将从库的同步位置设置为主库的LSN。接下来,我们通过流复制启动从库的同步,最后监听从库的状态变化,直到同步完成。 请注意,这只是一个简单的示例,实际的实现可能会根据具体需求和数据库版本有所不同。同时,还需要根据实际情况进行错误处理、日志记录等操作来保证同步的可靠性和稳定性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨竹~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值