zookeeper是一个强一致【不严格】的分布式数据库,由多个节点共同组成一个分布式集群,挂掉任意一个节点,数据库仍然可以正常工作,客户端无感知故障切换。客户端向任意一个节点写入数据,其它节点可以立即看到最新的数据。
布局规划图
环境准备
- JRE (依赖的环境)【 点击进入 】
安装JRE
1 | tar zxvf jre-8u191-linux-x64.tar.gz |
开启端口
默认是2181 我自己设定为2999,2888和3888是机器之间同步端口
1 | firewall-cmd --zone=public --add-port=2999/tcp --permanent |
- ZooKeeper安装包
1 | wget http://mirror.cogentco.com/pub/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz |
安装配置ZooKeeper
基础环境安装完成后,需要配置ZooKeeper
1 | //配置 |
有以下配置选项
- tickTime=2000
最小时间单元长度,默认3000,例如回话的最小超时时间默认2*tickTIme
- initLimit=5
默认:10,定义leader服务在启动过程中等待follower完成数据同步的时间,后续服务器增多需要增大这个值,以保证数据同步顺利完成。
- dataDir=/var/lib/zookeeper/
无默认,必须配置,用于配置ZooKeeper存放快照文件的目录,如果不配置dataLogDir则也存放在这里面。
- clientPort=2999
当前服务对外的端口,集群内服务器都可以配置任意可用端口,不需要保持端口一致!一般是2181, 无默认,必须配置!
- server.1 = server1:2888:3888
用于定义整个集群是由那几台机器构成的,每一行代表一个机器配置格式如下:
server.id = host:localPort:targetPort
创建myid文件标识当前主机的序号,在dataDir中新建
1 | vi /var/lib/zookeeper/myid |
启动ZooKeeper
1 | /opt/zookeeper-3.4.13/bin/zkServer.sh start |
看到上方标识意味启动成功
验证ZooKeeper服务
1 | [root@zookeepermaster bin]# telnet localhost 2999 |
像上方这样的返回意味着已经成功运行ZooKeeper了,其中Mode: follower是当前的身份
- Mode: leader
leader 是节点中选举的主节点整个服务器中就1个
- Mode: follower
follower 是从节点,负责服务客户端
- Mode: standalone
standalone 是单机模式下才会有的
采坑集结
如果telnet验证时返回下面这样的情况
1 | [root@zookeepermaster bin]# telnet 127.0.0.1 2999 |
碰到上面的情况首先应该检查各个服务节点的机器是否端口已经全部打开?,主要原因就是这个节点无法连接其他服务器造成服务无法选举造成了服务出错