本文参考自V8R6官方文档的高可用部分(https://help.kingbase.com.cn/v8/index.html)
3.4.2.3.1
FR-1: 出现多主时,判断谁是新主
时间线:
查看谁的时间线更新,时间线大的是新主机:
数据库运行中,select timeline_id from sys_control_checkpoint();
数据库停止状态,查看控制文件 sys_controldata -D data 中 Latest checkpoint’s TimeLineID 后的数值代表时间线。
WAL 日志位置 (LSN):
lsn 位置大致能够代表用户插入数据多少,lsn 大的数据量更多,一般情况下数据量更多的是新主:
数据库运行中,select sys_current_wal_lsn();
数据库停止状态,查看控制文件
sys_controldata -D data 中 Latest checkpoint location 后的数
值代表 checkpoint 的 lsn。
控制文件中记录的 checkpoint 的 lsn,一般比当前 lsn 要小,但差别不是太大。
数据量 (Database Size,Table Size):
一般情况下数据量更多的是新主。
查看数据库大小
数据库字节数 bytes
select sys_database_size(oid) from sys_database;
按照大小,自动选择对应单位,bytes/kB/MB/GB/TB
select sys_size_pretty(sys_database_size(oid)) from sys_database;
查看表大小,每个表查看大小
该值仅代表对应表的数据文件大小(4KB 的整数倍),不是实际数据量多少,需要对每个数据
库、模式、表单独作查询。
仅查看当前数据库中用户表的大小
select relname, sys_table_size(oid) from sys_class where oid > 16300 and
relkind ='r';
select relname, sys_size_pretty(sys_table_size(oid)) from sys_class
where oid > 16300 and relkind = 'r';
仅查看当前数据库、当前模式(默认为 PUBLIC 模式)下用户表的大小
test-# \d+
需要查询系统表大小,请单独指定系统表名/OID 来查询
select sys_table_size('relname'); 或者 select sys_table_size(oid);
3.4.2.3.2 FR-2: 一键启动集群
在某一个节点上执行 sys_monitor start 来一键启动集群。
$bin_path/sys_monitor.sh start
3.4.2.3.3 FR-3: 使用 repmgr node rejoin 恢复成集群备机
在故障的节点上执行停止数据库操作。
$bin_path/sys_ctl -D $data_path stop
在故障的节点上执行 rejoin 操作,重归集群。
$bin_path/repmgr -h 新主机 ip -U esrep -d esrep -p 数据库端口 node rejoin --force-rewind
3.4.2.3.4 FR-4: 重做备机
停止数据库:
$bin_path/sys_ctl -D $data_path stop
该节点执行 standby clone 命令 (-F 参数会覆盖原有 data 目录):
$bin_path/repmgr -h 新主机 ip -U esrep -d esrep -p 数据库端口 -D $data_path standby clone -F
启动数据库:
$bin_path/sys_ctl -D $data_path start
注册备机实例到集群 (-F 参数会强制注册):
$bin_path/repmgr standby register -F
3.4.2.3.5 FR-5: 查询集群状态
查询集群状态查询到结果,正常状态为只有 1 个主机,且所有节点状态为 running。
$bin_path/repmgr cluster show
查询 repmgrd 服务状态查询到结果,正常状态为 Paused? 为 no。
$bin_path/repmgr service status
查询流复制状态正常状态为查询到所有备机信息。
$bin_path/ksql -h 主机 ip -U 数据库用户 –d 数据库名
select * from sys_stat_replication;