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 
	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的时间长度,总的时间长度就是 2
2000=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