ZooKeeper(一):创建仲裁模式服务器集群

1. 准备配置文件

首先进入ZooKeeper的安装目录,复制多份ZooKeeper配置文件,如下:

#   创建三份配置文件
cp conf/zoo_sample.cfg conf/zoo-1.cfg
cp conf/zoo_sample.cfg conf/zoo-2.cfg
cp conf/zoo_sample.cfg conf/zoo-3.cfg

在每份配置文件“conf/zoo_n.cfg”的末尾添加如下内容:

# 第一个端口为仲裁通信,第二个端口用于群首选举
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

群首选举很好理解,即选举ZooKeeper集群的主节点,由其来管理所有客户端的Session数据,而仲裁通信则用于确定备份、拷贝客户端协作数据znode的服务器数量,一般都基于多数原则(保存客户端数据的服务器的最小个数 > 服务器个数/2)

最后需要依次修改每个服务器为客户端提供服务的端口(配置项为clientPort)与数据存储目录地址,以“conf/zoo-1.cfg”为例:

#   每个服务器必须映射到不同的目录地址
#   例如本例中其他可设置为/var/zookeeper/z2/data,/var/zookeeper/z3/data
dataDir=/var/zookeeper/z1/data
#   设置监听客户端请求的端口,其它分别为2182,2183
clientPort=2181

2. 设置服务器ID

在每个服务器对应的数据目录下创建“myid”文件,并分别赋予服务器的ID信息,如服务器1的ID值为1,服务器2的ID值为2,依次类推,如下:

#   以服务器1为例
touch /var/zookeeper/z1/data/myid
#   创建ID值
echo 1 >  /var/zookeeper/z1/data/myid

3. 依次启动服务器实例

现在已经做完了所有的准备工作,可以依次启动服务器,每个服务器都是一个单独的JVM进程,如下:

#   启动服务器1
bin/zkServer.sh start conf/zoo-1.cfg
#   启动服务器2
bin/zkServer.sh start conf/zoo-2.cfg
#   启动服务器3
bin/zkServer.sh start conf/zoo-3.cfg

所有的服务器都启动完成后,我们可以通过以下3种方法观察启动是否正常:
1. 通过jps命令,观察启动的进程数量;
2. 通过安装目录下的zookeeper.out日志文件;
3. 通过zkServer的status命令,如下:

#   观察服务器是否正常
bin/zkServer.sh status conf/zoo-1.cfg

通过“bin/zkServer.sh status”不仅可以观察到服务器的进程状态,还可以观察本服务器是群首节点还是从节点,执行结果如下:

ZooKeeper JMX enabled by default
Using config: conf/zoo-1.cfg
#   反映节点的主从状态
Mode: follower

如果是群首节点,则Mode为“leader”。

在这里需要特别指出的是,无论是zkServer的start、restart命令,还是stop、status命令,都必须要明确地指定ZooKeeper配置文件,如停止服务器的命令如下:

#   停止服务器,必须要指定配置文件
bin/zkServer.sh stop conf/zoo-2.cfg

如果没有指定配置文件,则会提示如下错误:

Using config: conf/zoo.cfg
Stopping zookeeper ... no zookeeper to stop 
(could not find file /var/zookeeper/zookeeper_server.pid)

最后再强调一次,ZooKeeper配置文件决定ZooKeeper服务器实例。

5. 启动客户端

客户端是分布式协作任务处理的核心,打个简单的比方,ZooKeeper服务器就好比是数据库,而客户端就是我们开发的WEB应用程序,所以所有的任务都必然由客户端进行处理。

启动仲裁模式下的客户端命令如下,需要与之前配置的客户端端口保持一致:

#   需要指定所有的服务器地址与端口
bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

这里需要再次说明一下,客户端也可以启动多个实例,并且也会创建主从模式(由程序员自己决定),最最重要的是,这才是真正的分布式应用程序,以HBase为例,从ZooKeeper的角度看,ZooKeeper是服务器,而HBase是客户端,从HBase的用户角度看,HBase是服务器端,并且是主从结构,而ZooKeeper则是透明的。

结论

创建ZooKeeper的仲裁模式集群,可以提高ZooKeeper服务的健壮性,对于所有的分布式应用程序而言,ZooKeeper提供了全部的写作服务,简化了分布式应用程序的开发难度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值