当前位置: 首页 > news >正文

Docker 搭建KingbaseES主备流复制


author: aming
email: jikcheng@163.com
title: Docker 安装KingbaseES读写分离集群
creation_date: 2023-02-16 13:59
Last modified date: 2023-02-16 19:18
tags: Docker 安装KingbaseES读写分离集群
File Folder with relative path: reading notes/doc/Docker技术入门与实战
remark:
other:

本章背景知识

大体步骤参考:[[流复制–V8R6手工搭建]]
docker安装集群 - 技术干货 - 金仓社区 (kingbase.com.cn)
本章使用三节点容器搭建主备流复制集群。

一、容器节点 IP规划

IP规划:
192.168.20.111	--节点一主机IP(主节点)
192.168.20.112	--节点二主机IP(备节点)
192.168.20.113	--节点三主机IP(备节点)

二、容器信息规划

部分说明
IP: 端口192.168.20.111:54321,192.168.20.112:54322,192.168.20.113:54 323。
主机名称c_node1,c_node2,c_node3。
容器名称kcm_kingbase01,kcm_kingbase02,kcm_kingbase03。

三、宿主机环境准备

1、下载网盘中的镜像 kignbase.v8r6c5b23.tar
2、将镜像导入 Docker 服务器中。

$ docker load -i kignbase.v8r6c5b23.tar 

3、查看是否导入成功。

$ docker images
REPOSITORY    TAG        IMAGE ID       CREATED         SIZE
kesimg86523   latest     64f5d3730270   24 hours ago    2.6GB

4、创建 Docker 容器私有网络。

$ docker network create --subnet=192.168.20.0/24 kcmnet

编者注:由于 Docker 自带的网络接口不允许指定静态 IP 地址,所以需要新建私有网络。

LAB01-Docker 容器准备

如果需要清空环境则需要执行以下命令。
```bash
docker rm -f `docker ps -aq`
```
此命令非常危险请只在测试环境上操作。

1、创建流复制所需的容器。

docker run -itd --privileged -h c_node1 --name kcm_kingbase01 --net kcmnet --ip 192.168.20.111  -p 54321:54321   --restart=on-failure:3  kesimg86523:latest /usr/sbin/initdocker run -itd  --privileged -h c_node2 --name kcm_kingbase02  --net kcmnet --ip 192.168.20.112  -p 54322:54321   --restart=on-failure:3  kesimg86523:latest /usr/sbin/initdocker run -itd  --privileged -h c_node3 --name kcm_kingbase03 --net kcmnet  --ip 192.168.20.113  -p 54323:54321   --restart=on-failure:3  kesimg86523:latest /usr/sbin/init

2、命令说明。

选项说明
-it使用 tty 伪终端,并进入交互式模式。
-d使用守护进程运行容器。
-h容器主机名。
–restart-=on-faulure: 3当容器故障退出,重启 3 次,3 次之后不会再重启。
–net kcmnet指定流复制私有网络环境。

LAB02-备节点数据目录清空

1、请执行以下操作进入 kcm_kingbase02, kcm_kingbase03 容器。
2、删除 kcm_kingbase02 数据目录。

docker$ docker exec -u kingbase -it kcm_kingbase02 /bin/bash
<contanier>$ sys_ctl stop 
<contanier>$ rm -rf /home/kingbase/data/*
<contanier>$ rm -rf /home/kingbase/data/.wallet
<contanier>$ exit

3、删除 kcm_kingbase03 数据目录。

docker$ docker exec -u kingbase -it kcm_kingbase03 /bin/bash
<contanier>$ sys_ctl stop 
<contanier>$ rm -rf /home/kingbase/data/*
<contanier>$ rm -rf /home/kingbase/data/.wallet
<contanier>$ exit

LAB03-容器主机名解析

一、所有容器配置 host 文件

1、c_node1。

$ docker exec -u root -it kcm_kingbase01 vi /etc/hosts------------------写入以下内容------------------
192.168.20.111 c_node1
192.168.20.112 c_node2
192.168.20.113 c_node3

2、c_node2。

$ docker exec -u root -it kcm_kingbase02 vi /etc/hosts
------------------写入以下内容------------------
192.168.20.111 c_node1
192.168.20.112 c_node2
192.168.20.113 c_node3

3、c_node3。

$ docker exec -u root -it kcm_kingbase03 vi /etc/hosts
------------------写入以下内容------------------
192.168.20.111 c_node1
192.168.20.112 c_node2
192.168.20.113 c_node3

二、验证主机名解析正确

1、node1。

docker exec -u root -it kcm_kingbase01 ping -c 4 c_node1
docker exec -u root -it kcm_kingbase01 ping -c 4 c_node2
docker exec -u root -it kcm_kingbase01 ping -c 4 c_node3

2、node2。

docker exec -u root -it kcm_kingbase02 ping -c 4 c_node1
docker exec -u root -it kcm_kingbase02 ping -c 4 c_node2
docker exec -u root -it kcm_kingbase02 ping -c 4 c_node3

3、node3。

docker exec -u root -it kcm_kingbase03 ping -c 4 c_node1
docker exec -u root -it kcm_kingbase03 ping -c 4 c_node2
docker exec -u root -it kcm_kingbase03 ping -c 4 c_node3

LAB04-配置主节点(c_node 1)

一、配置归档及流复制参数

1、进入 kcm_kingbase01 容器。

$ docker exec -u kingbase -it kcm_kingbase01 /bin/bash

2、配置流复制参数。

<contanier>$ cat >> $KINGBASE_DATA/kingbase.conf <<EOF
wal_log_hints=on
wal_level = replica             # minimal, replica, or logical
max_wal_senders = 10            # max number of walsender processes
max_replication_slots = 10
wal_keep_segments = 1024	# in logfile segments, 16MB each; 0 disables 
hot_standby = on
synchronous_commit = on
synchronous_standby_names = '1(c_node1,c_node2,c_node3)'
hot_standby_feedback=on
fsync=on
EOF
echo ''

二、配置主节点 sys_hba. conf 支持 replication

<contanier>$ cat >> $KINGBASE_DATA/sys_hba.conf <<EOF
host replication system 127.0.0.1/32 md5
host replication system 0.0.0.0/0 md5
EOF
echo ''
grep -Ev "^$|#" $KINGBASE_DATA/sys_hba.conf

三、重启主节点数据服务

<contanier>$ sys_ctl restart -D $KINGBASE_DATA

四、在主节点上创建 replication 复制槽

1、查看当前复制槽

$ docker exec -u kingbase -it kcm_kingbase01 /bin/bash
<contanier>$  ksql  -U system -d test
# \x 
SELECT * FROM sys_replication_slots;

2、创建复制槽

<contanier>$  ksql  -U system -d test
test# SELECT * FROM sys_create_physical_replication_slot('slot_node2');
test# SELECT * FROM sys_create_physical_replication_slot('slot_node3');
test# SELECT slot_name, slot_type, active FROM sys_replication_slots;

LAB05-配置备节点 (c_node 2)

一、用sys_basebackup全量传输

1、进入 kcm_kingbase 02 备节点。

$ docker exec -u kingbase -it kcm_kingbase02 /bin/bash

2、全量传输数据。

<contanier>$ sys_basebackup -h c_node1 -p 54321 -U system -Fp -X stream -v -P -D $KINGBASE_DATA
ls -lh $KINGBASE_DATA
du -sh $KINGBASE_DATA

二、配置 kingbase. conf

<contanier>$ cat >> $KINGBASE_DATA/kingbase.conf << EOF 
primary_conninfo='port=54321 host=c_node1 user=system password=kingbase application_name=c_node2' 
recovery_target_timeline='latest' 
primary_slot_name ='slot_node2'
EOF
touch $KINGBASE_DATA/standby.signal

三、启动备节点并开启流复制

sys_ctl start -D $KINGBASE_DATA
tail -f $KINGBASE_DATA/sys_log/kingbase*.log

LAB06-配置备节点 (c_node 3)

一、用 sys_basebackup 全量传输

1、进入kcm_kingbase02备节点

$ docker exec -u kingbase -it kcm_kingbase03 /bin/bash

2、全量传输数据。

<contanier>$ sys_basebackup -h c_node1 -p 54321 -U system -Fp -X stream -v -P -D $KINGBASE_DATA
ls -lh $KINGBASE_DATA
du -sh $KINGBASE_DATA

二、配置 kingbase.conf

<contanier>$ cat >> $KINGBASE_DATA/kingbase.conf << EOF 
primary_conninfo='port=54321 host=c_node1 user=system password=kingbase application_name=c_node3' 
recovery_target_timeline='latest' 
primary_slot_name ='slot_node3'
EOF
touch $KINGBASE_DATA/standby.signal

三、启动备节点并开启流复制

sys_ctl start -D $KINGBASE_DATA
tail -f $KINGBASE_DATA/sys_log/kingbase*.log

LAB07- 验证流复制环境

一、在主节点查看流复制状态

1、进入 kcm_kingbase 01 主节点。

$ docker exec -u kingbase -it kcm_kingbase01 /bin/bash

2、查看 replication 进程 (主节点上可以看到正在向从节点发送数据流

$ ps -ef|grep -v grep|grep -E 'sender|receiver'

3、查看流复制状态

ksql -U system -d test 
SELECT * FROM sys_stat_replication;

4、查看复制槽信息。

SELECT * FROM sys_replication_slots;

二、在主节点创建测试数据

1、进入 kcm_kingbase01 容器。

$ docker exec -u kingbase -it kcm_kingbase01 /bin/bash

2、生成测试数据。

<contanier>$ ksql -U system -d test 
CREATE database prod01; 
TEST=# \c prod01 system
CREATE table t01 (id int ,name text);
INSERT INTO t01 SELECT generate_series(1,1000),md5(random());
SELECT * FROM t01 limit 2;

三、在主节点创建测试数据 (c_node 2)

1、进入 kcm_kingbase01 容器。

$ docker exec -u kingbase -it kcm_kingbase02 /bin/bash

2、查看数据。

SELECT * FROM t01 limit 2;

四、在主节点创建测试数据 (c_node 3)

1、进入 kcm_kingbase01 容器。

$ docker exec -u kingbase -it kcm_kingbase03 /bin/bash

2、查看数据。

SELECT * FROM t01 limit 2;
http://www.lryc.cn/news/10091.html

相关文章:

  • java易错题锦集四
  • 每天10个前端小知识 【Day 17】
  • Python语言零基础入门教程(二十三)
  • [ansible系列]ansible使用扩展
  • Java工具类(时间格式转换)
  • 数据库(第五次作业)
  • 代码随想录【Day16】| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
  • 套娃式工具!用 AI 识别 AI ?#AI classifier
  • CURL error 60: SSL certificate problem: certificate has expired
  • 接口自动化:requests
  • 极简TypeScript教程--数据类型
  • JAVA开发测试(jmeter如何测试性能与估算)
  • 【新解法】华为OD机试 - 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供
  • Python3 File(文件) 方法
  • APP渗透抓包
  • 力扣(LeetCode)414. 第三大的数(2023.02.16)
  • Spring底层
  • Cache-Control 常见字段
  • Flink Checkpoint 中的通用增量Checkpoint
  • 金三银四必看的软件测试面试题宝典,背完offer随便拿
  • 企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 扬帆优配“数字经济+实体经济”融合发展,行业增长空间大!
  • 分享82个HTML电脑主机模板,总有一款适合您
  • .htaccess语法教程
  • C++ ——多态 下 (图解多态原理、虚函数的再认知)
  • cocos creater 3.x 构建QQ小游戏
  • ArcGIS笔记3_如何编辑、修改和导出散点数据
  • Computer Graphics From Scratch - Chapter 8
  • 金三银四”不香了?
  • 个人开源PCB开发板列表汇总