Zookeeper简述
Zookeeper是一个开源的分布式应用程序协调服务,用于维护配置信息,命名,提供分布式同步和提供组服务。Zookeeper向使用者提供简单的API用于处理复杂的分布式协调问题。作用详解:
- 名命服务:按名称标识集群中的节点
- 配置管理:加入节点最新或者最近的配置信息
- 集群管理:实时的在集群或者节点状态中加入/离开节点
- 选举算法:选举一个节点作为协调目的的leader
- 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复
- 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据
官方网站:https://zookeeper.apache.org/
镜像地址:http://mirror.bit.edu.cn/apache/zookeeper/
集群的搭建
服务端准备
zookeeper的er简述
Zookeeper是一个开源的分布式应用程序协调服务,用于维护配置信息,命名,提供分布式同步和提供组服务。Zookeeper向使用者提供简单的API用于处理复杂的分布式协调问题。作用详解:
- 名命服务:按名称标识集群中的节点
- 配置管理:加入节点最新或者最近的配置信息
- 集群管理:实时的在集群或者节点状态中加入/离开节点
- 选举算法:选举一个节点作为协调目的的leader
- 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复
- 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据
官方网站:https://zookeeper.apache.org/
镜像地址:http://mirror.bit.edu.cn/apache/zookeeper/
集群的搭建
环境准备
1.机器数量
zookeeper的服务器应设置为奇数个这是由于zookeeper的容错机制,即zookeeper集群中正常运行的机器的数量大于宕机的数量,那么zookeeper即可以正常的提供服务。所以三台机器可以允许宕机一台,而两台机器宕机一台后无法工作。五台机器可以宕机两台,而六台机器也只能宕机两台,所以没有必要使用六台,故而一般都部署奇数台。
2.java环境
运行zookeeper需要准备java环境,并且设置环境变量。
部署Zookeeper
1.在镜像节点中下载所需版本的压缩包
2.解压到指定的目录下
[zookeeper@VM_0_10_centos ~]$ ll
total 35824
drwxrwxr-x 3 zookeeper zookeeper 4096 Aug 30 09:04 data
drwxrwxr-x 3 zookeeper zookeeper 4096 Aug 27 16:07 logs
drwxr-xr-x 10 zookeeper zookeeper 4096 Mar 27 2018 zookeeper-3.4.12
-rw-r--r-- 1 root root 36667596 Aug 20 09:03 zookeeper-3.4.12.tar.gz
3.修改配置文件
在conf目录下原本存在zoo_sample.cfg,应将此配置文件重命名为zoo.conf,并修改其中相应的配置项:
Zookeeper官网的doc文件中给出了配置文件的各项的解释与意义
https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_minimumConfiguration
最低的集群配置可以如下所示
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
dataDir=/app/zookeeper/data
dataLogDir=/app/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
server.1=0.0.0.0:2888:3888
server.2=*.*.*.*:2888:3888
server.3=*.*.*.*:2888:3888
tickTime:
Zookeeper的时间单元。Zookeeper中所有时间都是以这个(2000)时间单元的整数倍去配置的。例如,session的最小超时时间是2tickTime,而session的最大超时时间是20被的tickTime,在3.3.0版本后,服务端的配置引入了minSessionTimeout 和maxSessionTimeout ,这两个参数将限制会话连接的时间,客户端中设置的timeout将上传给zookeeper的服务,而服务端将会比对这个时间与上面两参数的大小,如果在其中间,客户端参数生效,如果超出了上限(maxSessionTimeout)则会以maxSessionTimeout作为会话的timeout,同理低于下限也会以配置中的minSessionTimeout为准。如果在没有设置这两个参数的情况下,就会以[2tickTime,20*tickTime]为上下界限。tickTime的默认配置值是2000,如果说tickTime配置项都没有的话,缺省值是3000.在客户端的连接中要着重注意这几个参数(单位:毫秒)
minSessionTimeout : (No Java system property) New in 3.3.0: the minimum session timeout in milliseconds that the server will allow the client to negotiate. Defaults to 2 times the tickTime.
maxSessionTimeout : (No Java system property) New in 3.3.0: the maximum session timeout in milliseconds that the server will allow the client to negotiate. Defaults to 20 times the tickTime.
initLimit:
Observer和Follower启动时,从Leader同步最新数据时,Leader允许initLimit * tickTime的时间内完成。如果同步的数据量很大,可以相应的把这个值设置的大一些。默认值为10
syncLimit:
表示Follower和Observer与Leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
dataDir:
事务日志和数据快照都写在该目录下。同时节点号myid也应该存储在dataDir的目录下
dataLogDir:
用来设置事务日志的路径
clientPort:
zookeeper客户端连接的端口号
server.x:
server.x=[hostname]:nnnnn[:nnnnn],这里x代表的是节点号,应该与myid中的数字表示一致。hostname为服务节点的ip,右边可以配置两个端口号,用于数据和通信同步以及Leader选举中的投票通信。注意,本机的ip应该设置为0.0.0.0.:nnnn:nnnn
4.创建dataDir以及dataLogDir
注意创建的路径及目录名称应该与配置文件中的保持一致
[zookeeper@VM_0_10_centos ~]$ pwd
/app/zookeeper
[zookeeper@VM_0_10_centos ~]$ mkdir data
在data目录下创建myid,与zoo.cfg中配置的server.x的标号保持一致
集群启动
1.启动指令
启动脚本应该在bin目录下
[zookeeper@VM_0_10_centos bin]$ pwd
/app/zookeeper/zookeeper-3.4.12/bin
[zookeeper@VM_0_10_centos bin]$ ll
total 172
-rwxr-xr-x 1 zookeeper zookeeper 232 Mar 27 2018 README.txt
-rwxr-xr-x 1 zookeeper zookeeper 1937 Mar 27 2018 zkCleanup.sh
-rwxr-xr-x 1 zookeeper zookeeper 1056 Mar 27 2018 zkCli.cmd
-rwxr-xr-x 1 zookeeper zookeeper 1534 Mar 27 2018 zkCli.sh
-rwxr-xr-x 1 zookeeper zookeeper 1759 Mar 27 2018 zkEnv.cmd
-rwxr-xr-x 1 zookeeper zookeeper 2696 Mar 27 2018 zkEnv.sh
-rwxr-xr-x 1 zookeeper zookeeper 1089 Mar 27 2018 zkServer.cmd
-rwxr-xr-x 1 zookeeper zookeeper 6773 Mar 27 2018 zkServer.sh
启动服务
[zookeeper@VM_0_10_centos bin]$ ./zkServer.sh start
2.注意事项
最好按照myid有小到大的顺序启动服务节点
3.查看状态
[zookeeper@VM_0_10_centos bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
使用./zkServer.sh status查看启动状态,如果集群启动成功,会出现以上的(leader节点)状态,如果是follwer节点,则是
[app@ecs-s6-medium-2-linux-20190828164230 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
4.错误情况查看
如果查看服务器的启动状态是失败的,需要查看错误的原因
[zookeeper@vultr bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
可以在bin目录下的zookeeper.out文件下查看
-rw-rw-r-- 1 zookeeper zookeeper 23615 Aug 28 16:27 zookeeper.out