ZooKeeper 单点切换至集群
Apache ZooKeeper 是 Apache 软件基金会的一个软件项目,为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。
蓝鲸后台产品中,使用到 Zookeeper 的有:
- cmdb 用作服务发现
- gse 用作服务发现和 dataid 数据存储
- 蓝鲸监控 metadata 后台 读取 gse 的 dataid 数据部分
本教程描述了如何在单机部署的蓝鲸社区版中将单点部署的 Zookeeper 切换至集群模式。一个 Zookeeper 集群至少需要三台机器,所以新增节点数必须为偶数,至少增加两台机器。
1. 备份
1 | pcmd -m zk '(mkdir -p /data/backup; cd /var/lib; tar -czf /data/backup/zk-${LAN_IP}-backup-$(date +"%F-%H-%M-%S").tgz zookeeper; ls -l /data/backup/zk*tgz)' |
2. zookeeper 单点切换至集群
- 该标准运维流程适用于:单/多节点副本集集群新增节点
2.1. 使用标准运维流程扩容
- 该标准运维流程适用于:单/多节点副本集集群新增节点
2.1.1. 前置准备
- 机器准备
- 建议新增机器配置不低于 2C4G
实现免密
开始部署前,请确保新增主机跟中控机已实现免密。1
ssh-copy-id <ip>
请先前往节点管理,对新增主机进行 agent 安装
将需要部署产品的标准运维流程模版导入至标准运维
标准运维流程模版 下载
详细步骤:打开标准运维 -> 流程 -> 项目流程 -> 导入YAML -> 点击上传 -> 导入
2.1.2. 执行扩容操作
- 选择流程 “[ce][scale]zookeeper” 流程模版进行新建任务,根据提示填写相关信息。确认填写信息无误后,开始执行任务。
- 点击下一步进入到“参数信息”填写页,按需填入参数

2.2. 手动单步扩容
- 机器准备
- 建议新增机器配置不低于 2C4G
2.2.1. 准备机器:新增并初始化机器
以下初始化步骤以单个机器为例,如有多台扩容机器,请多次重复执行,注意替换机器 IP
以下操作在中控机执行,默认在 /data/install 下执行
配置新机器免密
1
ssh-copy-id <ip>
同步蓝鲸的 yum repo
1
rsync -av /etc/yum.repos.d/Blueking.repo root@<ip>:/etc/yum.repos.d/
在 install.config 中增加扩容的机器和模块定义
1
2
3cat >> install.config <<EOF
<ip> zk(config)
EOF执行蓝鲸的机器初始化操作
1
2
3
4
5
6
7
8
9
10
11# 同步脚本至新机器
./bkcli sync common
# 执行初始化脚本
pcmd -H <ip>'/data/install/bin/init_new_node.sh'
# 确认新机器成功加入了 consul 集群,如果没有输出,可以再次重试
consul members | grep "<ip>:"
# 同步 java8 安装包
./sync.sh zk /data/src/java8.tgz /data/src
2.2.2. 模块扩容
如有多台扩容机器,一下操作请多次重复执行,注意替换机器 IP
以下操作在新增机器上执行,默认在 /data/install 下执行
登陆新增机器
1
ssh <ip>
安装 JAVA
1
/data/install/bin/install_java.sh -p /data/install -f /data/src/java8.tgz
安装 zookeeper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 默认数据目录
DATA_DIR="/var/lib/zookeeper"
# 安装 zookeeper
if ! rpm -ql zookeeper &>/dev/null; then
yum -y install zookeeper
fi
# 创建 data_dir
install -d -m 755 -o zookeeper -g zookeeper "$DATA_DIR"
# 修改JMX监听本地回环地址
if [[ -f /etc/sysconfig/zookeeper ]]; then
sed -i '/^JMXLOCALONLY/s/false/true/' /etc/sysconfig/zookeeper
fi
# 复制现有 zk 的 zookeeper 配置
rsync -av <现有 zk 的 ip>:/etc/zookeeper/zoo.cfg /etc/zookeeper/zoo.cfg
# 删除配置中 server.<n> 定义
sed -i '/^server.*/d' /etc/zookeeper/zoo.cfg
# 更新 zoo.cfg 中的数据目录
sed -i '#^dataDir#s#^dataDir=.*#'"dataDir=$DATA_DIR"'#' /etc/zookeeper/zoo.cfg
chown root.zookeeper -R /etc/zookeeper
chmod 750 /etc/zookeeper/*节点配置更新
以下操作在新增节点上执行,默认在 /data/install 下执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# zookeeper peer port
PEER_PORT=2888
# zookeeper election port
ELECTION_PORT=3888
# update bind address
source /etc/blueking/env/local.env
sed -i '/^clientPortAddress=/s/^clientPortAddress=.*/clientPortAddress='"$LAN_IP"'/' /etc/zookeeper/zoo.cfg
# 编辑 zoo.cfg 文件并写入 server.<n> 定义
## 将输出写入 /etc/zookeeper/zoo.cfg 底部
X=(<现有 zk 的 ip> <新增 zk 的 ip1> <新增 zk 的 ip2>)
for ((i=0; i<${#X[@]}; i++)); do
id=$((i+1))
printf "server.%d=%s:%d:%d\n" "$id" "${X[$i]}" "$PEER_PORT" "$ELECTION_PORT"
done
# 编辑 myid 文件并写入 server id
## 手动获取 id ,执行第一个命令,输出规则为: server.id=host:port:port,人工找出与本机 ip 相关联的 id,并写入 myid 文件中
grep '^server' /etc/zookeeper/zoo.cfg
echo -n "<id>" > "$DATA_DIR"/myid
chown root.zookeeper "$DATA_DIR"/myid
2.2.3. 旧节点配置更新
以下操作在旧节点上执行,默认在 /data/install 下执行
- 配置更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# zookeeper peer port
PEER_PORT=2888
# zookeeper election port
ELECTION_PORT=3888
# update bind address
source /etc/blueking/env/local.env
sed -i '/^clientPortAddress=/s/^clientPortAddress=.*/clientPortAddress='"$LAN_IP"'/' /etc/zookeeper/zoo.cfg
# 编辑 zoo.cfg 文件并写入 server.<n> 定义
## 将输出写入 /etc/zookeeper/zoo.cfg 底部
X=(<现有 zk 的 ip> <新增 zk 的 ip1> <新增 zk 的 ip2>)
for ((i=0; i<${#X[@]}; i++)); do
id=$((i+1))
printf "server.%d=%s:%d:%d\n" "$id" "${X[$i]}" "$PEER_PORT" "$ELECTION_PORT"
done
2.2.4. 重启 zk 服务
先重启现有节点的 zk 服务,加载其他新增节点信息,避免数据丢失
1
2
3
4systemctl restart zookeeper
# 确认服务状态
systemctl status zookeeper逐台启动新增节点的 zk 服务
1
2
3
4systemctl enable --now zookeeper
# 确认服务状态
systemctl status zookeeper
2.2.5. 注册 consul:zk.service.consul
1 | cd /data/install ; source utils.fc; source tools.sh |
3. 同步变更项
- 使用、涉及到 zookeeper 的蓝鲸模块有:gse-server、gse-agent、cmdb、bknodeman(接入点配置)
- 如何同步变更:
- gse-server、cmdb:配置中默认渲染 zk host 为 zk.service.consul,如果没有手动设置过 zk host 无需变更
- bknodeman(接入点配置):打开节点管理 SaaS -> 全局配置 -> 修改接入点配置
- gse-agent:理论上无影响,可以不更新配置。如需更新,请前往节点管理:选中需要更新配置的 agent,选择重载配置
4. 注册蓝鲸业务拓扑
以 “Kafka” 为例:
- 打开“配置平台” > “蓝鲸” 业务 > 选中新增的机器 > 点击“追加至” > “业务模块”

- 选择“公共组件” > “kafka” > “下一步”

- 确认变更内容 > “确认追加”

ZooKeeper 单点切换至集群