单机安装zookeeper
1、下载响应版本的zookeeper
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
2、解压安装文件
tar -xzvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
3、配置zoo.cfg
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
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
2、解压安装文件
tar -xzvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
3、配置zoo.cfg
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的时间长度,总的时间长度就是 22000=4 秒。
server.A=B:C:D,其中:
A 是一个数字,表示第几号服务器;
B 该服务器IP地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
D表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
注意:如果是伪集群的配置方式,由于 B 都是一样,所以不同的Zookeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。
4、在dataDir对应的目录下建立名为myid的文件,内容值为A值
vim /opt/server/zookeeper/data/myid
1
所有参与集群的主机按照上面配置,唯一不同即myid的值,与zoo.cfg中A值对应即可。
注意:这里的A值与之前配置的server.x对应,各个节点对应各自的myid
zookeeper配置JVM
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]命令查看当前进程内存使用情况:
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服务
cd /opt/server/zookeeper/bin
./zkServer.sh start
2、查看zookeeper服务状态
./zkServer.sh status
3、停止zookeeper服务
./zkServer.sh stop