Zookeeper

环境变量的配置

   1. 将zookeeper-3.4.10.tar.gz上传到/root中
2. 解压
[root@qianfeng01 ~]# tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
3. 更名zookeeper
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv zookeeper-3.4.10 zookeeper
4. 配置环境变量
[root@qianfeng01 local]# vi /etc/profile
.........省略......
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
5. 使当前会话生效
[root@qianfeng01 local]# source /etc/profile
6. 检查如下:
如果只检查环境变量是否配置成功,只需要使用tab键进行补全zk,是否zookeeper的相关脚本提示即可。
注意:第七步,只能是运行zookeeper服务后,才能这样查看。
7. 查看zookeeper的版本号
[root@qianfeng01 local]# echo stat|nc localhost 2181
## 独立模式的安装
1 把zoo_sample.cfg复制到当前文件下并改名zoo.cfg

```j[root@qianfeng01 local]# cd zookeeper/
[root@qianfeng01 zookeeper]# cd conf/ #进入zookeeper的conf目录
[root@qianfeng01 conf]# cp zoo_sample.cfg zoo.cfg #复制出zoo.cfg文件ava

2 修改zoo.cfg文件

[root@qianfeng01 conf]# vi zoo.cfg
tickTime=2000 # 定义的时间单元(单位毫秒),下面的两个值都是tickTime的倍数。
initLimit=10 #follower连接并同步leader的初始化连接时间。
syncLimit=5 #心跳机制的时间(正常情况下的请求和应答的时间)
dataDir=/usr/local/zookeeper/zkData #修改zookeeper的存储路径
clientPort=2181 #客户端连接服务器的port

集群模式的配置

1 修改zoo.cfg文件

[root@qianfeng01 local]# cd ./zookeeper/conf/
[root@qianfeng01 conf]# cp zoo_sample.cfg zoo.cfg #复制出zoo.cfg文件
[root@qianfeng01 conf]# vi zoo.cfg
tickTime=2000 # 定义的时间单元(单位毫秒),下面的两个值都是tickTime的倍
数。
initLimit=10 #follower连接并同步leader的初始化连接时间。
syncLimit=5 #心跳机制的时间(正常情况下的请求和应答的时间)
dataDir=/usr/local/zookeeper/zkData #修改zookeeper的存储路径,zkData目录一会要
创建出来
clientPort=2181 #客户端连接服务器的port
server.1=qianfeng01:2888:3888 # 添加三个服务器节点
server.2=qianfeng02:2888:3888
server.3=qianfeng03:2888:3888
解析Server.id=ip:port1:port2
id: 服务器的id号,对应zkData/myid文件内的数字
ip: 服务器的ip地址
port1: follower与leader交互的port
port2: 选举期间使用的port

在$ZK_HOME/zkDATA目录下设置server的id号

[root@qianfeng01 conf]# cd ..
[root@qianfeng01 zookeeper]# mkdir zkData
[root@qianfeng01 zookeeper]# cd zkData
[root@qianfeng01 zkData]# echo "1" >> myid

2.4.4 搭建其他两个server节点的环境
1 复制发送zookeeper环境 到其他的节点中

[root@qianfeng01 zkData]# cd /usr/local
[root@qianfeng01 local]# scp -r zookeeper qianfeng02:/usr/local/
[root@qianfeng01 local]# scp -r zookeeper qianfeng03:/usr/local

2 /etc/profile的拷贝,拷贝完成需要source启动一下

[root@qianfeng01 local]# scp /etc/profile qianfeng02:/etc/
[root@qianfeng01 local]# scp /etc/profile qianfeng03:/etc/

3 修改server的id号码,赋予新的编号

[root@qianfeng01 ~]# ssh qianfeng02
[root@qianfeng02 ~]# echo "2" > /usr/local/zookeeper/zkData/myid
[root@qianfeng02 ~]# ssh qianfeng03
[root@qianfeng03 ~]# echo "3" > /usr/local/zookeeper/zkData/myid

启动zookeeper

1 所有节点启动zookeeper服务

[root@qianfeng01 ~]# zkServer.sh start
再查看一下状态
[root@qianfeng01 ~]# zkServer.sh status

2 启动客户端链接本地服务和链接节点服务

zkCli.sh [-server] [ ip:port]
reg:
[root@qianfeng01 ~]# zkCli.sh #启动客户端,连接本地服
务进程
[root@qianfeng01 ~]# zkCli.sh -server qianfeng02:2181 #启动客户端,连接
qianfeng02上的服务进程
输入help,查看所有指令,如下图

启动注意事项

集群启动的一些注意事项:
		1. 每一次启动的日志信息都存储在一个叫

zookeeper.out文件里。
		2. zookeeper.out文件的路径是 使用启动脚本

启动集群时所在目录里
		3. 如果启动失败,需要在zookeeper.out文件

中查看原因
		4. 如果认为自己配置的没有问题,可以尝试一

下再次启动(或者是reboot后启动)

zookeeper的命令

1、脚本
zkServer.sh  {start|start-foreground|stop|restart|status|upgrade|print-cmd}
		
zkServer.sh start:	
启动当前机器节点的zookeeper服务

zkServer.sh status:
查询当前服务的状态

zkServer.sh stop:	
关闭当前机器节点的服务

客户端脚本:zkCli.sh       
语法:  zkCli.sh [-server]  ip|

hostname:port
表示:连接zookeeper集群中的某一个服务项

reg: zkCli.sh  -server qianfeng01:2181  
表示客户端连接qianfeng01服务器

zkCli.sh  -server qianfeng02:2181    
表示客户端连接qianfeng02服务器zkCli.sh  -server 

qianfeng03:2181   
 表示客户端连接qianfeng03服务器
 
 zkCli.sh  回车			
表示客户端连接的服务器是本机上的服务项QuorumPeerMain
1. ls -- 查看某个目录包含的所有文件
2. ls2 -- 查看某个目录包含的所有文件,与ls不同的是它查看到time、version等信息
3. create -- 创建znode,并设置初始内容,例如:
[zk: 47.0.0.1:2181(CONNECTED) 1] create /test "test"
Created /test
4. get -- 获取znode的数据
5. set -- 修改znode内容
6. delete -- 删除znode
7. quit -- 退出客户端
8. help -- 帮助命

错误集锦

1. java.net.NoRouteToHostException: 没有到主机的路由
原因1: 没有配置/etc/hosts
原因2: 没有关闭防火墙

节点类型

1 persistent  持久型 :断开链接后,改节点依旧存在
2 persistent_sequentail  有序持久型 :与持久型不同于它还会对节点名进行顺序编号
3 echemeral 短暂型 : 断开链接后,节点自动删除
4 ephermral_sequential 有序短暂型 :与短暂性不同的是它还会对节点进行顺序排序

Zookeeper的工作原理

1 选举制度

开启选举条件

1 节点半数以上才能选举(*注意:一半以上是开区间),因此Zookeeper适合用在奇数台的机器
2 在配置文件中没有指定的leader和follower ,而是使用算法(Paxos)在内部通过选举机制来选择一个节点为leader和剩下的follower
开机启动的选举过程

在这里插入图片描述

1. 服务器1启动
此时只有它一台服务器启动了,它发出去的投票信息没有任何响应,所以它的选举状态一直是 LOOKING
状态。
2. 服务器2启动
它与最开始启动的服务器 1 进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以 id
值较大
的服务器 2 胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是
3),所以
服务器 12 还是继续保持LOOKING 状态。
3. 服务器3启动
根据前面的理论分析,服务器 3 成为服务器 123 中的老大,而与上面不同的是,此时有三台服
务器选
举了它,所以它成为了这次选举的 leader。
4. 服务器4启动
根据前面的分析,理论上服务器 4 应该是服务器 1234 中最大的,但是由于前面已经有半
数以上的
服务器选举了服务器 3,所以它只能接收当小弟的命
了。
5. 服务器5启动
同 4 一样当小弟

选举制度的四个概念
- serverid:服务器id
比如有三台服务器,编号分别为123。编号越大在选择算法中的权重越大
- zxid:数据id
服务器中存放的最大数据ID。值越大说明数据越新,在选举算法中的权重越大
- Epoch:逻辑时钟
也可以称之为每个服务器参加投票的次数。同一轮投票过程中的逻辑时钟值相同
优先级:Epoch > zxid >serverid
- Server状态:选举状态
• LOOKING:竞选状态
• FOLLOWING:随从状态,同步leader状态,参与选票
• OBSERVING:观察状态,同步leader状态,不参与选票
• LEADER:领导者状态
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值