高可用集群
地址:https://archive.apache.org/dist/zookeeper
TPS既每秒系统吞吐量QPS即每秒查询率
Zookeeper的选举机制
确保所有节点对外表现为一个统一的服务。
选举机制分为两个阶段:Leader选举和投票确认
Zookeeper 的选举机制确保集群中的所有节点对外表现为一个统一的服务。选举机制分为两个阶段:Leader 选举和投票确认。
- 服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上票),选举无法完成,服务器1状态保持为LOOKING;
- 服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0 票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
- 服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。 服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
- 服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态FOLLOWING;
- 服务器5启动,同4一样当小弟。但是如果sever3没有选举的时候(不是leader的时候),server4就进来选举,那结果就不一样了(突发状态)
安装篇
bash
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
bash
在/export/servers/zookeeper-x.x.x 下创建两个文件夹,分别是data和log
bash
然后分别在zk节点,/export/servers/zookeeper-x.x.x/data目录下,创建文本myid,内容分别是1、2、3序号
bash
IP1 写入1
IP2 写入2
IP3 写入3
bash
对分节点去分发
scp -r /export/servers/zookper-x.x.x hadoop02:$PWD
scp -r /export/servers/zookper-x.x.x hadoop03:$PWD
bash
启动之前,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四种节点类型:持久节点、持久序列节点、暂时节点、暂时序列节点。
bash
create -e /app 111 创建一个暂时的znode节点
create -s /app/test1 222 创建一个持久的,带有序列号的znode节点
get /app/test 得到创建的节点中的数据
执行ls /可以看到根节点下面所有子节点
ls /app/test watch 监听这个节点下的变化,我在另一个服务器下也打开了zk的命令行,