三台虚拟机搭建 zookeeper 集群
前言
zookeeper 集群的搭建是 kafka 集群搭建的基础,虽然 kafka2.8 版本开始支持抛弃 zk,但还不稳定
经过尝试,发现 kafka 集群内置的 zookeeper 也能搭建集群,但是内置 zk 少了一些关键配置信息和关键工具,需要对 zookeeper 的配置非常熟悉才能跑好,本文选择从官方下载完整的 zookeeper 搭建集群
准备
准备好三台虚拟机
- VirtualBox 安装好三台主机(centos7.6),配置好静态ip
- 关闭三台虚拟机的防火墙
- 安装好 Java 11 , 配置好环境变量
- 安装好 zookeeper3.6.3
环境变量配置
1
2
3
4
5
|
vi /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/home/wwo/jdk-11.0.12
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
|
主机名字可改也可不改
主机名字不能改成纯数字,不然 kafka 单机启动的时候会出错
hostname set-hostname newname
免密登录
以下操作方便主机操作三台虚拟机
1
2
3
4
5
6
7
|
# 配置好host方便后续操作
su root
vi /etc/hosts
# 文件后面加入以下几行
192.168.56.102 c2
192.168.56.103 c3
192.168.56.106 c6 # 当作主服务器
|
1
2
3
|
cd ~/.ssh
ssh-keygen -t rsa # 回车三下,不要设置密码
ssh-copy-id root@c6
|
后续 ssh root@c6 就能登录 c6 虚拟机,很方便
在 c6 上套娃免密登录,配置好另外两台主机的主机host和免密登录
在 c2 c3 上配置好/etc/hosts,方便后续操作配置
工具脚本
为了方便主机 c6 往 c2 c3 同步信息,写了 3 个脚本
- 查看 java 虚拟机运行的程序
- 利用 rsync 工具同步文件直接同步 java zk 和一些配置到另外两台虚拟机,只需要做小修改,很方便 (centos7.6 没有自带,需要另外下载安装,是只更新有差异的文件, 区别于 scp 全部文件替换)
- zk 集群操作
1
2
3
4
5
6
7
|
# 用来查看所有主机的 java 虚拟机运行的程序
#!/bin/bash
for host in centos102 centos103 centos106
do
echo =============== $host ===============
ssh $host jps
done
|
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
28
29
30
31
32
33
|
# 利用 ssh + rsync 同步几台虚拟机上的文件
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in centos102 centos103 centos106
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
|
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
28
29
30
|
# 利用 ssh 实现zk集群的启动、停止、查看状态操作
#!/bin/bash
case $1 in
"start"){
for i in centos102 centos103 centos106
do
echo ------------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zk-3.6.3/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in centos102 centos103 centos106
do
echo ------------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zk-3.6.3/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in centos102 centos103 centos106
do
echo ------------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zk-3.6.3/bin/zkServer.sh status"
done
}
;;
esac
|
zk 配置
配置的几个点:
- 打开 zk 配置文件,修改 dataDir ,增加集群配置信息
- 往 zk 存放数据的文件夹新建 myid 文件,此文件只有一个数字,表示集群号(对应好集群设置里面的信息)
- 关闭防火墙
1
2
3
4
5
|
# 配置信息,直接放 zk 配置文件结尾
server.6=centos106:2888:3888
server.2=centos102:2888:3888
server.3=centos103:2888:3888
# 因此三台服务器对应的 myid 文件分别里面写 6 2 3
|
1
2
3
4
5
6
|
# 查看防火墙运行状态
sudo firewall-cmd --state
# 关闭
sudo systemctl stop firewalld
# 系统自启时关闭
sudo systemctl disable firewalld
|
1
2
3
4
5
6
7
|
# 进入你的 zk 文件夹
cd /opt/module/zk-3.6.3
cd bin
# 以下操作,已经在上面写了批量脚本,集群批量操作
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh status
|