人大金仓 KingbaseES流复制(同步、异步)

栏目归类:人大金仓数据库
发布时间:2024-03-26 18:54:21

1.Kingbase流复制

Kingbase支持物理流复制,使用流复制时,只要主库一产生日志,就会马上传递到备库。流复制传递日志的方式有两种,分为异步流复制和同步流复制,异步流复制是指主库上提交事务时不需要等待备库接收WAL日志流并写入到备库WAL日志文件时便返回成功,而同步复流复制恰恰相反。

2.Kingbase物理流复制(异步)

异步流复制是指主库提交事务时不需要等待备库接收WAL日志流,并写入备库WAL日志文件时便返回成功。

异步流复制实验环境

主机IP地址操作系统KingbaseES版本
主节点10.10.9.164CentOS 7.6KingbaseESV8R6
备节点10.10.9.165CentOS 7.6KingbaseESV8R6

2.1.配置

  • 初始化一个数据库

Server/bin/initdb -Usystem -D data_async -x123456

  • 修改主库kingbase.conf配置:
wal_level = replica#wal日志级别,流复制必须使用 replica 或更高级别
max_wal_senders = 10#指定来自后备服务器或流式基础备份客户端的并发连接的最大数量
max_replication_slots =3#指定服务器可以支持的复制槽最大数量
hot_standby = on#指定在恢复期间,是否能够连接并运行查询
wal_keep_segments = 512#指定在后备服务器需要为流复制获取日志段文件
full_page_writes = on#开启该参数可以 避免数据坏块,建议为 on
  • 创建复制用户
$ ksql -Usystem -d test -p9000
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# create user kes_rep replication login connection limit 10 encrypted password '123456';
CREATE ROLE
  • 配置sys_hba.conf文件
host    replication     kes_rep             ::1/128                 trust
host    replication     kes_rep             0.0.0.0/0               trust
  • 基础备份从库数据目录
$ Server/bin/sys_basebackup -D data_async -U kes_rep -h 10.10.9.164 -p9000 -X stream -R -v -P
sys_basebackup: initiating base backup, waiting for checkpoint to complete
sys_basebackup: checkpoint completed
sys_basebackup: write-ahead log start point: 0/2000028 on timeline 1
sys_basebackup: starting background WAL receiver
sys_basebackup: created temporary replication slot "sys_basebackup_4037"
50349/50349 kB (100%), 1/1 tablespace
sys_basebackup: write-ahead log end point: 0/20000F8
sys_basebackup: waiting for background process to finish streaming ...
sys_basebackup: syncing data to disk ...
sys_basebackup: base backup completed
  • 备库配置恢复参数

恢复配置参数kingbase.conf文件

recovery_target_timeline='latest'
primary_conninfo='host=10.10.9.164 port=9000 user=kes_rep'
  • 查看同步方式

主库查看sys_stat_replication视图的sync_state字段

$ ksql -Usystem -d test -p9000
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# \x
扩展显示已打开.
test=# select * from sys_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 2181
usesysid         | 16386
usename          | kes_rep
application_name | kingbase_*&+_++
client_addr      | 10.10.9.165
client_hostname  |
client_port      | 62675
backend_start    | 2023-05-25 22:04:31.052140+08
backend_xmin     |
state            | streaming
sent_lsn         | 0/3000130
write_lsn        | 0/3000130
flush_lsn        | 0/3000130
replay_lsn       | 0/3000130
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async
reply_time       | 2023-05-25 22:07:25.659621+08
  • 测试验证
#主库插入数据
$ ksql -Usystem -d test -p9000
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# create table t1(id int);
CREATE TABLE
test=# insert into t1 select generate_series(1,100000);
INSERT 0 100000
test=# select count(*) from t1;
 count
--------
 100000
(1 行记录)
test=#

#从库查询数据
$ ksql -Usystem -d test -p9000 -h 10.10.9.165
用户 system 的口令:
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# select count(*) from t1;
 count
--------
 100000
(1 行记录)

3.Kingbase物理流复制(同步)

同步流复制是指主库上提交事务时需要等待备库接收WAL日志流,当主库至少收到一个备库发回的确认信息便返回成功,同步流复制确保了至少一个备库收到主库发送的WAL日志。

同步流复制实验环境

主机IP地址操作系统KingbaseES版本
主节点10.10.9.164CentOS 7.6KingbaseESV8R6
备节点10.10.9.165CentOS 7.6KingbaseESV8R6
级联备库10.10.9.166CentOS 7.6KingbaseESV8R6

3.1.配置

  • 初始化数据库
$ Server/bin/initdb -Usystem -D data_sync -x123456
  • 创建复制用户
$ ksql -Usystem -d test -p 54321
ksql (V8.0)
输入 "help" 来获取帮助信息.

test=# create user kes_rep replication login connection limit 10 encrypted password '123456';
CREATE ROLE
  • 配置sys_hba.conf
host    replication     kes_rep             ::1/128             trust
host    replication     kes_rep             0.0.0.0/0               trust
  • 修改主库kingbase.conf文件
wal_level = replica
max_wal_senders = 10 
max_replication_slots =3 
hot_standby = on 
wal_keep_segments = 512 
full_page_writes = on
synchronous_commit=on
synchronous_standby_names='node2'
  • 备库配置恢复参数

主配置参数kingbase.conf

wal_level = replica
max_wal_senders = 2
max_replication_slots =2
hot_standby = on
wal_keep_segments = 512
wal_log_hints = on
full_page_writes = on
synchronous_commit=on
synchronous_standby_names='node2'


恢复配置参数"kingbase.auto.conf"
primary_conninfo = 'user=kes_rep passfile=''/home/kingbase/.kbpass'' host=10.10.9.164 port=54321 application_name=''node2'' sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any'
  • 查看同步方式
$ ksql -Usystem -d test -p54321
ksql (V8.0)
输入 "help" 来获取帮助信息.

test=# \x
扩展显示已打开.
test=# select * from sys_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 19230
usesysid         | 16384
usename          | kes_rep
application_name | node2
client_addr      | 10.10.9.165
client_hostname  |
client_port      | 45602
backend_start    | 2023-05-25 22:42:07.233996+08
backend_xmin     |
state            | streaming
sent_lsn         | 0/30000D0
write_lsn        | 0/30000D0
flush_lsn        | 0/30000D0
replay_lsn       | 0/30000D0
write_lag        | 00:00:00.000262
flush_lag        | 00:00:00.000262
replay_lag       | 00:00:00.000262
sync_priority    | 1
sync_state       | sync
reply_time       | 2023-05-25 22:42:21.520564+08
streaming 0/30001D8
  • 基础备份从库数据目录
$ Server/bin/sys_basebackup -D data_sync -U kes_rep -h 10.10.9.164 -p54321 -X stream -R -v -P
sys_basebackup: initiating base backup, waiting for checkpoint to complete
sys_basebackup: checkpoint completed
sys_basebackup: write-ahead log start point: 0/2000028 on timeline 1
sys_basebackup: starting background WAL receiver
sys_basebackup: created temporary replication slot "sys_basebackup_16091"
50349/50349 kB (100%), 1/1 tablespace
sys_basebackup: write-ahead log end point: 0/2000128
sys_basebackup: waiting for background process to finish streaming ...
sys_basebackup: syncing data to disk ...
sys_basebackup: base backup completed
  • 查看同步进程
主库10.10.9.164:53421可以看到walsender进程
kingbase 17582     1  0 22:42 ?        00:00:00 Server/bin/kingbase -D data_sync
kingbase 17730 17582  0 22:42 ?        00:00:00 kingbase: logger
kingbase 17783 17582  0 22:42 ?        00:00:00 kingbase: checkpointer
kingbase 17784 17582  0 22:42 ?        00:00:00 kingbase: background writer
kingbase 17785 17582  0 22:42 ?        00:00:00 kingbase: walwriter
kingbase 17786 17582  0 22:42 ?        00:00:00 kingbase: autovacuum launcher
kingbase 17787 17582  0 22:42 ?        00:00:00 kingbase: stats collector
kingbase 17788 17582  0 22:42 ?        00:00:00 kingbase: ksh writer
kingbase 17790 17582  0 22:42 ?        00:00:00 kingbase: ksh collector
kingbase 17792 17582  0 22:42 ?        00:00:00 kingbase: kwr collector
kingbase 17793 17582  0 22:42 ?        00:00:00 kingbase: logical replication launcher
kingbase 19230 17582  0 22:42 ?        00:00:00 kingbase: walsender kes_rep 10.10.9.165(45602) streaming 0/30001D8

备库10.10.9.165:54321可以看到walreceiver进程
kingbase 16448     1  0 22:41 ?        00:00:00 / Server/bin/kingbase -D data_sync
kingbase 16454 16448  0 22:41 ?        00:00:00 kingbase: logger
kingbase 16455 16448  0 22:41 ?        00:00:00 kingbase: startup   recovering 000000010000000000000003
kingbase 16462 16448  0 22:41 ?        00:00:00 kingbase: checkpointer
kingbase 16463 16448  0 22:41 ?        00:00:00 kingbase: background writer
kingbase 16464 16448  0 22:41 ?        00:00:00 kingbase: stats collector
kingbase 16749 16448  0 22:42 ?        00:00:00 kingbase: walreceiver   streaming 0/30001D8

3.2.级联备库案例

  • 基础备份从库数据目录
Server/bin/sys_basebackup -D data_cascade -U kes_rep -h 10.10.9.165 -p54321 -X stream -R -v -P
  • 修改kingbase.conf文件,配置级联备库恢复参数
wal_level = replica
max_replication_slots =3
hot_standby = on
wal_keep_segments = 512
wal_log_hints = on
full_page_writes = on
  • 修改kingbase.auto.conf文件
#host和port指向上一级备库地址
primary_conninfo = 'user=kes_rep passfile=''/home/kingbase/.kbpass'' host=10.10.9.165 port=54321 application_name=''node3'' sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any'
  • 启动级联备库
$ Server/bin/sys_ctl -D data_cascade start
  • 级联备库查询上一级备库
test=# select * from sys_stat_wal_receiver;
-[ RECORD 1 ]---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid                   | 22380
status                | streaming
receive_start_lsn     | 0/3000000
receive_start_tli     | 1
received_lsn          | 0/3000000
received_tli          | 1
last_msg_send_time    | 2023-05-26 15:29:46.219583+08
last_msg_receipt_time | 2023-05-26 15:29:32.035829+08
latest_end_lsn        | 0/30001D8
latest_end_time       | 2023-05-26 15:20:45.036284+08
slot_name             |
sender_host           | 10.10.9.165
sender_port           | 54321
conninfo              | user=kes_rep passfile=/home/kingbase/.kbpass dbname=replication host=10.10.9.165 port=54321 application_name=node3 fallback_application_name=walreceiver sslmode=prefer sslcompression=0 gssencmode=disable target_session_attrs=any
  • 备库查询下一级备库
test=# select client_addr,state,sync_state,client_port,usename,application_name from sys_stat_replication;
-[ RECORD 1 ]----+------------
client_addr      | 10.10.9.164
state            | streaming
sync_state       | async
client_port      | 32996
usename          | kes_rep
application_name | node3

更多信息,参见https://help.kingbase.com.cn/v8/index.html

文章来源:https://blog.csdn.net/arthemis_14/article/details/132429764
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
Feichi 技术分享站