Zookeeper
Apache ZooKeeper 是一个开源的分布式协调服务,主要用于分布式应用程序中管理和协调不同节点之间的通信。它为分布式系统提供了高效的同步、配置管理、命名服务、集群管理等功能。ZooKeeper 通过提供一个类似文件系统的层次结构来存储数据,这些数据称为 znode,支持节点的创建、删除、监听和更新操作,保证了系统的一致性和可靠性。
ZooKeeper 采用了 高可用 和 一致性 的设计,可以通过多个服务器组成集群进行容错。它广泛应用于分布式系统中的服务发现、配置管理、分布式锁、队列管理等场景。
文档使用以下1台服务器,具体服务分配见描述的进程
| IP地址 | 主机名 | 描述 |
|---|---|---|
| 192.168.1.131 | bigdata01 | Zookeeper节点 |
基础配置
下载软件包
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz1
解压软件包
tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz -C /usr/local/software/
ln -s /usr/local/software/apache-zookeeper-3.9.3-bin /usr/local/software/zookeeper1
2
2
配置环境变量
cat >> ~/.bash_profile <<"EOF"
## ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/usr/local/software/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
EOF
source ~/.bash_profile1
2
3
4
5
6
2
3
4
5
6
集群配置
配置zookeeper ID
创建目录
mkdir -p /data/service/zookeeper/{data,logs}1
配置zkID
echo 1 > /data/service/zookeeper/data/myid1
配置zoo.cfg
参考官方文档
cat > $ZOOKEEPER_HOME/conf/zoo.cfg <<EOF
clientPort=2181
clientPortAddress=0.0.0.0
server.1=bigdata01:2888:3888
admin.enableServer=false
admin.serverAddress=0.0.0.0
admin.serverPort=8181
admin.commandURL=/commands
maxClientCnxns=1024
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
snapCount=100000
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/service/zookeeper/data
dataLogDir=/data/service/zookeeper/logs
EOF1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
配置JVM参数
cat > $ZOOKEEPER_HOME/conf/java.env <<"EOF"
export JAVA_HOME=/usr/local/software/jdk8
export ZK_SERVER_HEAP=2048
export JVMFLAGS="-Dzookeeper.electionPortBindRetry=0"
EOF1
2
3
4
5
2
3
4
5
启动集群
启动zookeeper
AdminServer: http://bigdata01:8181/commands
Client Address:bigdata01:2181
存在一个QuorumPeerMain进程
zkServer.sh start1
查看zookeeper
$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/software/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone1
2
3
4
5
2
3
4
5
关闭zookeeper
zkServer.sh stop1
设置服务自启
编辑配置文件
sudo tee /etc/systemd/system/zookeeper.service <<"EOF"
[Unit]
Description=Apache ZooKeeper
Documentation=https://zookeeper.apache.org
After=network.target
[Service]
Type=simple
WorkingDirectory=/usr/local/software/zookeeper
ExecStart=/usr/local/software/zookeeper/bin/zkServer.sh start-foreground
ExecStop=/usr/local/software/zookeeper/bin/zkServer.sh stop
Restart=on-failure
RestartSec=10
TimeoutStartSec=90
TimeoutStopSec=120
StartLimitIntervalSec=600
StartLimitBurst=3
KillMode=control-group
KillSignal=SIGTERM
SuccessExitStatus=143
User=admin
Group=ateng
[Install]
WantedBy=multi-user.target
EOF1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
启动服务
sudo systemctl daemon-reload
sudo systemctl enable zookeeper.service
sudo systemctl start zookeeper.service
sudo systemctl status zookeeper.service1
2
3
4
2
3
4
使用集群
客户端连接集群
zkCli.sh -server bigdata01:21811
创建znode
[zk: bigdata01:2181(CONNECTED) 0] create /ateng "my name is ateng"
Created /ateng
[zk: bigdata01:2181(CONNECTED) 1] ls /
[ateng, zookeeper]
[zk: bigdata01:2181(CONNECTED) 2] quit1
2
3
4
5
2
3
4
5