KingbaseES V8R6流复制案例之---同步转异步测试
案例说明:
架构为单纯的一主一备流复制,没有repmgr的集群管理,测试备库数据库服务down,是否支持流复制从同步自动转换为异步。
一、相关参数配置
1、kingbase.auto.conf配置
[kingbase@node201 data]$ cat kingbase.auto.conf
primary_conninfo = 'user=system connect_timeout=10 host=192.168.1.202 port=54328 keepalives=1 keepalives_idle=10 keepalives_interval=1 keepalives_count=3 tcp_user_timeout=9000 application_name=node1'
primary_slot_name = 'repmgr_slot_1'
wal_sender_timeout = '30000'
synchronous_standby_names = '1 (node2)'
synchronous_commit = 'on'
2、参数配置
prod=# show wal_sender_timeout;
wal_sender_timeout
--------------------
30s
(1 row)
test=# show synchronous_standby_names;
synchronous_standby_names
---------------------------
1(node2)
(1 row)
3、流复制状态(sync)
test=# select * from sys_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | back
end_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag
| flush_lag | replay_lag | sync_priority | sync_state | reply_time
------+----------+---------+------------------+---------------+-----------------+-------------+-----------
-----------------+--------------+-----------+----------+------------+------------+------------+-----------
+-----------+------------+---------------+------------+----------------------------
4931 | 10 | system | node2 | 192.168.1.202 | | 59817 | 2024-07-08
15:01:47.740049 | | streaming | | 0/29959988 | 0/29959988 | 0/29959988 |
| | | 1 | sync | 2024-07-08 15:03:28.069166
(1 row)
流复制为sync模式:
二、测试脚本
[kingbase@node201 bin]$ cat ins.sh
#!/bin/bash
echo 'Insert rows test ....'
while true
do
sleep 1
/opt/Kingbase/ES/V9R1/Server/bin/ksql -U system prod -p 54328 <<EOF
insert into tb1 values(generate_series(1,1),now());
EOF
done
三、执行事务测试
在测试过程中,将备库数据库服务down,查看事务操作是否会继续执行(同步转异步):
1、执行事务
[kingbase@node201 bin]$ sh ins.sh
Insert rows test ....
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
.......
2、关闭备库数据库服务
[kingbase@node202 bin]$ ./sys_ctl stop -D /home/kingbase/db/mysql/data/
waiting for server to shut down.... done
server stopped
3、主备流复制断开
test=# select * from sys_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | back
end_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag
| flush_lag | replay_lag | sync_priority | sync_state | reply_time
------+----------+---------+------------------+---------------+-----------------+-------------+-----------
-----------------+--------------+-----------+----------+------------+------------+------------+-----------
+-----------+------------+---------------+------------+----------------------------
(0 row)
4、查看已写入数据
此时,事务已处于停止状态(同步状态,备库数据库服务down,事务无法commit,需要等待备库ack,如果sync自动转换为 async后,事务将继续执行),表里已经插入的数据如下:
prod=# select count(*) from tb1;
count
-------
25
(1 row)
---在等待2分钟后,事务仍处于停止等待状态,说明流复制没有自动从同步转为异步。
三、手工同步转异步
1、配置synchronous_commit
如下所示 ,synchronous_commit 默认为on(事务commit,需等待备库wal日志写入磁盘,并返回ack给主库后,才能完成事务的commit。):
prod=# show synchronous_commit ;
synchronous_commit
--------------------
on
(1 row)
配置synchronous_commit =local(事务commit,只需要将主库wal日志写入到本地磁盘后,即返回ack,完成事务commit):
prod=# alter system set synchronous_commit='local';
ALTER SYSTEM
prod=# select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 row)
prod=# show synchronous_commit ;
synchronous_commit
--------------------
local
(1 row)
配置synchronous_commit =local后,发现事务仍然处于等待状态,写入数据没有变化:
prod=# select count(*) from tb1;
count
-------
25
2、配置synchronous_standby_names
prod=# show synchronous_standby_names ;
synchronous_standby_names
---------------------------
1(node2)
(1 row)
prod=# alter system set synchronous_standby_names='';
ALTER SYSTEM
prod=# select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 row)
prod=# show synchronous_standby_names ;
synchronous_standby_names
---------------------------
(1 row)
配置synchronous_standby_names=‘’后,事务继续执行(流复制同步转为异步):
prod=# select count(*) from tb1;
count
-------
48
(1 row)
四、总结
对于单纯的主备流复制架构(无集群管理),在所有备库数据库服务down后,默认流复制不支持从同步模式转换为异步模式(不受wal_sender_timeout参数控制),需要通过人为干预,强制从同步转换为异步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」