ZooKeeper 集群搭建

目录

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的命令执行出现了问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值