Bootstrap

【星海随笔】分布式管理Zookeeper

高可用集群

地址:https://archive.apache.org/dist/zookeeper

TPS既每秒系统吞吐量
QPS即每秒查询率

Zookeeper的选举机制

确保所有节点对外表现为一个统一的服务。
选举机制分为两个阶段:Leader选举和投票确认

Zookeeper 的选举机制确保集群中的所有节点对外表现为一个统一的服务。选举机制分为两个阶段:Leader 选举和投票确认。

  1. 服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上票),选举无法完成,服务器1状态保持为LOOKING;
  1. 服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0 票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
  1. 服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。 服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
  1. 服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态FOLLOWING;
  1. 服务器5启动,同4一样当小弟。但是如果sever3没有选举的时候(不是leader的时候),server4就进来选举,那结果就不一样了(突发状态)

安装篇

tar  -xzvf  apache-zookeeper-x.x.x-bin.tar.gz  -C  /export/servers/
cd  /export/servers/ 切换到/export/servers/ 目录

配置
mv  ./apache-zookeeper-x.x.x-bin/  /usr/zookeeper

配置环境变量: vim /etc/profile
export ZK_HOME=/usr/zookeeper
export JAVA_HOME=/path_to_your/java/jdkx.x.x_xxx/
export PATH=$JAVA_HOME/bin:$ZK_HOME/bin:$PATH

cp  /export/servers/conf/zoo_sample.cfg  /export/servers/conf/zoo.cfg
tickTime=2000  ##Client-Server通信心跳时间,单位是毫秒
initLimit=10   ##集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
syncLimit=5    ##集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数
clientPort=2181   ## 监听端口
maxClientCnxns=100  ## 最大连接数
dataDir=/export/servers/zookeeper-x.x.x/data ## 数据目录
dataLogDir=/export/servers/zookeeper-x.x.x/log  ## 日志目录
# 添加如下内容
server.1=<IP1>:2881:3881  ## zk节点1
server.2=<IP1>:2881:3881  ## zk节点2
server.3=<IP3>:2881:3881  ## zk节点3
在/export/servers/zookeeper-x.x.x 下创建两个文件夹,分别是data和log
然后分别在zk节点,/export/servers/zookeeper-x.x.x/data目录下,创建文本myid,内容分别是1、2、3序号
IP1  写入1
IP2  写入2
IP3  写入3
对分节点去分发
scp -r /export/servers/zookper-x.x.x  hadoop02:$PWD
scp -r /export/servers/zookper-x.x.x  hadoop03:$PWD
启动之前,jdk7以上的版本一定要安装合适,然后在环境变量里配置ZK_HOME
zookeeper bin目录下的脚本

执行 zkServer.sh  start  启动
执行 zkServer.sh  status 查看各个zk节点的状态

jps #查看是否启动了zk
zkServer.sh stop 是停掉zk节点服务
启动zk之后,在任意一台服务上,运行:zkCli.sh进入zk的命令行模式

zk创建的节点叫znode,znode四种节点类型:持久节点、持久序列节点、暂时节点、暂时序列节点。

create   -e /app   111  创建一个暂时的znode节点
create   -s /app/test1  222  创建一个持久的,带有序列号的znode节点
get  /app/test  得到创建的节点中的数据
执行ls  /可以看到根节点下面所有子节点
ls /app/test watch  监听这个节点下的变化,我在另一个服务器下也打开了zk的命令行,

;