Zookeeper集群和伪集群

http://zookeeper.apache.org/releases.html下载最新稳定版的zookeeper
本例用的是zookeeper-3.4.8.tar.gz
先安装基本的软件:

#apt-get -y install gcc make lrzsz(xshell远程传输文件的软件)

在Ubuntu操作系统的 / 目录下创建应用目录:

#mkdir -p /data/app/
#cd /data/app/

Zookeeper伪分布式环境搭建:

#tar xzvf zookeeper-3.4.8.tar.gz -C /data/app/
创建三个集群节点:
#mv zookeeper-3.4.8 zookeeper-3.4.8-node1
#cp -r zookeeper-3.4.8-node1 zookeeper-3.4.8-node2
#cp -r zookeeper-3.4.8-node1 zookeeper-3.4.8-node3
创建数据存放路径:
#cd /data/
#mkdir -p zookeeper/zoo1 zookeeper/zoo2 zookeeper/zoo3
创建zookeeper软链接, 便于在不同版本之间切换
ln -s /data/app/zookeeper-3.4.8-node1  /data/app/zookeeper1
在/etc/profile.d目录下创建文件 zookeeper_env.sh, 内容如下:
#!/bin/bash  
ZOOKEEPER_HOME=/data/app/zookeeper1 
PATH=$ZOOKEEPER_HOME/bin:$PATH 

#source /etc/profile 
创建zoo.cfg文件:
#cd /data/app/zookeeper-3.4.8-node1(2、3)
#cd conf
#cp zoo_sample.cfg zoo.cfg
配置zoo.cfg文件:

#zookeeper-3.4.8-node1的配置
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/data/zookeepr/zoo1
server.1=192.168.92.131:2887:3887
server.2=192.168.92.131:2888:3888
server.3=192.168.92.131:2889:3889

#zookeeper-3.4.8-node2的配置
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2182
dataDir=/data/zookeepr/zoo2
server.1=192.168.92.131:2887:3887
server.2=192.168.92.131:2888:3888
server.3=192.168.92.131:2889:3889

#zookeeper-3.4.8-node3的配置
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2183
dataDir=/data/zookeepr/zoo3
server.1=192.168.92.131:2887:3887
server.2=192.168.92.131:2888:3888
server.3=192.168.92.131:2889:3889
参数说明:

tickTime=2000:
tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳;

initLimit=10:
initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒;

syncLimit=5:
syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒;

dataDir=/data/zookeepr/zoo1
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里;

clientPort=2181
clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.A=B:C:D:
A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址
C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
D是在leader挂掉时专门用来进行选举leader所用
创建ServerID标识:
除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,在上面配置文件中zoo.cfg中配置的dataDir路径中创建myid文件

#cd /data/zookeeper/zoo1
#vim myid
1  
#cd /data/zookeeper/zoo2
#vim myid
2  
#cd /data/zookeeper/zoo3
#vim myid
3   
启动zookeeper:
#cd /data/app/zookeeper-3.4.8-node1/bin
#./zkServer.sh start
JMX enabled by default
Using config: /data/app/zookeeper-3.4.8-node1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

#cd /data/app/zookeeper-3.4.8-node2/bin
#./zkServer.sh start
JMX enabled by default
Using config: /data/app/zookeeper-3.4.8-node2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

#cd /data/app/zookeeper-3.4.8-node3/bin
#./zkServer.sh start
JMX enabled by default
Using config: /data/app/zookeeper-3.4.8-node3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
检查集群是否启动:
# echo stat|nc localhost 2181
# echo stat|nc localhost 2182
# echo stat|nc localhost 2183
或者:
#cd /data/app/zookeeper-3.4.8-node1/bin
#./zkCli.sh
#cd /data/app/zookeeper-3.4.8-node2/bin
#./zkCli.sh
#cd /data/app/zookeeper-3.4.8-node3/bin
#./zkCli.sh

伪集群部署注意事项:

在一台机器上部署了3server;需要注意的是clientPort这个端口如果在1台机器上部署多个server,那么每台机器都要不同的clientPort.

比如 server.12181,server.22182,server.32183

最后几行唯一需要注意的地方就是

server.X 这个数字就是对应 data/myid中的数字。你在3server的myid文件中分别写入了1,2,3,那么每个server中的zoo.cfg都配 server.1,server.2,server.3就OK了

以下是在三台不同的虚拟机上配置zookeeper集群:

在第一台虚拟机上安装配置zookeeper(192.168.92.131#tar xzvf zookeeper-3.4.8.tar.gz -C /data/app/

创建第一个节点:
#mv zookeeper-3.4.8 zookeeper-3.4.8-node1

创建数据存放路径:
#cd /data/
#mkdir -p zookeeper/zoo1 

创建zoo.cfg文件:
#cd /data/app/zookeeper-3.4.8-node1
#cd conf
#cp zoo_sample.cfg zoo.cfg

配置zoo.cfg文件:

#zookeeper-3.4.8-node1的配置
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/data/zookeepr/zoo1
server.1=192.168.92.131:2887:3887
server.2=192.168.92.132:2888:3888
server.3=192.168.92.133:2889:3889

创建ServerID标识:
除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,在上面配置文件中zoo.cfg中配置的dataDir路径中创建myid文件

#cd /data/zookeeper/zoo1
#vim myid
1 

将server1上已经配置好的/data/zookeeper/zoo1/和/data/app/zookeeper-3.4.8-node1目录分别拷贝至server2和server3。然后将其上的/data/zookeeper/zoo1/myid的内容修改为23.

分别启动zookeeper

注:启动第一台的时候可能会报错,提示zoo2和zoo3,等全部启动完成之后就不会报错了。


以下是还没有测试的:
1. 此处使用主机名而不是ip,因此需要在三台节点的 /etc/hosts中配置映射关系

192.168.17.130  masternode
192.168.17.131  worknode1
192.168.17.132  worknode2

2. 为了方便在不同节点上拷贝文件,此处配置ssh,互相交换公共密钥,示例:

ssh-keygen -t rsa 
ssh-copy-id -i ~/.ssh/id_rsa.pub masternode 
ssh-copy-id -i ~/.ssh/id_rsa.pub worknode1 
ssh-copy-id -i ~/.ssh/id_rsa.pub worknode2 

实现三个节点两两之间相互无密码访问,然后使用scp命令进行拷贝


./zkServer.sh start启动一个server,这时会报大量错误?其实没什么关系,
因为现在集群只起了1台server,zookeeper服务器端起来会根据zoo.cfg的服务器列表发起选举leader的请求,
因为连不上其他机器而报错,那么当我们起第二个zookeeper实例后,leader将会被选出,
从而一致性服务开始可以使用,这是因为3台机器只要有2台可用就可以选出leader并且
对外提供服务(2n+1台机器,可以容n台机器挂掉)

你可能感兴趣的:(zookeeper)