1

概述: 为什么要使用zookeeper?centos安装配置zookeeper,zookeeper的主要实际运用场景有4种,java+dubbo+zookeeper实现分布式服务.

原文地址:http://www.maoyupeng.com/how-to-install-zookeeper-on-centos6.html

zookeeper的实际运用场景

节选自夏天的森林的博文

  场景一: 有一组服务器向客户端提供某种服务(例如:我前面做的分布式网站的服务端,就是由四台服务器组成的集群,向前端集群提供服务),我们希望客户端每次请求服务端都可以找到服务端集群中某一台服务器,这样服务端就可以向客户端提供客户端所需的服务。对于这种场景,我们的程序中一定有一份这组服务器的列表,每次客户端请求时候,都是从这份列表里读取这份服务器列表。那么这分列表显然不能存储在一台单节点的服务器上,否则这个节点挂掉了,整个集群都会发生故障,我们希望这份列表时高可用的。高可用的解决方案是:这份列表是分布式存储的,它是由存储这份列表的服务器共同管理的,如果存储列表里的某台服务器坏掉了,其他服务器马上可以替代坏掉的服务器,并且可以把坏掉的服务器从列表里删除掉,让故障服务器退出整个集群的运行,而这一切的操作又不会由故障的服务器来操作,而是集群里正常的服务器来完成。这是一种主动的分布式数据结构,能够在外部情况发生变化时候主动修改数据项状态的数据机构。Zookeeper框架提供了这种服务。这种服务名字就是:统一命名服务,它和javaEE里的JNDI服务很像。

  场景二: 分布式锁服务。当分布式系统操作数据,例如:读取数据、分析数据、最后修改数据。在分布式系统里这些操作可能会分散到集群里不同的节点上,那么这时候就存在数据操作过程中一致性的问题,如果不一致,我们将会得到一个错误的运算结果,在单一进程的程序里,一致性的问题很好解决,但是到了分布式系统就比较困难,因为分布式系统里不同服务器的运算都是在独立的进程里,运算的中间结果和过程还要通过网络进行传递,那么想做到数据操作一致性要困难的多。Zookeeper提供了一个锁服务解决了这样的问题,能让我们在做分布式数据运算时候,保证数据操作的一致性。

  场景三: 配置管理。在分布式系统里,我们会把一个服务应用分别部署到n台服务器上,这些服务器的配置文件是相同的(例如:我设计的分布式网站框架里,服务端就有4台服务器,4台服务器上的程序都是一样,配置文件都是一样),如果配置文件的配置选项发生变化,那么我们就得一个个去改这些配置文件,如果我们需要改的服务器比较少,这些操作还不是太麻烦,如果我们分布式的服务器特别多,比如某些大型互联网公司的hadoop集群有数千台服务器,那么更改配置选项就是一件麻烦而且危险的事情。这时候zookeeper就可以派上用场了,我们可以把zookeeper当成一个高可用的配置存储器,把这样的事情交给zookeeper进行管理,我们将集群的配置文件拷贝到zookeeper的文件系统的某个节点上,然后用zookeeper监控所有分布式系统里配置文件的状态,一旦发现有配置文件发生了变化,每台服务器都会收到zookeeper的通知,让每台服务器同步zookeeper里的配置文件,zookeeper服务也会保证同步操作原子性,确保每个服务器的配置文件都能被正确的更新。

  场景四: 为分布式系统提供故障修复的功能。集群管理是很困难的,在分布式系统里加入了zookeeper服务,能让我们很容易的对集群进行管理。集群管理最麻烦的事情就是节点故障管理,zookeeper可以让集群选出一个健康的节点作为master,master节点会知道当前集群的每台服务器的运行状况,一旦某个节点发生故障,master会把这个情况通知给集群其他服务器,从而重新分配不同节点的计算任务。Zookeeper不仅可以发现故障,也会对有故障的服务器进行甄别,看故障服务器是什么样的故障,如果该故障可以修复,zookeeper可以自动修复或者告诉系统管理员错误的原因让管理员迅速定位问题,修复节点的故障。大家也许还会有个疑问,master故障了,那怎么办了?zookeeper也考虑到了这点,zookeeper内部有一个“选举领导者的算法”,master可以动态选择,当master故障时候,zookeeper能马上选出新的master对集群进行管理。

我使用zookeeper更多是关联场景一的.这里就不多介绍zookeeper了.有兴趣的朋友可以自行去了解,我们看看下面的内容,了解下怎么安装zookeeper吧.....

安装准备

修改操作系统的hosts

查看本机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

zookeeper-3.4.6版本百度云盘下载 : http://pan.baidu.com/s/1miwdKRA

安装及配置

解压zookeeper文件

将下载到的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

配置zoo.cfg文件

进入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

创建myid文件

在配置文件中,dataDir配置的目录下,创建myid文件,内容为1

cd /home/zookeeper-3.4.6/data
vim myid

# 加入内容:1   保存退出vim
1

增加zookeeper环境变量

编辑文件 /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

毛宇鹏博客

添加zookeeper开机启动

// 切换到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

毛宇鹏
440 声望11 粉丝

毛君能颖脱,宇宙隘而妨,鹏息风还起。