您的位置:首页 > 其它

ZooKeeper 集群搭建

2018-03-15 10:04 197 查看

目录

目录

zk

集群介绍

下载安装

server1配置

启动集群

检查集群是否搭建成功

防火墙配置

zk

zk本来是大数据这边的一个技术,解决服务与服务之间的协调工作.近年来各种集群涌现.集群每个节点之间的协调工作就成了一个问题.比如dubbo,kafka这些.这篇主要介绍zk集群的搭建.单节点参照我之前写过博客 : http://blog.csdn.net/shangmingtao/article/details/78008016

集群介绍

zk集群有个特点,半数以上节点存活整个集群就能正常提供服务.

举个栗子:

集群节点数为3个 : 一个leader两个follower,leader宕机会在两个follower中选一个作为新leader.集群可用

集群节点数为4个: 一个leader三个follower,leader宕机了,三个follower中的一个也宕机了.集群就不可用了(这里宕机了两台机器,剩下两台可用机器.不满足”以上”条件)

今天我们用三台机器搭建集群

server1:192.168.1.3

server2:192.168.1.5

server3:192.168.1.9

下载安装

下载地址(官方) :http://mirror.bit.edu.cn/apache/zookeeper/

cd /usr/local/
tar -xzvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6
mkdir data
mkdir logs
cd conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg


server1配置

zoo.cfg:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6/data  #数据目录,需要自己提前建好
dataLogDir=/usr/local/zookeeper-3.4.6/logs  #日志目录,也需要自己提前建好
clientPort=2181

server.1=192.168.1.3:2888:3888 #这里的1下边讲是怎么来的
server.2=192.168.1.5:2888:3888
server.3=192.168.1.9:2888:3888


配置本机id

cd /usr/local/zookeeper-3.4.6/data  #zoo.cfg中的dataDir
echo "1" > myid   #这里的"1"代表本机id,如果本机是192.168.1.5那就应该是"2" > myid


启动集群

这里我为了省事没有配置环境变量,大家有需要还是到我写的第一篇去找怎么配吧.

cd /usr/local/zookeeper-3.4.6/bin
./zkServer.sh start  #启动
./zkServer.sh stop   #停止
./zkServer.sh status #查询节点状态


检查集群是否搭建成功

通过
./zkServer.sh status
命令我们可以看到如下信息

leader :

[root@yqtpro60 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader


follower:

[root@template bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower


防火墙配置

这里防火墙我们要开启三个端口分别是:

2181 : 客户端访问zk server的端口

2888 : zk节点与节点间互访的端口

3888 : zk与其他应用程序通讯端口

配置方法 :

Step 1 :
vi /etc/sysconfig/iptables


Step 2 : 添加如下三行

-A INPUT -s 192.168.1.6/24 -p tcp -m tcp --dport 2888 -j ACCEPT
-A INPUT -s 192.168.1.6/24 -p tcp -m tcp --dport 3888 -j ACCEPT
-A INPUT -s 192.168.1.6/24 -p tcp -m tcp --dport 2181 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT   #这条太关键了,下边讲


Step 3 :
service iptables restart


经过如上配置我们现在允许所有192.168.1.*的机器对本机的2181,2888,3888端口的访问,同时允许本机所有访问.大家注意啊,这是一个内网配置方案 , 如果需要外网访问需要放行外网ip为源地址包.大家自行配置.

最后说下
-A INPUT -s 127.0.0.1/32 -j ACCEPT
为什么重要.昨天我在配置集群时候发现其中一台机器不论如何执行
./zkServer.sh status
都不能正常输入结果.输出的信心如下:

[root@template bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.


通过查看bin目录下的
zookeeper.out
日志输出文件发现有这样两行

2018-03-15 09:55:04,384 [myid:1] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@197] - Accepted socket connection from /127.0.0.1:53084
2018-03-15 09:55:04,386 [myid:1] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@827] - Processing srvr command from /127.0.0.1:53084
2018-03-15 09:55:04,388 [myid:1] - INFO  [Thread-17:NIOServerCnxn@1007] - Closed socket connection for client /127.0.0.1:53084 (no session established for client)


这个问题也是折腾了我两个多小时(有点尴尬),当我们通过
./zkServer.sh status
查看节点状态时,我们发起一个源ip为:127.0.0.1 源port:53084 目的ip:127.0.0.1 目的port:2181的tcp连接.那如果我们不配置
-A INPUT -s 127.0.0.1/32 -j ACCEPT
,这样的包是过去防火墙的.所以最终导致
Error contacting service. It is probably not running.
但即便如此我们的集群工作是正常的.只是
./zkServer.sh status
的命令执行出现了问题.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Zookeeper 集群