我使用的CentOS 7阿里云服务器,ZK依赖JDK,需要先安装jdk并配置jdk环境变量。
1、安装wget:
yum –y install wget
2、下载Zookeeper(http://mirror.bit.edu.cn/apache/zookeeper上面查看版本):
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
3、解压:
tar -zxvf zookeeper-3.4.11.tar.gz
4、建议将解压后的文件夹移动到/usr/local或/usr/share/或/usr/opt目录下:
mv ./zookeeper-3.4.11 /usr/local
5、单机环境配置:
5.1 切换到zookeeper的配置文件目录conf:
cd /usr/local/zookeeper-3.4.11/conf
5.2 复制zoo_sample.cfg文件并重命名为zoo.cfg:
cp zoo_sample.cfg zoo.cfg
5.3 根据需要修改zoo.conf配置项:
vi zoo.conf
参数解释:
tickTime:Zookeeper的时间单元。Zookeeper中所有时间都是以这个时间单元的整数倍去配置的。例如,session的最小超时时间是2*tickTime。(单位:毫秒)
initLimit:Observer和Follower启动时,从Leader同步最新数据时,Leader允许initLimit * tickTime的时间内完成。如果同步的数据量很大,可以相应的把这个值设置的大一些。
syncLimit:表示Follower和Observer与Leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
dataDir:用于存放内存数据快照的文件夹,同时用于集群的myid文件也存在这个文件夹里。
clientPort:服务的监听端口。
5.4 切换到bin目录
cd ../bin
5.5 执行启动、查看状态、停止、查看进程等操作:
启动、查看状态、停止的命令 ./zkServer.sh start或status或stop ../conf/zoo.cfg
查看进程的命令 jps
可以看到进程名为QuorumPeerMain,单机模式Mode:standalone。
6、伪分布式配置(以3个节点为例):
6.1 切换到zookeeper的配置文件目录conf:
cd /usr/local/zookeeper-3.4.11/conf
6.2 将zoo_sample.cfg文件复制3份并分别重命名为zoo1.cfg、zoo2.cfg、zoo3.cfg:
cp zoo_sample.cfg zoo1.cfg(zoo2.cfg、zoo3.cfg)
6.3 根据需要修改zoo1.cfg~zoo3.cfg配置项:
vi zoo1.cfg(zoo2.cfg、zoo3.cfg)
如图,分别将zoo1.cfg、zoo2.cfg、zoo3.cfg的dataDir设置为/tmp/zookeeper/zk1、/tmp/zookeeper/zk2、/tmp/zookeeper/zk3,clientPort设置为2181、2182、2183;3份配置文件都有相同的配置:server.1、server.2和server.3,其中的1~3代表3个zk节点的myid(集群中myid必须存在且唯一),
izwz966dst6erg8u5v1030z:2888:3888、izwz966dst6erg8u5v1030z:2889:3889、izwz966dst6erg8u5v1030z:2890:3890其中的izwz966dst6erg8u5v1030z代表3个节点所在主机的hostname(可以是Hostname或IP),2888/2889/2990是3个节点的同步端口(用于节点之间数据同步),3888/3889/3890是3个节点的选举端口(zk启动后,产生master选举过程,以及leader宕机之后重新选举leader都通过该端口)。
注:可通过hostname(centos7也可用hostnamectl)命令查看主机名,通过命令hostnamectl set-hostname 新主机名,或修改/etc/hostname文件都可以达到永久修改主机名的目的。
6.4 如6.3提到server.1~server.3其中的1、2、3代表3个节点必须存在且唯一的myid(myid是一个文件且存在dataDir目录下):
6.4.1 在/tmp目录下创建zookeeper:
mkdir zookeeper
6.4.2 切换到zookeeper目录下并创建zk1~zk3:
mkdir zk1(zk2、zk3)
6.4.3 创建3个节点的myid文件并分别设置为1、2、3:
echo 1 >> /tmp/zookeeper/zk1/myid
echo 2 >> /tmp/zookeeper/zk2/myid
echo 3 >> /tmp/zookeeper/zk3/myid
注:echo 值 >> 文件,使用重定向符输出到一个文件,可通过cat命令查看3个文件的值;
6.5 切换到/usr/local/zookeeper-3.4.11/bin目录,分别启动3个节点、查看状态、停止节点、查看检查数量:
如图可知,启动zoo1,查看状态为Error contacting service.It is probably not running.启动zoo2以后查看zoo2的状态Mode:leader,zoo1的状态Mode:follower,启动zoo3的状态也是Mode:follower,通过jps查看进程数目正确。
对不同观点节点启动/停止,查看状态,可以知道,当启动3个节点以后,将leader停止,另外2个节点会重新选举leader,停止2个节点,最后一个节点状态是Error contacting service.It is probably not running.直到再启动一个节点,又会选择一个leader,一个follower。
一个集群中有N个节点,必须保证有N/2+1个节点正常,集群才能正常工作。3个节点的集群正常工作需要3/2+1=2个节点正常;4个节点的集群正常工作需要4/2+1=3个节点正常,5个节点的集群正常工作需要5/2+1=3个节点正常,而2个节点的集群正常工作需要2/2+1=2个节点正常,即5个节点的集群容许2个节点挂掉,3和4个节点的集群容许1个节点挂掉,而2个节点的集群允许任何节点挂掉;
推荐集群节点总数为基数,节省资源。
7、真分布式配置(以3个节点为例)
在3个节点上分别按单节点的方式部署好,然后在3个节点的zoo.cfg文件中配置server.1和server.2和server.3和各自的myid,在3个节点上分别启动即可。
8、为了方便在任何路径下使用zk的命令,可配置zk的环境变量:
vi /etc/profile
添加ZOOKEEPER_HOME和$ZOOKEEPER_HOME/bin
修改完成以后刷新配置文件:
source profile
以上是zk的安装和3种配置方式,已经基本的启动、停止、查看状态等命令:
■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境;
■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)
zoo.cfg的更多配置项请参考:https://blog.csdn.net/qianshangding0708/article/details/50067483
更详细的安装配置说明可参考:https://www.cnblogs.com/wuxl360/p/5817489.html