KWDB创作者计划—KWDB多副本集群保姆级部署

📢📢📢📣📣📣
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

文章目录

  • 1.部署概述
  • 2.安装包
  • 3.节点配置
    • 3.1 SSH 免密登录
    • 3.2 时钟同步
  • 4.裸机部署
  • 5.初始化并启动集群
  • 6.配置集群
  • 7.集群的日常运维
    • 7.1 创建用户
    • 7.2 集群启动
    • 7.3 分片

KWDB作为一款分布式数据库,其集群管理涉及架构设计、部署、监控、调优和故障处理等多个方面。以下从关键管理维度进行详细说明,帮助您高效运维 KaiwuDB 集群

1.部署概述

KWDB 支持使用容器或二进制安装包部署以下集群:

image.png

2.安装包

获取系统环境对应的 DEB 或 RPM 安装包,将安装包复制到待安装 KWDB 的目标机器上,然后解压缩安装包:

1.所需资源包下载地址:
https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0

tar -xzvf KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

root@jeames-virtual-machine:/opt# cd kwdb_install/
root@jeames-virtual-machine:/opt/kwdb_install# ll
total 52
drwxr-xr-x 4 root root 4096 3月 31 15:22 ./
drwxr-xr-x 3 root root 4096 4月 11 23:11 …/
-rwxr-xr-x 1 root root 2024 3月 31 15:11 add_user.sh*
-rw-r–r-- 1 root root 3605 3月 31 15:12 .construction_var
-rw-r–r-- 1 root root 465 3月 31 15:11 deploy.cfg
-rwxr-xr-x 1 root root 24410 3月 31 15:11 deploy.sh*
drwxr-xr-x 2 root root 4096 3月 31 15:22 packages/
drwxr-xr-x 2 root root 4096 3月 31 15:11 utils/

2.相关依赖安装
sudo apt update
sudo apt install cmake
sudo snap install go --classic
sudo apt install libprotobuf-dev

在这里插入图片描述

3.节点配置

3.1 SSH 免密登录

登录当前节点,生成公私密钥对,每个节点均操作

ssh-keygen -f ~/.ssh/id_rsa -N “”

参数说明:
-f:指定生成的密钥对文件名。
-N:指定使用密钥时的密码。为了实现非交互式登录,建议将密码设置为空。

image.png

将密钥分发至集群其它节点。

sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2
sudo hostnamectl set-hostname node3

vi /etc/hosts
192.168.3.10 node1
192.168.3.11 node2
192.168.3.12 node3

root@jeames-virtual-machine:~# hostnamectl
Static hostname: node1
Icon name: computer-vm
Chassis: vm
Machine ID: ba13b266fdb04c3c9fc7d06c4e7fa8ea
Boot ID: 793ca8918e984d9f84cf718ca4ce03c8
Virtualization: vmware
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 6.8.0-57-generic
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform

ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node1
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node2
ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no node3

确认是否可以使用非交互式的方法登录集群其它节点
ssh node1
ssh node2
ssh node3

3.2 时钟同步

KWDB 采用中等强度的时钟同步机制来维持数据的一致性。当节点检测到自身的机器时间与集群中至少 50% 的节点的机器时间的误差值超过集群最大允许时间误差值(默认为 500 ms)的 80% 时,该节点会自动停止,从而避免违反数据一致性,带来读写旧数据的风险。每个节点都必须运行 NTP(Network Time Protocol,网络时间协议)或其他时钟同步软件,防止时钟漂移得太远。

启用 NTP 服务
sudo timedatectl set-ntp on
sudo apt update && sudo apt install ntp
timedatectl status

2.重启服务
sudo systemctl restart ntp
sudo ntpq -p

4.裸机部署

登录待部署节点,编辑安装包目录下的 deploy.cfg 配置文件,设置安全模式、管理用户、服务端口等信息,并添加其他节点信息。

cd /opt/kwdb_install
vi deploy.cfg[global]
# Whether to turn on secure mode
secure_mode=tls
# Management KaiwuDB user
management_user=kaiwudb
# KaiwuDB cluster http port
rest_port=8080
# KaiwuDB service port
kaiwudb_port=26257
# KaiwuDB data directory
data_root=/var/lib/kaiwudb
# CPU usage[0-1]
# cpu=1
[local]
# local node configuration
node_addr=192.168.3.10
# section cluster is optional
[cluster]
# remote node addr,split by ','
node_addr=192.168.3.10,192.168.3.11,192.168.3.12
# ssh info
ssh_port=22
ssh_user=root配置参数说明:
global:全局配置
secure_mode:是否开启安全模式,支持以下两种设置:
insecure:使用非安全模式。
tls:(默认选项)开启 TLS 安全模式。开启安全模式后,KWDB 生成 TLS 证书,作为客户端或应用程序连接数据库的凭证。生成的客户端相关证书存放在 /etc/kaiwudb/certs 目录。
management_user:KWDB 的管理用户,默认为 kaiwudb。安装部署后,KWDB 创建相应的管理用户以及和管理用户同名的用户组。
rest_port:KWDB Web 服务端口,默认为 8080。
kaiwudb_port:KWDB 服务端口,默认为 26257。
data_root:数据目录,默认为 /var/lib/kaiwudb。
cpu: 可选参数,用于指定 KWDB 服务占用当前节点服务器 CPU 资源的比例,默认无限制。取值范围为 [0,1],最大精度为小数点后两位。KWDB 支持调整 CPU 资源占用率。更多信息,参见配置集群。注意:如果部署环境为 Ubuntu 18.04 版本,部署集群后,需要将 kaiwudb.service 文件中的 CPUQuota 修改为整型值,例如,将 180.0% 修改为 180%,以确保设置生效。具体操作步骤,参见配置 CPU 资源占用率。
local:本地节点配置
local_node_ip:本地节点对外提供服务的 IP 地址,监听地址为 0.0.0.0,端口为 KWDB 服务端口。
cluster:集群内其他节点的配置
cluster_node_ips:远程节点对外提供服务的 IP 地址。各节点的 IP 地址使用逗号(,)分割,远程节点数应不少于 2 个。
ssh_port:远程节点的 SSH 服务端口。各节点的 SSH 服务端口必须相同。
ssh_user:远程节点的 SSH 登录用户。各节点的 SSH 登录用户必须相同为 deploy.sh 脚本增加运行权限
chmod +x ./deploy.sh执行安装命令多副本集群
./deploy.sh install --multi-replica
多副本架构:每个数据分片配置 3 副本(1 Leader + 2 Followers),通过 Raft/Paxos 协议保证数据一致性单副本集群
./deploy.sh install --single-replica输入密码:beijing
root@node1:/opt/kwdb_install# ./deploy.sh install --multi-replica[WARN] 2025-04-12 00:07:55 The number of CPU cores does not meet the requirement. KaiwuDB may running failed.             
The authenticity of host '192.168.3.12 (192.168.3.12)' can't be established.  ] 20%
ED25519 key fingerprint is SHA256:edOHleuRe8EgN1wyHQFPQxs5T1Uj9trdIGQgBGsGcTs.
This host key is known by the following other names/addresses:~/.ssh/known_hosts:1: [hashed name]~/.ssh/known_hosts:4: [hashed name]~/.ssh/known_hosts:5: [hashed name]~/.ssh/known_hosts:6: [hashed name]~/.ssh/known_hosts:7: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Please input kaiwudb's password:                                                                                                 [INSTALL COMPLETED]:KaiwuDB has been installed successfully! To start KaiwuDB, please execute the command 'systemctl daemon-reload'.
、根据系统提示重新加载 systemd 守护进程的配置文件
systemctl daemon-reload

image.png

5.初始化并启动集群

集群初始化和启动大约需要 10 秒左右时间。在此期间,如果有节点死亡,可能会导致集群无法触发高可用机制。

./deploy.sh cluster -i

root@node1:/opt/kwdb_install# ./deploy.sh cluster -i
[INIT COMPLETED]:Cluster init successfully.

查看集群节点状态
./deploy.sh cluster -s
./deploy.sh cluster --status

配置 KWDB 开机自启动
配置 KWDB 开机自启动后,如果系统重启,则自动启动 KWDB。
systemctl enable kaiwudb
systemctl status kaiwudb

image.png
image.png
image.png

6.配置集群

部署完 KWDB 集群以后,用户可以按需配置 KWDB 集群。本文介绍如何配置通过二进制安装包部署的 KWDB 集群。
部署完成后,系统会将 KWDB 封装成系统服务,并生成 kaiwudb.service 和 kaiwudb_env 两个文件。用户可以按需配置 KWDB 集群。

kaiwudb_env:配置 KWDB 启动参数
kaiwudb.service:配置 KWDB 的 CPU 资源占用率

启动参数是节点级配置。如需修改整个集群的配置,用户需要登录集群中的每个节点并完成相应的配置。

1.停止 KWDB 服务
systemctl stop kaiwudb
2.进入 /etc/kaiwudb/script 目录,打开 kaiwudb_env 文件。
3.根据需要,配置 KWDB 启动参数。
以下示例将 --cache 启动参数设置为 10000
KAIWUDB_START_ARG=“–cache=10000”
4.保存 kaiwudb_env 文件并重新加载文件。
systemctl daemon-reload
5.重新启动 KWDB 服务
systemctl restart kaiwudb

CPU 资源占用率是节点级配置。如需修改整个集群的配置,用户需要登录集群中的每个节点并完成相应的配置。
1.进入 /etc/systemd/system 目录,打开 kaiwudb.service 文件。
2.根据需要,修改 KWDB 的 CPU 资源占用率。
以下示例将 CPU 资源占用率(CPUQuota)设置为 180%。

CPUQuota=180%

CPUQuota 的计算公式为:CPU 占用率 x 服务器CPU核数 x 100%。例如,假设节点所在服务器的 CPU 核数为 6,计划将 CPU 占用率调整为 0.3, 则对应的 CPUQuota 的值应为 0.3 x 6 x 100% = 180%。

保存 kaiwudb.service 文件并重新加载文件。
systemctl daemon-reload

确认新的 CPU 资源占用率是否生效。

7.集群的日常运维

7.1 创建用户

KWDB 在安装包中提供了 add_user.sh 脚本。在安装并运行 KWDB 后,用户可以运行此脚本为数据库创建用户和密码,并使用创建的用户名和密码来连接、登录数据库。

1.在目标机器上,进入 KWDB 安装包目录。
2.执行 add_user.sh 脚本,根据系统提示创建用户名和密码。
./add_user.sh
Please enter the username:test
Please enter the password:beijing

– 创建角色并限制访问
CREATE ROLE analyst WITH LOGIN PASSWORD ‘secure123’;
GRANT SELECT ON TABLE sales TO analyst;
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM PUBLIC;

7.2 集群启动

systemctl status kaiwudb  # 查看服务状态
systemctl restart kaiwudb  # 滚动重启单个节点(需逐个操作)
systemctl enable kaiwudb  # 设置开机自启sudo apt-get install postgresql-client
root@node1:/opt/kwdb_install# psql -U test -h 127.0.0.1 -p 26257
Password for user test: 
psql (14.17 (Ubuntu 14.17-0ubuntu0.22.04.1), server 9.5.0)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.test=> use defaultdb;
SET
test=> SHOW DATABASES WITH COMMENT;database_name | engine_type | comment 
---------------+-------------+---------defaultdb     | RELATIONAL  | postgres      | RELATIONAL  | system        | RELATIONAL  | test=> show users;username |  options   | member_of 
----------+------------+-----------admin    | CREATEROLE | {}root     | CREATEROLE | {admin}test     |            | {admin}test=> show SERVER_VERSION;server_version 
----------------9.5.0

7.3 分片

KWDB 多副本集群默认采用 3 副本机制。为了确保系统在节点发生故障后仍能够提供服务,集群通过多数投票机制保证数据一致性和可用性,因此至少需要 2 个副本保持可用状态。

正常运行:KWDB 集群启动后,副本和 leaseholder 均匀分布在所有节点上,确保数据的高可用性和平衡性。

image.png

单节点异常:如果单个节点因网络断开、延迟、操作系统故障、磁盘故障等原因导致节点状态变为异常(is_available 和 is_live 均为 false),系统会开始迁移该节点的 leaseholder,迁移期间数据查询和 DML 操作可能受影响,DDL 操作可能会报错,生命周期会顺延至下一执行周期执行。待节点恢复为可用状态后恢复正常。

image.png

单节点故障:节点离线时间达到设定值后,系统会将该节点标记为不可用。如果剩余节点数量仍大于副本数,系统自动补足缺失的副本,确保数据的高可用性、副本补足期间,数据查询不受影响,DML 操作不受影响,DDL 操作可能会报错,副本补足后,DDL 操作恢复正常。

image.png

节点恢复:不可用节点恢复后,系统会将副本和 leaseholder 回迁到该节点,迁移期间数据查询和 DML 操作可能受影响,DDL 操作可能会报错,生命周期会顺延至下一执行周期执行。待节点恢复为可用状态后恢复正常。

image.png

多节点故障:如果两个或更多节点出现故障,由于剩余节点数小于或等于副本数,系统无法补足缺失的副本,可能导致部分数据无法访问,甚至出现集群无法使用的情况。

image.png

节点故障影响:
集群节点多次发生故障后重新加入,可能会导致数据写入缓慢。
集群节点故障或故障节点恢复后的 leaseholder 迁移可能导致读写短暂不可用或卡顿。
可通过重试机制解决因 update tag 失败导致不同节点查询普通标签时的不一致问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

micro ubuntu 安装教程

micro ubuntu 安装教程 官网地址 : https://micro-editor.github.io 以下是在 Ubuntu 系统中安装 micro 编辑器 的详细教程: 方法 1:通过 ​apt​​ 直接安装(推荐) 适用于 Ubuntu 20.04 及以上版本(官方仓库已收录…

Docker 镜像 的常用命令介绍

拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时,拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…

从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)

前言: 在本专栏Base第0章曾介绍一种入门级的微服务项目搭建,尽管后续基于此框架上实现了Nacos、Eureka服务注册发现、配置管理、Feign调用、网关模块、OSS文件存储、JSR参数校验、LogBack日志配置,鉴权模块、定时任务模块等,但由于…

VS Code下开发FPGA——FPGA开发体验提升__下

上一篇:IntelliJ IDEA下开发FPGA-CSDN博客 Type:Quartus 一、安装插件 在应用商店先安装Digtal IDE插件 安装后,把其他相关的Verilog插件禁用,避免可能的冲突。重启后,可能会弹出下面提示 这是插件默认要求的工具链&a…

使用Python从零开始构建端到端文本到图像 Transformer大模型

简介:通过特征向量从文本生成图像 回顾:多模态 Transformer 在使用Python从零实现一个端到端多模态 Transformer大模型中,我们调整了字符级 Transformer 以处理图像(通过 ResNet 特征)和文本提示,用于视觉…

Webpack中的文件指纹:给资源戴上个“名牌”

你是否想过,当你修改代码后,浏览器为什么仍然拿着旧版资源不放?秘密就在于——文件指纹!简单来说,文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”,告诉浏览器:“嘿,我更…

python可变对象与不可变对象

文章目录 Python 中的可变对象与不可变对象不可变对象(Immutable Objects)可变对象(Mutable Objects)重要区别 Python 中的可变对象与不可变对象 在 Python 中,对象可以分为可变对象(mutable)和不可变对象(immutable),这是 Python 中非常重要的概念&…

DeepSeek私有化部署性能怎么样?企业级AI落地实战解析!

1. 私有化部署是什么?为什么企业需要它? 很多公司在考虑用AI时都会问:“DeepSeek私有化部署性能怎么样?能不能在我们自己的服务器上跑?” 私有化部署的意思就是把AI模型装在你自己的机房或者云服务器上,而…

SQL学习--基础语法学习

SQL和excle对比 学习目标 单表查询 项目背景 SQL 练习环境 SQL Online Compiler - Next gen SQL Editor 商品信息表:https://study-zhibo.oss-cn-shanghai.aliyuncs.com/test/%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E8%A1%A8.csv 订单明细表:https://…

【Docker基础-网络】--查阅笔记4

目录 Docker 网络网络类型none 网络host 网络bridge 网络自定义网络 容器间通信IP 通信Docker DNS Serverjoined 容器 容器与外部通信容器访问外部外部访问容器 Docker 网络 学习Docker提供的几种原生网络如何创建自定义网络容器间通信,容器于外界交互 Docker 安装…

GPT模型架构与文本生成技术深度解析

核心发现概述 本文通过系统分析OpenAI的GPT系列模型架构,揭示其基于Transformer解码器的核心设计原理与文本生成机制。研究显示,GPT模型通过自回归机制实现上下文感知的序列生成,其堆叠式解码器结构配合创新的位置编码方案,可有效…

AWTK-MVVM 如何让多个View复用一个Model记录+关于app_conf的踩坑

前言 有这么一个业务,主界面点击应用窗口进入声纳显示界面,声纳显示界面再通过按钮进入菜单界面,菜单界面有很多关于该声纳显示界面的设置项,比如量程,增益,时间显示,亮度,对比度等…

CrystalDiskInfo电脑硬盘监控工具 v9.6.0中文绿色便携版

前言 CrystalDiskInfo是一个不用花钱的硬盘小帮手软件,它可以帮你看看你的电脑硬盘工作得怎么样,健不健康。这个软件能显示硬盘的温度高不高、还有多少地方没用、传输东西快不快等等好多信息。用了它,你就能很容易地知道硬盘现在是什么情况&…

数据分析-数据预处理

数据分析-数据预处理 处理重复值 duplicated( )查找重复值 import pandas as pd apd.DataFrame(data[[A,19],[B,19],[C,20],[A,19],[C,20]],columns[name,age]) print(a) print(--------------------------) aa.duplicated() print(a)只判断全局不判断每个 any() import p…

如何用海伦公式快速判断点在直线的哪一侧

一、海伦公式的定义与推导 1. 海伦公式的定义 海伦公式(Heron’s Formula)是用于计算三角形面积的一种方法,适用于已知三角形三边长度的情况。公式如下: S s ( s − a ) ( s − b ) ( s − c ) S \sqrt{s(s - a)(s - b)(s - c…

python推箱子游戏

,--^----------,--------,-----,-------^--,-------- 作者 yty---------------------------^----------_,-------, _________________________XXXXXX XXXXXX XXXXXX ______(XXXXXXXXXXXX(________(------ 0 [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,…

使用Python建模量子隧穿

引言 量子隧穿是量子力学中的一个非常有趣且令人神往的现象。在经典物理学中,我们通常认为粒子必须克服一个势垒才能通过它。但是,在量子力学中,粒子有时可以“穿越”一个势垒,即使它的能量不足以克服这个势垒。这种现象被称为“量子隧穿”。今天,我们将通过 Python 来建…

Vuex Actions 多参数传递的解决方案及介绍

Vuex Actions 多参数传递的解决方案及介绍 引言 在Vuex状态管理模式中,Actions 扮演着至关重要的角色。它主要用于处理异步操作,并且可以提交 Mutations 来修改全局状态。然而,在实际开发中,我们常常会遇到需要向 Actions 传递多…

设计模式 --- 策略模式

​策略模式(Strategy Pattern)是一种 ​​行为型设计模式​​,用于动态切换算法或策略​​,使得算法可以独立于客户端变化。它通过封装算法策略并使其可互换,提升了系统的灵活性和扩展性,尤其适用于需要多种…

【论文阅读】RMA: Rapid Motor Adaptation for Legged Robots

Paper: https://arxiv.org/abs/2107.04034Project: https://ashish-kmr.github.io/rma-legged-robots/Code: https://github.com/antonilo/rl_locomotion训练环境:Raisim 1.方法 RMA(Rapid Motor Adaptation)算法通过两阶段训练实现四足机器…