Zookeeper集群部署

Zookeeper是一个开源的分布式协调服务,由知名互联网公司Yahoo创建,它是Chubby的开源实现;换句话讲,Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于它实现数据的发布/订阅、负载均衡、名称服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列。


1.部署zookeeper集群

三个ZooKeeper服务器是整体的最小建议大小。

1.1集群节点规划

主机名 IP 地址 角色
zookeeper01 192.168.92.10 zookeeper节点1
zookeeper02 192.168.92.11 zookeeper节点2
zookeeper03 192.168.92.12 zookeeper节点3

1.2配置主机名

hostnamectl set-hostname zookeeper01
hostnamectl set-hostname zookeeper02
hostnamectl set-hostname zookeeper03

1.3配置hosts解析

cat > /etc/hosts <<EOF
192.168.92.56 zookeeper01
192.168.92.57 zookeeper02
192.168.92.58 zookeeper03
EOF

1.4安装java依赖

yum install -y epel-release
yum install -y java-11-openjdk-devel

1.5创建相关目录

mkdir -p /opt/zookeeper/{data,logs}

1.6安装zookeeper

wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz -P /tmp

tar -zxvf /tmp/apache-zookeeper-*-bin.tar.gz -C /opt/zookeeper --strip=1

1.7配置环境变量

cat > /etc/profile.d/zookeeper.sh <<'EOF'
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
EOF

source /etc/profile

1.8复制zookeeper配置文件

cp /opt/zookeeper/conf/{zoo_sample.cfg,zoo.cfg}

1.9修改zookeeper配置文件

cat > /opt/zookeeper/conf/zoo.cfg <<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
server.1=zookeeper01:2888:3888
server.2=zookeeper02:2888:3888
server.3=zookeeper03:2888:3888
EOF

创建myid文件id在整体中必须是唯一的,并且应该具有1到255之间的值,主配置文件中的server id 要和其当前主节点中的myid保持一致。

tee > myid<<EOF
1
2
3
EOF

1.10创建zookeeper用户

useradd -r -s /bin/false zookeeper
chown -R zookeeper: /opt/zookeeper

1.11systemd管理zookeeper服务

cat > /usr/lib/systemd/system/zookeeper.service << EOF
[Unit]
Description=Zookeeper Service

[Service]
Type=simple
WorkingDirectory=/opt/zookeeper/
PIDFile=/opt/zookeeper/data/zookeeper_server.pid
SyslogIdentifier=zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
Restart=always
TimeoutSec=20
SuccessExitStatus=130 143
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

启动zookeeper服务并配置为开机启动

systemctl enable --now zookeeper

查看zookeeper服务运行状态
systemctl status zookeeper

查看zookeeper主备状态
zkServer.sh status

2.testing

在集群任意一个节点使用zkCli.sh接当前节点的2181端口连接以后会有一个zk的控制台:

zkCli.sh -server zookeeper01:2181
zkCli.sh -server zookeeper01:2181,zookeeper02:2181,zookeeper03:2181

查看命令帮助
[zk: zookeeper01:2181(CONNECTED) 0] ?

查看集群成员配置信息

[zk: zookeeper01:2181(CONNECTED) 16] config
server.1=zookeeper01:2888:3888:participant
server.2=zookeeper02:2888:3888:participant
server.3=zookeeper03:2888:3888:participant
version=0

3.docker部署zookeeper集群

节点规划

节点命令 ip地址 zookeeper home
zookeeper01 192.168.92.80 /data/zookeeper
zookeeper02 192.168.92.81 /data/zookeeper
zookeeper03 192.168.92.82 /data/zookeeper

配置主机名

hostnamectl set-hostname zookeeper01
hostnamectl set-hostname zookeeper02
hostnamectl set-hostname zookeeper03

配置主机名解析

cat > /etc/hosts <<EOF
192.168.92.80 zookeeper01
192.168.92.81 zookeeper02
192.168.92.82 zookeeper03
EOF

部署集群,3个节点分别执行以下命令,三台服务器的ZOO_MY_ID不一样,分别为1、2、3,其他配置参数相同:

docker run -d --name zookeeper \
    --restart always \    --net=host \
    -v /data/zookeeper/data:/data \
    -v /data/zookeeper/datalog:/datalog \
    -v /data/zookeeper/logs:/logs \
    -e TZ=Asia/Shanghai \
    -e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \
    -e ZOO_MY_ID=1 \
    -e ZOO_SERVERS="server.1=zookeeper01:2888:3888;2181 server.2=zookeeper02:2888:3888;2181 server.3=zookeeper03:2888:3888;2181" \
    zookeeper:3.7.0