zookeeper集群

一、简介

1、zookeeper是什么:开源的分布式应用程序协调服务,保证数据在集群减的事务一致性

2、应用场景:集群分布式锁、积分统一命名服务、分布式协调服务

3、角色与特性:
	Leader:可以理解为主节点,负责与所有的follower节点进行内部数据交换、接受所有follower节点的提案请求并且发起提案的投票。(一般进行写操作)
	Follower:可以理解为从节点,与Leader节点进行数据交换,参与投票。(只读)
	Observer:和follower相同,不参与投票。

	投票:
		zookeeper在启动服务的时候是没有角色的,
		每个主机担任什么样的角色是通过选举产生的,
		必须要产生一个leader角色,需要超过半数的机器投选leader(大于等于n/2 + 1)

	zookeeper集群具有高可用性,当leader故障时,则重新选举leader,
	如果集群中超过半数的主机故障,则整个集群宕掉,
	Observer不参与投票,也不在投票的总设备数中。
	(若有10台主机,其中5台是Observer,则投票设备数是5,只需3票就可以当选leader)

4、原理与设计:
	Leader进行读写操作,在写之前发起投票,超过半数同意才开始写数据
	follower进行读操作,参与投票,收到写操作的时候交给Leader处理
	如果follower的数量过于多,则投票的时候花费的时间太长(不是投票花费的时间太长、而是确定执行某个提案的过程比较漫长)

二、集群安装:

1、准备主机
192.168.1.61~63		follower
192.168.1.64		Observer


2、修改/etc/hosts,同步给其他主机
vim /etc/hosts
192.168.1.61  node1
192.168.1.62  node2
192.168.1.63  node3
192.168.1.64  node4

for i in {61..64} do scp /etc/hosts root@192.168.1.$i:/etc/ done;


3、yum -y install java-1.8.0-openjdk-devel


4、安装zookeeper软件,修改配置文件
tar -xf zookeeper-3.4.13.tar.gz 
mv zookeeper-3.4.13 /usr/local/zookeeper

cd /usr/local/zookeeper/conf/
mv zoo_sample.cfg  zoo.cfg	# 如果是单机版ZK只需修改配置文件的dataDir即可
chown root.root zoo.cfg	# 非必须

vim zoo.cfg
dataDir=/tmp/zookeeper			# 数据存放的路径,一般不使用/tmp目录
# 以下内容添加到配置文件最后
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888:observer			# 声明为observer节点


5、将安装好的zookeeper软件同步到其他主机
for i in {61..64}; do rsync -aSH --delete /usr/local/zookeeper/ 192.168.1.$i:/usr/local/zookeeper  -e 'ssh' & done


6、创建数据存放路径(每台主机都要创建)
for i in {1..4} do ssh node$i mkdir /tmp/zookeeper done


7、创建myid文件,指明zookeeper运行的id,集群中的主机互不相同
# id必须与配置文件zoo.cfg里主机名对应的 server.(id) 一致
echo 1 >/tmp/zookeeper/myid		
ssh node2 'echo 2 >/tmp/zookeeper/myid'
ssh node3 'echo 3 >/tmp/zookeeper/myid'
ssh node4 'echo 4 >/tmp/zookeeper/myid'


8、启动服务(所有主机上都要运行)
/usr/local/zookeeper/bin/zkServer.sh start		# [status, stop]


9、验证(任意主机,我这里在node1上)
方式一:使用telnet
	yum -y install telnet
	telnet node2 2181		# 进入交互模式,访问集群中的主机即可
	ruok			# 发送zookeeper四字命令are you ok
	# imokConnection closed by foreign host.        //i'm ok回应的结果

方式二:使用socat
	socat TCP:node2:2181 -		# 进入交互模式
	ruok			# 发送zookeeper四字命令are you ok
	# imokConnection closed by foreign host.        //i'm ok回应的结果


利用 api 查看状态(node1上面操作,保证zookeeper运行)
vim api.sh
#!/bin/bash
function getstatus(){
    exec 9<>/dev/tcp/$1/2181 2>/dev/null
    echo stat >&9
    MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")
    exec 9<&-
    echo ${MODE:-NULL}
}
for i in node{1..4} 
do
    echo -ne "${i}\t"
    getstatus ${i}
done

# 运行脚本
bash api.sh

关于重定向可以参考:
shell 中的<,<<,>,>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值