Zookeeper 集群搭建

Zookeeper: 

功能: 

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

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集群】  


构建zk集群:  

主机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 


查看zk集群:  

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、付费专栏及课程。

余额充值