ZooKeeper 集群安装

ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性

准备自己搭建一个ZooKeeper,Dubbo,spring的微服务。因为安装ZooKeeper集群的时候遇到了一些问题。防止重复踩坑。特别记录一下。

系统环境安装

下载Vmware/VirtualBox

下载你喜欢的虚拟机。

下载喜欢的linux系统

这里使用centos。下载地址阿里巴巴镜像。记得不要选择NetInstall版本。不然安装很麻烦。我选择的是Minimal,比较小,1g左右

安装相关依赖

因为我使用的时Minimal版本的系统,什么软件都没有
yum -y install java-1.8.0-openjdk*

安装ZooKeeper

去官网下载zookeeper。解压到相应位置。

启动ZooKeeper

进入conf目录,将zoo_sample.cfg复制一份并命名为zoo.cfg
在zookeeper目录下运行以下命令

1
./bin/zkServer.sh start

然后再运行./bin/zkServer.sh status查看运行状态,状态是Standalone

安装ZooKeeper集群

复制两台虚拟机

配置静态ip。可以参考这篇文章Virtual Box下给虚拟机(Centos7)设置固定IP

我这边三台机器ip分是192.168.2.68、192.168.2.69、192.168.2.70

配置主机名

vim /etc/hosts

1
2
3
192.168.2.68  zk1  
192.168.2.69 zk2
192.168.2.70 zk3

三台机器都要配置

修改ZooKeeper配置文件

分别在三台机子上面修改zoo.cfg

zk1机子配置添加下面地址

1
2
3
4
5
dataDir=/tmp/zookeeper #在这个路径下创建文件myid。内容为1
#下面是新增的配置
server.1=0.0.0.0:2888:2688 #本机一定要配置成0.0.0.0,不然可能会报cannot open channel to
server.2=zk2:2888:2688
server.3=zk3:2888:2688
  • 增加myid文件
    在上面配置文件的路径下新建myid文件,内容为对应server的id。这台机子就是1.

zk2机子配置添加下面地址

1
2
3
4
5
dataDir=/tmp/zookeeper #在这个路径下创建文件myid。内容为1
#下面是新增的配置
server.1=zk1:2888:2688 #本机一定要配置成0.0.0.0,不然可能会报cannot open channel to
server.2=0.0.0.0:2888:2688
server.3=zk3:2888:2688
  • 增加myid文件
    在上面配置文件的路径下新建myid文件,内容为对应server的id。这台机子就是2.

zk3机子配置添加下面地址

1
2
3
4
5
dataDir=/tmp/zookeeper #在这个路径下创建文件myid。内容为1
#下面是新增的配置
server.1=zk1:2888:2688 #本机一定要配置成0.0.0.0,不然可能会报cannot open channel to
server.2=zk2:2888:2688
server.3=0.0.0.0:2888:2688
  • 增加myid文件
    在上面配置文件的路径下新建myid文件,内容为对应server的id。这台机子就是3.

启动ZooKeeper集群

  • 在三台机子上分别执行./bin/zkServer.sh start

  • 分别执行./bin/zkServer.sh status结果如下

1
2
3
4
[root@localhost zookeeper-3.4.12]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/download/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
1
2
3
4
[root@zk2 zookeeper-3.4.12]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/download/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
1
2
3
4
[root@zk2 zookeeper-3.4.12]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/download/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

注意事项(踩坑)

Zookeep启动正常,却报错:Error contacting service. It is probably not running.请查看zookeeper目录下的zookeeper.out文件

出现 no route to host

关闭防火墙 systemctl stop firewalld

出现cannot open channel to

把本机zoo.cfg的本机地址用0.0.0.0代替

其它问题

网上非常多,上面两个提及的很少。可以参考https://blog.csdn.net/cc1949/article/details/78196226