人,总免不了有心结,限制着自己,难以前行。对于ZooKeeper的理解,以及实践也拖了很久,今天用零散时间学习一下,补点干货。
一、简述
二、配置服务
192.168.158.151 ubuntu-zookeeper-02
192.168.158.152 ubuntu-zookeeper-03
首先,为各个主机配置自己的hostname:
- sudo vim /etc/hostname
sudo vim /etc/hostname
例如,在192.168.158.135机器上配置/etc/hostname为:
然后,为各个主机配置host绑定:
- sudo vim /etc/hosts
sudo vim /etc/hosts
例如:
在各主机上做好host绑定。
PING ubuntu-zookeeper-02 (192.168.158.151) 56(84) bytes of data.
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=1 ttl=64 time=5.64 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=2 ttl=64 time=0.643 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=3 ttl=64 time=0.821 ms
64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=4 ttl=64 time=0.873 ms
^C
--- ubuntu-zookeeper-02 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 0.643/1.994/5.641/2.107 ms
接下来配置zookeeper的配置,让它快速跑起来。
把刚才准备好的hostname配置在这个文件中:
- sudo vim /etc/zookeeper/conf/zoo.cfg
sudo vim /etc/zookeeper/conf/zoo.cfg
配置文件的说明:
-
- tickTime :基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- dataDir :存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
- clientPort :这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
- initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
- syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
- server.A = B:C:D : A表示这个是第几号服务器,B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
接着,使server.1~server.3 与各主机的 /etc/zookeeper/conf/myid 相对应:
- sudo vim /etc/zookeeper/conf/myid
sudo vim /etc/zookeeper/conf/myid
例如,ubuntu-zookeeper-01与server.1相对应,其myid的值就是1
1
如果出现类似错误:
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Error contacting service. It is probably not running.
说明myid文件中与hostname中对应的标示不一致,即ubuntu-zookeeper-01与server.1相对应,myid的值应为1。
现在,我们就可以启动服务了:
- sudo /usr/share/zookeeper/bin/zkServer.sh start
sudo /usr/share/zookeeper/bin/zkServer.sh start
具体可用的命令有:
最后,观察启动日志:
- tail -f /var/log/zookeeper/zookeeper.log
tail -f /var/log/zookeeper/zookeeper.log
究竟哪台机器成为leader:
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-02:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: follower
zlex@ubuntu-zookeeper-03:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Mode: leader
服务都启动了,ubuntu-zookeeper-03成为Leader节点了~
转自:http://snowolf.iteye.com/blog/2156019