目录

zookeeper 集群搭建

三台虚拟机搭建 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 个脚本

  1. 查看 java 虚拟机运行的程序
  2. 利用 rsync 工具同步文件直接同步 java zk 和一些配置到另外两台虚拟机,只需要做小修改,很方便 (centos7.6 没有自带,需要另外下载安装,是只更新有差异的文件, 区别于 scp 全部文件替换)
  3. 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 配置

配置的几个点:

  1. 打开 zk 配置文件,修改 dataDir ,增加集群配置信息
  2. 往 zk 存放数据的文件夹新建 myid 文件,此文件只有一个数字,表示集群号(对应好集群设置里面的信息)
  3. 关闭防火墙
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