Zookeeper 集群搭建

Zookeeper:

功能:

1.类似JNDI的[b]命名服务[/b]
2.实现分布式系统中的[b]配置服务[/b]
3.提供简单好用的[b]分布式同步服务[/b]
4.提供简单好用的[b]分布式协调框架[/b]
5.可以作为一个简单的可靠的[b]消息队列[/b]

ZK应用场景:命名服务
ZK创建一个节点后,节点的路径就是全局唯一的,可以作为全局名称使用

ZK应用场景:分布式锁
ZK能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的,一个用户创建一个节点作为锁,另一个用户检查该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁


特点:

1.原子性:更新要么成功,要么失败,不会出现部分更新
2.可靠性:一旦数据更新成功,将一直保持,知道新的更新
3.单一性:无论客户端连接哪一个server,都会看到同一个视图
4.及时性:客户端会在一个确定的时间内得到更新的数据
5.等待无关:慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待
6.顺序一致性:按照客户端发送请求的顺序更新数据,包括全局有序和偏序的两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发布者发布,a必将排在b前面


一、官方网站下载zookeeper-3.4.6.tar.gz

http://www.apache.org/dyn/closer.cgi/zookeeper/

二、将下载得到的zookeeper-3.4.6.tar.gz放到指定的目录中,自己统一放在了/usr/appdata/zookeeper-3.4.6/下,tar解压缩即可

#tar -zxvf zookeeper-3.4.6.tar.gz

三、设置环境变量:

为了方便运行zkServer.sh脚本,我们将zookeeper的bin路径加入到/etc/profile中,作为一个全局变量进行输出到PATH中

#vi /etc/profile

ZOOKEEPER_HOME=/usr/appdata/zookeeper-3.4.6
export ZOOKEEPER_HOME
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

#source /etc/profile

修改完成之后运行source /etc/profile使修改生效

四、设置host

#vi /etc/hosts

172.16.15.13 server1
172.16.15.14 server2
172.16.15.15 server3

增加集群服务器的IP和host的对应关系到/etc/hosts(所有节点都同样增加)


五、建立zookeeper配置文件(可以先在一个节点上配置,后期直接复制到其他节点即可)

进入到zookeeper的conf/中,将zoo_sample.cfg拷贝成zoo.cfg:

#cp zoo_sample.cfg zoo.cfg

#vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/zookeeper/local/var/zookeeper/data
dataLogDir=/home/zookeeper/local/var/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888

端口2181
设置dataDir为一个指定目录存放zookeeper的协调数据。最后添加集群中的节点,根据server.X的号码在相应的节点上的dataDir下建立myid文件,输入自身的“X”作为内容即可,比如server1节点上的myid只输入1即可。


#cd /home/zookeeper/local/var/zookeeper/data
#echo "1" >> myid

server1节点上的myid输入1,server2节点上的myid输入2,server3节点上的myid输入3

六、复制zookeeper-3.4.6到其他各节点

这里使用scp -r zookeeper-3.4.6/ hadoop@server2:实现,注意每个节点的dataDir下的myid文件要修改成自身的Server-X号码


七、运行zkServer.sh

#zkServer.sh start

在所有节点上分别运行zkServer.sh start命令

八、查看运行状态

#zkServer.sh status

JMX enabled by default
Using config: /usr/appdata/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower


九、配置开机启动zookeeper文件

#cd /etc/rc.d/init.d
#touch zookeeper
#chmod +x zookeeper
#vi zookeeper

添加如下内容

#! /bin/sh
# chkconfig: 2345 10 90
# description: zookeeper

ZOOKEEPER_PATH=/usr/appdata/zookeeper-3.4.6/bin/

case "$1" in
start)
echo "start zookeeper service..."
sh ${ZOOKEEPER_PATH}/zkServer start
;;
stop)
echo "stop zookeeper service..."
sh ${ZOOKEEPER_PATH}/zkServer stop
;;
restart)
echo "restart zookeeper service..."
sh ${ZOOKEEPER_PATH}/zkServer restart
;;
status)
echo "zookeeper status"
sh ${ZOOKEEPER_PATH}/zkServer status
;;
*)
echo "require start|stop|status|restart"
exit1
;;
esac

添加到开机启动服务

chkconfig --add zookeeper
chkconfig zookeeper on
chkconfig --list #查看开机启动的服务


然后就可以使用
#service zookeeper start|stop|restart|status
启动|停止|重启|状态 啦


【Docker环境搭建Zookeeper集群】

[b]构建zk集群:[/b]

主机A:

docker run -d \
--name=zk1 \
--net=host \
-e SERVER_ID=1 \
-e ADDITIONAL_ZOOKEEPER_1=server.1=localhost:2888:3888 \
-e ADDITIONAL_ZOOKEEPER_2=server.2=localhost:2889:3889 \
-e ADDITIONAL_ZOOKEEPER_3=server.3=localhost:2890:3890 \
-e ADDITIONAL_ZOOKEEPER_4=clientPort=2181 \
zookeeper:latest

主机B:

docker run -d \
--name=zk2 \
--net=host \
-e SERVER_ID=2 \
-e ADDITIONAL_ZOOKEEPER_1=server.1=localhost:2888:3888 \
-e ADDITIONAL_ZOOKEEPER_2=server.2=localhost:2889:3889 \
-e ADDITIONAL_ZOOKEEPER_3=server.3=localhost:2890:3890 \
-e ADDITIONAL_ZOOKEEPER_4=clientPort=2182 \
zookeeper:latest

主机C:

docker run -d \
--name=zk3 \
--net=host \
-e SERVER_ID=3 \
-e ADDITIONAL_ZOOKEEPER_1=server.1=localhost:2888:3888 \
-e ADDITIONAL_ZOOKEEPER_2=server.2=localhost:2889:3889 \
-e ADDITIONAL_ZOOKEEPER_3=server.3=localhost:2890:3890 \
-e ADDITIONAL_ZOOKEEPER_4=clientPort=2183 \
zookeeper:latest


[b]查看zk集群:[/b]

echo stat | nc 127.0.0.1 2181

echo stat | nc 127.0.0.1 2182

echo stat | nc 127.0.0.1 2183
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值