ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。
一个 ZooKeeper 集群通常由一组机器组成,一般 3 台以上就可以组成一个可用的 ZooKeeper 集群了。
组成 ZooKeeper 集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。
重要的一点是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
ZooKeeper 的客户端程序会选择和集群中的任意一台服务器创建一个 TCP 连接,而且一旦客户端和服务器断开连接,客户端就会自动连接到集群中的其他服务器。
集群节点:
server.1=10.4.4.151 Zookeeper节点标识文件myid值为1
server.2=10.4.4.152 Zookeeper节点标识文件myid值为2
server.3=10.4.4.153 Zookeeper节点标识文件myid值为3
一. 准备 Java 运行环境
1、下载安装jdk
$ sudo useradd -g users -u 200 user_00
$ sudo mkdir /usr/local/services/src -p
$ sudo chown user_00.users /usr/local/services -R
$ sudo su - user_00
$ cd /usr/local/services/src
$ wget http://10.40.6.64/src/jdk-8u91-linux-x64.tar.gz
$ tar xvf jdk-8u91-linux-x64.tar.gz -C ../
2、配置 JAVA_HOME环境变量
$ cat /etc/profile.d/java.sh
export JAVA_HOME="/usr/local/services/jdk1.8.0_91"
export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export CLASSPATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export PATH="$JAVA_HOME/bin:$PATH"
$ source /etc/profile
$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
二. ZooKeeper 包下载、安装及配置
1、下载安装
$ cd /usr/local/services/src
$ wget https://apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
$ tar xvf zookeeper-3.4.13.tar.gz -C ../
2、配置
(1)、创建相关目录
$ mkdir /data/zookeeper/sa/data -p
$ mkdir /data/zookeeper/sa/datalog -p
$ chown user_00.users /data/zookeeper/ -R
$ chown user_00.users /data/zookeeper/ -R
(2)、zoo.cfg 文件是zookeeper配置文件 在conf目录里。
$ cat zoo.cfg
tickTime=2000 #Zookeeper最小时间单元,单位毫秒(ms),默认值为3000
initLimit=10 #Leader服务器等待Follower启动并完成数据同步的时间,默认值10,表示tickTime的10倍
syncLimit=5 #Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,表示tickTime的5倍
dataDir=/data/zookeeper/sa/data #Zookeeper服务器存储快照文件的目录,必须配置
dataLogDir=/data/zookeeper/sa/datalog #Zookeeper事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
clientPort=2181 #服务器对外服务端口,一般设置为2181
server.1=10.4.4.151:2888:3888
server.2=10.4.4.152:2888:3888
server.3=10.4.4.153:2888:3888
集群模式的配置: server.id=host:port1:port2 。
其中,id 被称为 Server ID,用来标识该机器在集群中的机器序号(在每台机器的 dataDir 目录下创建 myid 文件,文件内容即为该机器对应的 Server ID 数字)。host 为机器 IP,port1 用于指定 Follower 服务器与 Leader 服务器进行通信和数据同步的端口,port2 用于进行 Leader 选举过程中的投票通信。注意节点端口防火墙配置。
(3)、myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
#10.4.4.151
$ echo "1" > /data/zookeeper/sa/data/myid
#10.4.4.152
$ echo "2" > /data/zookeeper/sa/data/myid
10.4.4.153
$ echo "3" > /data/zookeeper/sa/data/myid
(4)、log4j.properties文件是zk的日志输出文件 在conf目录里用java写的程序基本上有个共同点日志都用log4j,来进行管理。
$ cat log4j.properties
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE #日志级别
zookeeper.console.threshold=INFO #使用下面的console来打印日志
zookeeper.log.dir=. #日志打印目录,是启动zookeeper的目录(建议设置统一的日志目录路径)
....
(5)、zkEnv.sh和zkServer.sh文件:
zkServer.sh 主的管理程序文件
zkEnv.sh 是主要配置,zookeeper集群启动时配置环境变量的文件
$ cat zookeeper-env.sh
#ZOO_LOG4J_PROP=INFO,ROLLINGFILE
source /etc/profile
export ZOO_LOG_DIR=/usr/local/services/zookeeper-3.4.13/logs
export ZOOPIDFILE="${ZOO_LOG_DIR}"/zookeeper-server.pid
export JVMFLAGS="-Xms3072m -Xmx3072m $JVMFLAGS"
三、配置系统服务启动
$ cat /lib/systemd/system/zookeeper-sa.service
[Unit]
Description=Apache Zookeeper sa
After=network.target
[Service]
Type=forking
User=user_00
Group=users
ExecStart=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh start
ExecStop=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh stop
Restart=always
RestartSec=20
[Install]
WantedBy=multi-user.target
四、查看节点状态
节点1
$ /usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: leader
节点2
/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower
节点3
/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower
zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。
网友评论