文章目录
一、软件版本与系统环境
下载地址:http://mirrors.hust.edu.cn/apache/ZooKeeper/
二、zookeeper 安装
1、xftp上传zookeeper压缩包并解压
cd /opt/soft
ls
tar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz
mv zookeeper-3.4.5-cdh5.14.2 zooker345
2、进入解压好的安装包 在conf文件夹下配置环境
cd zookeeper345/
cd conf
ls
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改存储数据路径、添加zookeeper交换数据端口已经选举端口
dataDir=/opt/soft/zookeeper345/data
server.1=192.168.56.137:2287:3387
添加存储文件夹
[root@hw1 zookeeper345]# mkdir data
3、配置环境变量
[root@hw1 conf]# cd ..
[root@hw1 zookeeper345]# pwd
/opt/soft/zookeeper345
[root@hw1 zookeeper345]# vi /etc/profile
export ZOOKEEPER_HOME=/opt/soft/zookeeper345
export PATH=$PATH:$ZOOKEEPER_HOME/bin
刷新环境变量
source /etc/profile
4、启动zookeeper
[root@hw1 zookeeper345]# cd bin
[root@hw1 bin]# ls
README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkServer.sh
zkCleanup.sh zkCli.sh zkEnv.sh zkServer-initialize.sh
[root@hw1 bin]# zkServer.sh start
三、配置文件中的注意点
1、基本配置
tickTime
心跳基本时间单位,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。
initLimit
tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)
syncLimit
tickTime的个数,这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
dataDir
内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。
clientPort
配置ZK监听客户端连接的端口
在配置文件末尾添加
server.serverid=host:tickpot:electionport
server:固定写法
serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
host:主机名
tickpot:心跳通信端口
electionport:选举端口
2、高级配置
dataLogDir
将事务日志存储在该路径下,比较重要,这个日志存储的设备效率会影响ZK的写吞吐量。
globalOutstandingLimit
(Java system property: zookeeper.globalOutstandingLimit)默认值是1000,限定了所有连接到服务器上但是还没有返回响应的请求个数(所有客户端请求的总数,不是连接总数),这个参数是针对单台服务器而言,设定太大可能会导致内存溢出。
preAllocSize
(Java system property: zookeeper.preAllocSize)默认值64M,以KB为单位,预先分配额定空间用于后续transactionlog 写入,每当剩余空间小于4K时,就会又分配64M,如此循环。如果SNAP做得比较频繁(snapCount比较小的时候),那么请减少这个值。
snapCount
(Java system property: zookeeper.snapCount)默认值100,000,当transaction每达到snapCount/2+rand.nextInt(snapCount/2)时,就做一次SNAPSHOT,默认情况下是50,000~100,000条transactionlog就会做一次,之所以用随机数是为了避免所有服务器可能在同一时间做snapshot.
traceFile (Java system property: requestTraceFile)
maxClientCnxns
默认值是10,一个客户端能够连接到同一个服务器上的最大连接数,根据IP来区分。如果设置为0,表示没有任何限制。设置该值一方面是为了防止DoS攻击。
clientPortAddress
与clientPort匹配,表示某个IP地址,如果服务器有多个网络接口(多个IP地址),如果没有设置这个属性,则clientPort会绑定到所有IP地址上,否则只绑定到该设置的IP地址上。
minSessionTimeout
最小的session time时间,默认值是2个tick time,客户端设置的session time 如果小于这个值,则会被强制协调为这个最小值。
maxSessionTimeout
最大的session time 时间,默认值是20个tick time. ,客户端设置的session time 如果大于这个值,则会被强制协调为这个最大