zookeeper 安装

单机安装zookeeper

1、下载响应版本的zookeeper

1
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

2、解压安装文件

1
2
tar -xzvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper

3、配置zoo.cfg

1
2
3
4
5
6
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000
dataDir=/opt/server/zookeeper/data
clientPort=2181

tickTime:这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
dataDir:Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求。

集群安装zookeeper

1、下载响应版本的zookeeper

1
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

2、解压安装文件

1
2
tar -xzvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper

3、配置zoo.cfg

1
2
3
4
5
6
7
8
9
10
11
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/server/zookeeper/data
clientPort=2181
server.1=192.168.1.111:2888:3888
server.2=192.168.1.112:2888:3888
server.3=192.168.1.113:2888:3888

其中tickTime,dataDir,clientPort参数与单机模式一致;
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 52000=10 秒。
syncLimit:这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是 2
2000=4 秒。
server.A=B:C:D,其中:
A 是一个数字,表示第几号服务器;
B 该服务器IP地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
D表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

注意:如果是伪集群的配置方式,由于 B 都是一样,所以不同的Zookeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。

4、在dataDir对应的目录下建立名为myid的文件,内容值为A值

1
2
vim /opt/server/zookeeper/data/myid
1

所有参与集群的主机按照上面配置,唯一不同即myid的值,与zoo.cfg中A值对应即可。
注意:这里的A值与之前配置的server.x对应,各个节点对应各自的myid

zookeeper配置JVM

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
vim /opt/server/zookeeper/bin/zkServer.sh 
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 0
fi
fi
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" -server -Xms128m -Xmx256m -Xmn64m -XX:PermSize=65m $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
#-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
#对应修改以上两行,注意这里不能在-cp之前使用注释之类的行,它对前一行一起作为命令执行
if [ $? -eq 0 ]
then
if /bin/echo -n $! > "$ZOOPIDFILE"
then
sleep 1
echo STARTED
else
echo FAILED TO WRITE PID
exit 1
fi
else
echo SERVER DID NOT START
exit 1
fi
;;

启动zookeeper后可使用jmap -heap [pid]命令查看当前进程内存使用情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ps -ef | grep zookeeper
找到对应的[pid]
jmap -heap 8761
Attaching to process ID 8761, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 268435456 (256.0MB)
NewSize = 67108864 (64.0MB)
MaxNewSize = 67108864 (64.0MB)
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 68157440 (65.0MB)
MaxPermSize = 85983232 (82.0MB)
G1HeapRegionSize = 0 (0.0MB)

启动并测试zookeeper

1、启动zookeeper服务

1
2
cd /opt/server/zookeeper/bin
./zkServer.sh start

2、查看zookeeper服务状态

1
./zkServer.sh status

3、停止zookeeper服务

1
./zkServer.sh stop