zookeeper 是一款基于java开发的分布式协调服务,是一种集配置管理、命名服务、分布式锁和发布订阅功能的集群服务。
分布式与单机跑程序不同,因为程序中的先后顺序,执行结果和数据是否遗失问题都可以控制,但在分布式中由于网络等等各方面因素。经常结果和想象出入甚大。此时就可以用到zookeeper
zookeeper 的选举功能保障了数据安全性、一致性和先后顺序性。
实验说明: 三台虚拟机做zookeeper集群,集群个数最好是奇数个,原理详见zookeeper 详解
安装zookeeper 请确保jdk 已安装好,否则无法启动
三台虚拟机IP分别为:192.168.12.162 192.168.12.163 192.168.12.164
一、 ssh 登陆192.168.12.162 做如下操作:
1.1 下载解压zookeeper
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -P /opt tar xf /opt/zookeeper-3.4.6.tar.gz -C /usr/local/ mv /usr/local/zookeeper-3.4.6 /usr/local/zookeeper mkdir -p /usr/local/zookeeper/zookeeper-data/logs echo “1”> /usr/local/zookeeper/zookeeper-data/myid mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
1.2 配置zookeeper集群
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 #zookeeper 时间单位的定量,ms级 initLimit=10 #leader 和fowller 的初始化时间为10个ticktime syncLimit=5 #leader 和fowller 的心跳时间为5个ticktime,也就是10000ms dataDir=/usr/local/zookeeper/zookeeper-data dataLogDir=/usr/local/zookeeper/zookeeper-data/logs clientPort=2181 #客户端连接端口 server.1=192.168.12.162:2888:3888 #前面端口用于leader 与fowller 交换数据,后面端口用于leader 选举 server.2=192.168.12.163:2888:3888 server.3=192.168.12.164:2888:3888
1.3 修改默认zookeeper.out 日志输出位置:
将原日志输出文件位置注释掉,然后新增一行:
ZOO_LOG_DIR="/usr/local/zookeeper/zookeeper-data/logs"
编辑如下文件修改成如下样式:
vim /usr/local/zookeeper/bin/zkEnv.sh
1.4 同步集群中其他服务器配置
scp –r /usr/local/zookeeper root@192.168.12.163:/usr/local/ scp –r /usr/local/zookeeper root@192.168.12.164:/usr/local/
二、 ssh 登陆192.168.12.163 修改myid 文件:
echo “2” > /usr/local/zookeeper/zookeeper-data/myid
三、ssh 登陆192.168.12.164修改myid 文件:
echo “3” > /usr/local/zookeeper/zookeeper-data/myid
四、 分别在三台机器上执行如下操作:
4.1 启动zookeeper服务
/usr/local/zookeeper/bin/zkServer.sh start
4.2 查看zookeeper 启动状态
/usr/local/zookeeper/bin/zkServer.sh status
4.2 如启动失败,重新启动zookeeper 置于前台运行,可看到报错信息
/usr/local/zookeeper/bin/zkServer.sh start-foreground
操作zookeeper ,可以使用kazoo库。pip install kazoo 安装该库
简单操作zookeeper 示例代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' author : cpy data : 20171220PM desc : About Zookeeper ''' from kazoo.client import KazooClient #连接zookeeper zk = KazooClient(hosts='192.168.12.162:2181,192.168.12.163:2181,192.168.12.164:2181') zk.start(timeout=10) #递归创建node zk.ensure_path('/config/webs/tests', acl=None) #设置node 值 zk.set('/config/webs/tests', '67890') #获取node信息 print zk.get('/config/webs/tests', watch=None) #查看node 子节点 @zk.ChildrenWatch('/config/webs') def watch_children(children): print ("Children is now: %s" % children) #查看node 数据 @zk.DataWatch('/config/webs/tests') def watch_node(data, stat): print "Version: %s, data: %s, CreateTime:%s" % (stat.version, data.decode("utf-8"), stat.ctime) zk.stop()
C:\Python27\python.exe C:/Users/Administrator/Desktop/testzkp/clzkp.py ('67890', ZnodeStat(czxid=8589934732L, mzxid=8589934784L, ctime=1513731671893L, mtime=1513733303456L, version=7, cversion=0, aversion=0, ephemeralOwner=0, dataLength=5, numChildren=0, pzxid=8589934732L)) Children is now: [u'tests'] Version: 7, data: 67890, CreateTime:1513731671893 Process finished with exit code 0
dubbo-admin 是阿里巴巴的开源工具,用来监控和管理发送端和消费端。
一、下载阿里巴巴dubbo-admin 源码,地址: https://github.com/alibaba/dubbo
wget https://github.com/alibaba/dubbo/archive/master.zip -O /usr/local/apache-tomcat-7.0.57/webapps/master.zip unzip -d /usr/local/apache-tomcat-7.0.57/webapps /usr/local/apache-tomcat-7.0.57/webapps/master.zip rm -f /usr/local/apache-tomcat-7.0.57/webapps/master.zip
二、安装maven工具
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo yum -y install apache-maven
三、打包dubbo 源码
cd /usr/local/apache-tomcat-7.0.57/webapps/dubbo-master/dubbo-admin mvn package -Dmaven.skip.test=true cd /usr/local/apache-tomcat-7.0.57/webapps/dubbo-master/dubbo-admin/target
四、部署dubbo-admin
mv /usr/local/apache-tomcat-7.0.57/webapps/dubbo-master/dubbo-admin/target/dubbo-admin-2.5.8.war /usr/local/apache-tomcat-7.0.57/webapps/
vim /usr/local/apache-tomcat-7.0.57/conf/server.xml #将虚拟站点名称改成dubbo-admin
<Host name="localhost" appBase=""> <Context path="" debug="0" docBase="webapps/dubbo-admin"/>
#注册到zookeeper 并修改登录密码
vim /usr/local/apache-tomcat-7.0.57/webapps/dubbo-admin/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://cpy02.dev.xjh.com:2181?backup=cpy03.dev.xjh.com:2181,cpy04.dev.xjh.com:2181 dubbo.admin.root.password=passwdcpy #该处定义dubbo.admin 的root用户密码为passwdcpy dubbo.admin.guest.password=passwdcpy #该处定义dubbo.admin 的guest用户密码为passwdcpy
/usr/local/apache-tomcat-7.0.57/bin/startup.sh