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;
相关文章:
Docker 搭建KingbaseES主备流复制
author: aming email: jikcheng163.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技术入门与实战…...
java易错题锦集四
effective java 不要再构造方法中启动任何线程 g new GameServer(); g.start();构造器无返回值,但是不能void修饰 字符串 String是包装类型吗?答案: 不是 对应的基本类型和包装类如下表: 基本数据类型 包装类 byte Byte bool…...
每天10个前端小知识 【Day 17】
前端面试基础知识题 1.使用原生js实现以下效果:点击容器内的图标,图标边框变成border:1px solid red,点击空白处重置 const box document.getElementById(box); function isIcon(target) { return target.className.includes(icon); } b…...
Python语言零基础入门教程(二十三)
16、Python os.fpathconf() 方法 概述 os.fpathconf() 方法用于返回一个打开的文件的系统配置信息。 Unix上可用。 语法 fpathconf()方法语法格式如下: os.fpathconf(fd, name)参数 fd – 打开的文件的描述符。 name – 可选,和buffersize参数和Pyt…...
[ansible系列]ansible使用扩展
目录 一. 本地执行 二. 任务委托 三. 任务暂停 四. 滚动执行 五. 只执行一次 六. 设置环境变量 七. 交互提示 一. 本地执行 我们知道ansible的是操作被控端的,所有执行的动作都是在被控端上完成的,当然在某些特定的时候我们想要有些tas…...
Java工具类(时间格式转换)
import java.util.Date; import java.text.DateFormat; /** * 格式化时间类 * DateFormat.FULL 0 * DateFormat.DEFAULT 2 * DateFormat.LONG 1 * DateFormat.MEDIUM 2 * DateFormat.SHORT 3 * author Michael * version 1.0, 2007/03/09 */ public c…...
数据库(第五次作业)
1.1 Redis概述 1.1.1 什么是Redis 2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便开始对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据…...
代码随想录【Day16】| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
110. 平衡二叉树 题目链接 题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…...
套娃式工具!用 AI 识别 AI ?#AI classifier
2022年以来,市面上就出现了不少 AI 生成文本的工具,尤其是 OpenAI 推出的 ChatGPT ,不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动…...
CURL error 60: SSL certificate problem: certificate has expired
项目使用guzzleHttp做的一个接口,报错:certificate has expired 因为在linux centos环境与window环境有所不同,在此记录一下解决过程。 目录 报错提示 原因 解决方式 1.去掉guzzlehttp的验证 2.更新CA证书 总结 报错提示 cURL error 60…...
接口自动化:requests
引言:目前软件测试对测试人员的能力要求 业务测试能力:占比5-6成接口、自动化、性能测试能力:占比4-5成流程规范:1成(需要综合型的测试人才):业务能力、代码能力、开发思维(封装&…...
极简TypeScript教程--数据类型
TypeScript最大的特点就是有类型检测,格式为let/const 标识符: 数据类型 赋值;例子:let msg: string Hello World这样msg这个变量就有了字符串类型,如果再给他赋值为数字类型,就会在编译期报错。变量的类型推导在开发中,有时候为了方便起见…...
JAVA开发测试(jmeter如何测试性能与估算)
对C的业务网站或应用,进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具: Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能,是Apache组织开发的…...
【新解法】华为OD机试 - 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供 题目 已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。 输入 输…...
Python3 File(文件) 方法
Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象。 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对…...
APP渗透抓包
APP渗透抓包1.APP渗透测试原理2.安装安卓模拟器抓包2.1.安装模拟器2.2.设置代理下载证书2.2.1.burp suite设置代理2.2.2.浏览器设置代理2.2.3.下载证书2.3.模拟器安装证书2.3.1.移动证书2.3.2.证书设置2.4.设置代理2.4.1.设置burp suite代理2.4.2.夜神模拟器代理2.5.抓包测试2.…...
力扣(LeetCode)414. 第三大的数(2023.02.16)
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出:2…...
Spring底层
一、什么是Spring?谈谈你对IOC和AOP的理解。Spring: 是一个企业级java应用框架,他的作用主要是 简化软件的开发以及配置过程,简化项目部署环境。Spring的有点:1、Spring低侵入设计,对业务代码的污染非常低。…...
Cache-Control 常见字段
Cache-Control 常见字段 参考:https://blog.csdn.net/qq_41996454/article/details/108644436 Cache-Control 可以在请求头或者响应头中设置,并且可以组合使用多种指令 no-cache 和 no-store 用作控制缓存,被服务器通过响应头 Cache-Contro…...
Flink Checkpoint 中的通用增量Checkpoint
文章目录知识点状态Flink容错恢复周期性的 Checkpoint错误检测 Failure Detected重新调度 Re-scheduling状态恢复 State Recovery通用增量Checkpoint知识点 状态 算子需要记录之前数据处理的中间结果,把中间结果暂时缓存在算子的内部,这就是算子的状态…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
