概述: 为何要使用zookeeper?centos安装配置zookeeper,zookeeper的主要实际运用场景有4种,java+dubbo+zookeeper实现分布式服务.html
原文地址:http://www.maoyupeng.com/how-to-install-zookeeper-on-centos6.html前端
节选自夏天的森林的博文java
场景一: 有一组服务器向客户端提供某种服务(例如:我前面作的分布式网站的服务端,就是由四台服务器组成的集群,向前端集群提供服务),咱们但愿客户端每次请求服务端均可以找到服务端集群中某一台服务器,这样服务端就能够向客户端提供客户端所需的服务。对于这种场景,咱们的程序中必定有一份这组服务器的列表,每次客户端请求时候,都是从这份列表里读取这份服务器列表。那么这分列表显然不能存储在一台单节点的服务器上,不然这个节点挂掉了,整个集群都会发生故障,咱们但愿这份列表时高可用的。高可用的解决方案是:这份列表是分布式存储的,它是由存储这份列表的服务器共同管理的,若是存储列表里的某台服务器坏掉了,其余服务器立刻能够替代坏掉的服务器,而且能够把坏掉的服务器从列表里删除掉,让故障服务器退出整个集群的运行,而这一切的操做又不会由故障的服务器来操做,而是集群里正常的服务器来完成。这是一种主动的分布式数据结构,可以在外部状况发生变化时候主动修改数据项状态的数据机构。Zookeeper框架提供了这种服务。这种服务名字就是:统一命名服务,它和javaEE里的JNDI服务很像。算法
场景二: 分布式锁服务。当分布式系统操做数据,例如:读取数据、分析数据、最后修改数据。在分布式系统里这些操做可能会分散到集群里不一样的节点上,那么这时候就存在数据操做过程当中一致性的问题,若是不一致,咱们将会获得一个错误的运算结果,在单一进程的程序里,一致性的问题很好解决,可是到了分布式系统就比较困难,由于分布式系统里不一样服务器的运算都是在独立的进程里,运算的中间结果和过程还要经过网络进行传递,那么想作到数据操做一致性要困难的多。Zookeeper提供了一个锁服务解决了这样的问题,能让咱们在作分布式数据运算时候,保证数据操做的一致性。vim
场景三: 配置管理。在分布式系统里,咱们会把一个服务应用分别部署到n台服务器上,这些服务器的配置文件是相同的(例如:我设计的分布式网站框架里,服务端就有4台服务器,4台服务器上的程序都是同样,配置文件都是同样),若是配置文件的配置选项发生变化,那么咱们就得一个个去改这些配置文件,若是咱们须要改的服务器比较少,这些操做还不是太麻烦,若是咱们分布式的服务器特别多,好比某些大型互联网公司的hadoop集群有数千台服务器,那么更改配置选项就是一件麻烦并且危险的事情。这时候zookeeper就能够派上用场了,咱们能够把zookeeper当成一个高可用的配置存储器,把这样的事情交给zookeeper进行管理,咱们将集群的配置文件拷贝到zookeeper的文件系统的某个节点上,而后用zookeeper监控全部分布式系统里配置文件的状态,一旦发现有配置文件发生了变化,每台服务器都会收到zookeeper的通知,让每台服务器同步zookeeper里的配置文件,zookeeper服务也会保证同步操做原子性,确保每一个服务器的配置文件都能被正确的更新。centos
场景四: 为分布式系统提供故障修复的功能。集群管理是很困难的,在分布式系统里加入了zookeeper服务,能让咱们很容易的对集群进行管理。集群管理最麻烦的事情就是节点故障管理,zookeeper可让集群选出一个健康的节点做为master,master节点会知道当前集群的每台服务器的运行情况,一旦某个节点发生故障,master会把这个状况通知给集群其余服务器,从而从新分配不一样节点的计算任务。Zookeeper不只能够发现故障,也会对有故障的服务器进行甄别,看故障服务器是什么样的故障,若是该故障能够修复,zookeeper能够自动修复或者告诉系统管理员错误的缘由让管理员迅速定位问题,修复节点的故障。你们也许还会有个疑问,master故障了,那怎么办了?zookeeper也考虑到了这点,zookeeper内部有一个“选举领导者的算法”,master能够动态选择,当master故障时候,zookeeper能立刻选出新的master对集群进行管理。bash
我使用zookeeper更可能是关联场景一的.这里就很少介绍zookeeper了.有兴趣的朋友能够自行去了解,咱们看看下面的内容,了解下怎么安装zookeeper吧.....服务器
查看本机ip,且记住ip添加一条记录到hosts,以下图,个人ip是10.211.55.27网络
# 编辑hosts vim /etc/hosts # 未修改前 127.0.0.1 localhost ::1 localhost # 修改后 127.0.0.1 localhost # 添加一行,[ip name],随便起个名字:mao-101 10.211.55.27 mao-101 ::1 localhost
zookeeper-3.4.6版本百度云盘下载 : http://pan.baidu.com/s/1miwdKRA数据结构
将下载到的zookeeper-3.4.6.tar.gz安装文件上传到服务器的/home
目录,解压后进入根目录建立data
文件夹和logs
文件夹
cd /home tar -zxvf zookeeper-3.4.6.tar.gz cd zookeeper-3.4.6 mkdir data mkdir logs
进入conf目录,将zoo_sample.cfg重命名或拷贝一份,且命名为zoo.cfg
# 重命名 cd /home/zookeeper-3.4.6/conf/ && mv zoo_sample.cfg zoo.cfg # 拷贝 cd /home/zookeeper-3.4.6/conf/ && cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置
tickTime=2000 initLimit=10 syncLimit=5 # 指向zookeeper目录下的data目录 dataDir=/home/zookeeper-3.4.6/data # 增长日志目录 dataLogDir=/home/zookeeper-3.4.6/logs clientPort=2181 #添加服务通信端口以及程序通信端口 #mao-101咱们已经在 hosts里面配置过 server.1=mao-101:2888:3888
在配置文件中,dataDir配置的目录下,建立myid文件,内容为1
cd /home/zookeeper-3.4.6/data vim myid # 加入内容:1 保存退出vim 1
编辑文件 /etc/profile
,添加以下:
export ZOOKEEPER_HOME=/home/zookeeper-3.4.6 export PATH=$ZOOKEEPER_HOME/bin:$PATH
当即生效
source /etc/profile
sudo su chkconfig iptables on service iptables start #编辑iptables vim /etc/sysconfig/iptables #增长如下内容 -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT # 重启防火墙并查看端口状态 service iptables restart #状态以下图 service iptables status
zkServer.sh start # 输出QuorumPeerMain就证实启动成功 jps
// 切换到init.d目录 cd /etc/rc.d/init.d // 建立zookeeper文件并更新权限 touch zookeeper && chmod +x zookeeper // 编辑zookeeper文件,并添加以下内容 vim zookeeper ====下面是文件内容===== #!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper export JAVA_HOME=/usr/local/jdk7 export PATH=$JAVA_HOME/bin:$PATH case $1 in start) su root /home/zookeeper-3.4.6/bin/zkServer.sh start;; stop) su root /home/zookeeper-3.4.6/bin/zkServer.sh stop;; status) su root /home/zookeeper-3.4.6/bin/zkServer.sh status;; restart) su root /home/zookeeper-3.4.6/bin/zkServer.shrestart;; *) echo "requirestart|stop|status|restart" ;; esac // 添加到开机启动 chkconfig zookeeper on chkconfig --add zookeeper // 启动或中止 service zookeeper start | stop | restart