Zookeeper — 集群部署

本文介绍如何搭建Zookeeper集群并将其与Dubbo框架集成。通过详细步骤讲解了集群配置、防火墙设置及服务注册等内容。

    zookeeper集群只要有超过一半的节点正常就可以运行,所以集群节点的数量应该为奇数,即:使用2n+1个节点来运行zookeeper集群。下面使用3台机器部署zookeeper节点。

1.修改hosts文件

## 修改hosts文件,添加节点的映射
vi /etc/hosts

## hosts的内容如下
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#zookeeper cluster servers (zookeeper的节点IP映射)
192.168.0.106 server01
192.168.0.104 server02
192.168.0.105 server03

2.解压zookeeper

    解压zookeeper到目录中,应该命名目录为zk-node-xx,其中xx是节点的编号,在这次设置中三天机器的zookeeper目录分别为:

  • 机器192.168.0.106,目录名是zk-node-01;
  • 机器192.168.0.104,目录名是zk-node-02;
  • 机器192.168.0.105,目录名是zk-node-03;

3.创建data与logs文件夹

    在三台机器的zk-node-xx目录下都创建data与logs文件夹,使用命令:

## 创建data
mkdir data

## 创建logs
mkdir logs

4.修改zoo.cfg配置文件

    分别从三台机器zk-node-xx\conf目录,拷贝zoo_sample.cfg文件,并且重命名为zoo.cfg:

## 复制文件
cp zoo_sample.cfg zoo.cfg

    接着,分别修改这三台机器的zoo.cfg,修改内容如下:

## 192.168.0.106的zoo.cfg内容

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zk-node-01/data
dataLogDir=/opt/zk-node-01/logs
clientPort=2181
server.1=server01:2881:3881
server.2=server02:2882:3882
server.3=server03:2883:3883

    其中dataDir与dataLogDir的目录分别对应上面创建的两个文件夹,server.1、server.2、server.3分别对应三台机器,机器192.168.0.106的端口为2181。

    下面两台机器的配置大同小异,dataDir、dataLogDir和clientPort会不同。

## 192.168.0.104的zoo.cfg内容

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zk-node-02/data
dataLogDir=/opt/zk-node-02/logs
clientPort=2182
server.1=server01:2881:3881
server.2=server02:2882:3882
server.3=server03:2883:3883
#192.168.0.105的zoo.cfg文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zk-node-03/data
dataLogDir=/opt/zk-node-03/logs
clientPort=2183
server.1=server01:2881:3881
server.2=server02:2882:3882
server.3=server03:2883:3883

配置文件参数说明:

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=/opt/zk-node-01/data

顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。

clientPort=2181

clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。

server.A=B:C:D

server.1=server01:2881:3881

server.2=server02:2882:3882

server.3=server03:2883:3883

A是一个数字,表示这个是第几号服务器;

B是这个服务器的IP地址(或者是与IP地址做了映射的主机名);

C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的Leader服务器交换信息的端口;

D是在leader挂掉时专门用来进行选举leader所用的端口。

注意:如果是伪集群的配置方式,不同的Zookeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。

5.在data目录创建myid文件

    在zk-node-xx\data目录下创建一个myid文件,三台机器的myid内容分别为1、2和3:

## 创建myid文件
vi myid

## 输入内容
1

6.配置防火墙

    三台机器开启的端口不同:

  • 机器192.168.0.106是第一个zk节点,它开启2181、2881、3881端口;
  • 机器192.168.0.104是第二个zk节点,它开启2182、2882、3882端口;
  • 机器192.168.0.105是第三个zk节点,它开启2183、2883、3883端口;
## 192.168.0.106
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2881/tcp --permanent
firewall-cmd --zone=public --add-port=3881/tcp --permanent
firewall-cmd --reload

## 192.168.0.104
firewall-cmd --zone=public --add-port=2182/tcp --permanent
firewall-cmd --zone=public --add-port=2882/tcp --permanent
firewall-cmd --zone=public --add-port=3882/tcp --permanent
firewall-cmd --reload

## 192.168.0.105
firewall-cmd --zone=public --add-port=2183/tcp --permanent
firewall-cmd --zone=public --add-port=2883/tcp --permanent
firewall-cmd --zone=public --add-port=3883/tcp --permanent
firewall-cmd --reload

7.开启zookeeper服务

    服务在zk-node-xx\bin下,有一个zkServer.sh文件,分别对三台机器执行:

## 开启zookeeper服务
zkServer.sh start

## 查看zookeeper状态
zkServer.sh status

    三台机器的status如下:

[root@localhost ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk-node-03/bin/../conf/zoo.cfg
Mode: leader

[root@localhost data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk-node-02/bin/../conf/zoo.cfg
Mode: follower

[root@localhost bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk-node-01/bin/../conf/zoo.cfg
Mode: follower

8.使用dubbo测试zookeeper集群

    dubbo服务配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="ems-gateway-service" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry protocol="zookeeper" address="192.168.0.106:2181,192.168.0.104:2182,192.168.0.105:2183" />

	<!-- 用dubbo协议在20880端口暴露服务 -->
	<dubbo:protocol name="dubbo" port="20880" />
		
	<!-- 用户服务接口 -->
	<dubbo:service interface="cn.net.bysoft.ems.gateway.facade.service.GatewayService" ref="gatewayService" />

</beans>

    dubbo管控台配置文件内容:

vi ROOT/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://192.168.1.106:2181?backup=192.168.1.104:2182,192.168.1.105:2183
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

    dubbo客户端配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
	<dubbo:application name="ems-gateway-test" />

	<!-- 注册中心地址 -->
	<dubbo:registry protocol="zookeeper"
		address="192.168.0.106:2181,192.168.0.105:2182,192.168.0.107:2183" />

	<!-- 服务接口 -->
	<!-- 使用zookeeper注册中心暴露服务地址 url="dubbo://localhost:20880" -->
	<dubbo:reference
		interface="cn.net.bysoft.ems.gateway.facade.service.GatewayService"
		id="gatewayService" check="false" />
</beans>

 

转载于:https://my.oschina.net/u/2450666/blog/830308

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值