第一步:主机名称到IP地址映射配置(非必须的)
1、修改主机名
[root@localhost home]# vim /etc/sysconfig/network
打开配置文件,将里面的HOSTNAME设置为zkserver,即将此云主机的主机名修改为zkserver
NETWORKING=yes
HOSTNAME=zkserver
2 、主机名与ip的映射
[root@localhost home]# vim /etc/hosts
打开配置文件,添加ip与主机名,如下:
172.17.123.134 node1
172.17.123.135 zkserver
172.17.123.136 node2
说明:ZooKeeper采用一种称为Leader election的选举算法。在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果ZooKeeper集群在运行过程中Leader出了问题,系统会采用该算法重新选出一个Leader。因此,各个结点之间要能够保证互相连接,必须配置上述映射。ZooKeeper集群启动的时候,会首先选出一个Leader,在Leader election过程中,某一个满足选举算的结点就能成为Leader。
第二步:下载ZooKeeper,并创建目录
从下面网址下载zookeeper服务端安装文件
[root@localhost home]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
创建目录
[root@localhost local]# mkdir zookeeper
[root@localhost zookeeper]# mkdir serverdata
[root@localhost serverdata]# mkdir data
[root@localhost serverdata]# mkdir logs
以上data和logs目录可以自定义,到时再zoo.cfg配置文件中直接修改相关路径即可
将zookeeper-3.4.8.tar.gz 解压到 zookeeper 目录中
第三步:修改ZooKeeper配置文件
[root@localhost serverdata]# cd ../zookeeper-3.4.8/conf
[root@localhost conf]# cp zoo_sample.cfg ./zoo.cfg
编辑zoo.cfg文件,如果不需要集群,将其中data目录需改成你真实输出目录
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/serverdata/data
clientPort=2181
如果需要集群,zoo.cfg的内容如下:(其中data目录和server地址需改成你真实部署机器的信息)
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/serverdata/data
clientPort=2181
server.1=172.17.123.134:2555:3555
server.2=172.17.123.135:2555:3555
server.3=172.17.123.136:2555:3555
或者将以上的ip 换成我们第一步中的hostname 的名称也行;另外我添加了一行
dataLogDir=/usr/local/zookeeper/serverdata/logs
如果是集群,则上面已经在一台机器zkserver上配置完成ZooKeeper,现在可以将该配置好的安装文件远程拷贝到集群中的各个结点对应的目录下,如下
[root@zkserver]# scp -r /usr/local/zookeeper/ root@node1:/usr/local/
[root@zkserver]# scp -r /usr/local/zookeeper/ root@node2:/usr/local/
说明:/usr/local/zookeeper/表示zkserver上需要拷贝的文件,/usr/local/表示zkserver上存放文件的地方;如果是单机,此时不需要拷贝文件;
第四步:设置myid
在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如:
[root@node1]# echo "1" > /usr/local/zookeeper/serverdata/data/myid
[root@zkserver]# echo "2" > /usr/local/zookeeper/serverdata/data/myid
[root@node4]# echo "3" > /usr/local/zookeeper/serverdata/data/myid
第五步:启动(集群)、停止(集群)
单机启动如下:
[root@localhost zookeeper-3.4.8]# ./bin/zkServer.sh start
[root@localhost zookeeper-3.4.8]# ./bin/zkServer.sh stop
如果是多台服务器的集群,则也只需每个服务器启动后自动执行集群了。
以下配置开机启动:
1、用cd 命令切换到/etc/rc.d/init.d/目录下,接着用touch zookeeper创建一个文件
然后为这个文件添加可执行权限
chmod +x zookeeper
接着用vim zookeeper来编辑这个文件
接着在zookeeper里面输入如下内容
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
case $1 in
start) su root /usr/local/zookeeper/zookeeper-3.4.8/bin/zkServer.sh start;;
stop) su root /usr/local/zookeeper/zookeeper-3.4.8/bin/zkServer.sh stop;;
status) su root /usr/local/zookeeper/zookeeper-3.4.8/bin/zkServer.sh status;;
restart) su root /usr/local/zookeeper/zookeeper-3.4.8/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
保存退出,这个时候我们就可以用service zookeeper start/stop来启动停止zookeeper服务了
说明:
zookeeper脚步中一定需要有至少两行以上的注释,其中一行是
chkconfig: 2345 20 90
其中,2345表示系统运行级别是2,3,4或者5时都启动此服务,20是启动的优先级,90是关闭的优先级,值越小越优先。如果启动优先级配置的数太小(如0)时,则有可能启动不成功,因为此时可能其依赖的网络服务还没有启动,从而导致自启动失败。
最后,使用chkconfig --add zookeeper命令吧zookeeper添加到开机启动里面
添加完成之后接这个使用chkconfig --list 来看看我们添加的zookeeper是否在里面