【zookeeper】zookeeper介绍及安装和集群配置

1.什么是zookeeper ?

    zookeeper 英文直译是动物管理员,试想下,动物园里有很多动物,如果没有动物管理员去做管理的话,各种动物混在一起很可能出现打架问题,疾病,脏,等等一系列问题,这个时候就需要有个主人去把这些动物统一管理起来,zookeeper其实就是这样一种工具.

zookeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。

通俗点讲,也就是我个人的理解:zookeeper主要是用于分布式系统的文件管理者,能够让所有分布式系统的节点都能拿到统一的数据.

2.如何安装zookeeper?

  第一步:安装

#1.去zookeeper官网下载zookeeper.tar.gz安装包
http://zookeeper.apache.org/
#2.将下载好的安装包传至服务器,当然你也可以直接在服务器上使用wget命令去下载,版本你自己选.
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
#3.将下载好的安装包解压至/usr/local目录下
tar -zxvf zookeeper-3.3.3.tar.gz -C /usr/local
#4.将解压后的安装包重命名一下
mv zookeeper-3.3.3 zookeeper

第二步:配置环境

#配置环境变量
vi /etc/profile
#添加zookeeper的安装path,我这里把完整的java及Mycat及zookeeper的配置都贴出来,不用的大家手动删了即可.
export JAVA_HOME=/usr/local/java
export ZOOKEEPER_HOME=/usr/loacal/zookeeper
export MyCAT_HOME=/usr/local/mycat
export CLASSPATH=.:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:/usr/local/mycat/bin

第三步:修改zookeeper启动文件

#进入到zk安装目录下的conf目录
cd /usr/local/zookeeper/conf
#复制并重命名一份zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg
#这里如果端口不冲突的话,就保持默认的zk配置即可

第四步:启动zk并查看状态/日志

#进入zk安装目录的bin目录
cd /usr/local/zookeeper/bin
#启动zk
./zkServer.sh start
#查看状态
./zkServer.sh status
如果正常启动的话,这里的状态就是:
Mode: standalone
也就是说它是单节点的.
#你也可以看看启动日志
tail -f zookeeper.out

3.zookeeper集群配置

zookeeper做集群,节点数必须为2n+1,那么最低配的集群也至少拥有3台服务器,3台服务器可以使节点中可以宕机的服务器数量为1,5台可以允许2台服务器宕机...

为什么zookeeper要求集群中的节点数量必须为2n+1呢?主要是因为zookeeper的选举制的算法决定的,试想一下这样一个场景:

现在班上要选一个班长,班主任决定采用投票制,每人只能投1票,每个人的票只能投给给自己投过票的人,这种情况下,如果人数是偶数的话,那么投票结果总是每个人的得票数都相等,但如果是基数的话就不一样了,总会有一个人没有人给他投票,于是他慷慨的把票投给了自己喜欢的人,于是得到额外这一票的这个人就当上了班长...

下面就以最简单的集群(3个节点的)集群为例,演示如何配置zk集群:

假设我有3台服务器,Ip分别为192.168.1.1,192.168.1.2,192.168.1.3,并将其编号为节点:1,2,3.

分别在3台服务器上安装zk,安装方法同上.

分别修改3台服务器的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=/usr/local/zookeeper/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
# 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=0.0.0.0:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3.75:2888:3888

再给份简化版的配置文件:

#其它配置不用动,只修改/添加下面这点配置即可:
dataDir=/usr/local/zookeeper/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
server.1=0.0.0.0:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3.75:2888:3888

值得注意的是,每台服务器的zoo.cfg里 配置的server.x对应的ip如果是指自身服务器的话,请将ip配置为0.0.0.0,否则别的服务器的zk不能与该服务器的zk进行通信,这点可能在内网环境还是走的通的,如果是外网服务器不这样配是绝对不行的.

配置好了zoo.cfg之后,眼尖的同学可以看到我在zoo.cfg里配置了dataDir和dataLogDir,但zk的安装目录下根本没有这两个文件夹,所以接下来就是在每台服务器上创建这些文件夹:

#进入到zk安装目录里
cd /usr/local/zookeeper
#创建这两个文件夹
mkdir dataDir
mkdir dataLogDir

然后分别进入对应的服务器的dataDir,在里面添加myid文件,文件中的数字对应上面zoo.cfg中配置的server.数字

#在每台服务器的dataDir中添加myid文件
cd /usr/local/zookeeper/dataDir
vi myid
#添加对应值进去
比如第一台服务器,就写1,第二台服务器就写2...与你上面zoo.cfg里的server.数字保持一致即可.
#加完之后保存
:wq

如上图,只需要添加数字即可,不需要额外的东西.

三台服务器上都添加好之后,就可以启动三台服务器上的zk了,启动之后观察日志是否报错,如果三台均未报错,然后可以随便在一台上查看当前服务器状态,如果正常显示follower或leader即说明配置成功,不成功的请检查配置,端口,及防火墙等.

./zkServer.sh status

OK,关于zk的介绍,配置,集群配置就简单介绍到这里,下讲主要介绍zk的一些命令和使用java操作zk.

猜你喜欢

转载自blog.csdn.net/lovexiaotaozi/article/details/83308386