在至少有一个Leader存在的前提下,进行Zookeeper在线增量在线减量在线迁移

在全过程中ZooKeeper不停止服务

注意事项

首先,当我们要从3台扩充到5台时,应保证集群不停止服务。

3台不停止服务的最低限度是2台X/2+1),而5台的最低限度是3台

  • 我们应该保证,集群中最低有3台ZooKeeper是启动的。

  • 此外,重启时应保证先重启myid最小的机器,由小向大进行重启

  • Leader无论其myid大小,都放到最后重启

因为ZooKeeper的机制中,myid大的会向小的发起连接,而小的不会向大的发起连接。因此如果最后重启myid最小的机器,则其可能无法加入集群

环境情况

五台机器

IP Hostname
10.1.24.110 idc02-kafka-ds-00
10.1.24.111 idc02-kafka-ds-01
10.1.24.112 idc02-kafka-ds-02
10.1.24.113 idc02-kafka-ds-03
10.1.24.114 idc02-kafka-ds-04

JDK

jdk1.7.0_67

ZooKeeper

zookeeper-3.4.6

myid

根据IP自增为1-5

配置文件

 
1
2
3
4
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
 

实验过程

配置一个3节点的ZooKeeper

idc02-kafka-ds-00

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-00bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

idc02-kafka-ds-01

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-01 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
 

idc02-kafka-ds-02

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

将其扩容为5节点的ZooKeeper

先查看原先的ZooKeeper集群情况

echo mntr|nc localhost 2181

这条4字命令可以查看集群的情况,其中follower的相关数据需要在Leader机器上才能查看

idc02-kafka-ds-01上查看

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hadoop@idc02-kafka-ds-01 bin]$ echo mntr|nc localhost 2181
zk_version  3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received 3
zk_packets_sent 2
zk_num_alive_connections    1
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count 0
zk_approximate_data_size    27
zk_open_file_descriptor_count   27
zk_max_file_descriptor_count    65535
zk_followers    2
zk_synced_followers 2
zk_pending_syncs    0
 

启动另外两台机器的Zookeeper

另外两台机器的配置文件

 
1
2
3
4
5
6
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
server.4=10.1.24.113:2888:3888
server.5=10.1.24.114:2888:3888
 

启动

idc02-kafka-ds-03

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-03 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
 

idc02-kafka-ds-04

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-04bin]# ./zkServer.sh status
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

再查看集群情况

仍然在idc02-kafka-ds-01上查看

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hadoop@idc02-kafka-ds-01 bin]$ echo mntr|nc localhost 2181
zk_version  3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received 4
zk_packets_sent 3
zk_num_alive_connections    1
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count 0
zk_approximate_data_size    27
zk_open_file_descriptor_count   31
zk_max_file_descriptor_count    65535
zk_followers    4
zk_synced_followers 4
zk_pending_syncs    0
 

可以看到zk_followers4,连接到的follower2变为4

而且zk_synced_followers4,说明新加入的2个也都同步好了

接下来我们滚动重启myid1-3的前三台机器

先处理idc02-kafka-ds-00

关闭

如不放心请在关闭其间于Leader机器或后加入的两台机器上监控日志

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-00bin]$./zkServer.shstop
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stoppingzookeeper...STOPPED
 
修改其配置文件

由原来的

 
1
2
3
4
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
 

到新的

 
1
2
3
4
5
6
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
server.4=10.1.24.113:2888:3888
server.5=10.1.24.114:2888:3888
 
启动
 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-00 bin]$ ./zkServer.sh start
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@idc02-kafka-ds-00 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
 

然后跳过作为Leaderidc02-kafka-ds-01,先处理idc02-kafka-ds-02

关闭
 
1
2
3
4
5
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstop
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stoppingzookeeper...STOPPED
 
修改配置文件
 
1
2
3
4
5
6
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
server.4=10.1.24.113:2888:3888
server.5=10.1.24.114:2888:3888
 
启动
 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstart
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Startingzookeeper...STARTED
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

最后处理原Leaderidc02-kafka-ds-01

关闭
 
1
2
3
4
5
[hadoop@idc02-kafka-ds-01 bin]$ ./zkServer.sh stop
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
 
查看新Leader

ZooKeeper会尽可能的选择myid最大的机器为Leader,因此原本的idc02-kafka-ds-04myid5变为了Leader

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-04bin]# ./zkServer.sh status
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:leader
 
修改配置文件
 
1
2
3
4
5
6
server.1=10.1.24.110:2888:3888
server.2=10.1.24.111:2888:3888
server.3=10.1.24.112:2888:3888
server.4=10.1.24.113:2888:3888
server.5=10.1.24.114:2888:3888
 
启动
 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-01bin]$./zkServer.shstart
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Startingzookeeper...STARTED
[hadoop@idc02-kafka-ds-01bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

在新的Leader上查看集群情况

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hadoop@idc02-kafka-ds-04 bin]# echo mntr|nc localhost 2181
zk_version  3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  1
zk_max_latency  4
zk_min_latency  0
zk_packets_received 12
zk_packets_sent 11
zk_num_alive_connections    1
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count 0
zk_approximate_data_size    27
zk_open_file_descriptor_count   33
zk_max_file_descriptor_count    65535
zk_followers    4
zk_synced_followers 4
zk_pending_syncs    0
 

一切正常

到这里,我们已经将原本的3台扩展到了5台,成功了一半。

然后只要将现在的5台再缩小到3台且不包括原本myid1-2的机器,就完成了迁移

将5台缩小回3台

修改idc02-kafka-ds-02

根据前面的注意事项,我们此时5台集群中启动的数量不得少于3台,因此我们需要先修改3-5号机器的配置文件为3台,再关闭1-2号机器

关闭

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstop
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stoppingzookeeper...STOPPED
 

修改配置文件为

 
1
2
3
4
server.3=10.1.24.110:2888:3888
server.4=10.1.24.111:2888:3888
server.5=10.1.24.112:2888:3888
 

启动

 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstart
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Startingzookeeper...STARTED
[hadoop@idc02-kafka-ds-02bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

然后修改idc02-kafka-ds-03

关闭

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-03 bin]# ./zkServer.sh stop
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
 

修改配置文件为

 
1
2
3
4
server.3=10.1.24.110:2888:3888
server.4=10.1.24.111:2888:3888
server.5=10.1.24.112:2888:3888
 

启动

 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-03 bin]$ ./zkServer.sh start
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@idc02-kafka-ds-03 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
 

最后修改idc02-kafka-ds-04

关闭

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-04bin]$./zkServer.shstop
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stoppingzookeeper...STOPPED
 

关闭后Leader移动到了myid第二大的idc02-kafka-ds-02

修改配置文件为

 
1
2
3
4
server.3=10.1.24.110:2888:3888
server.4=10.1.24.111:2888:3888
server.5=10.1.24.112:2888:3888
 

启动

 
1
2
3
4
5
6
7
8
9
[hadoop@idc02-kafka-ds-04bin]$./zkServer.shstart
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Startingzookeeper...STARTED
[hadoop@idc02-kafka-ds-04bin]$./zkServer.shstatus
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode:follower
 

Leader中查看

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hadoop@idc02-kafka-ds-03 bin]$ echo mntr|nc localhost 2181
zk_version  3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received 4
zk_packets_sent 3
zk_num_alive_connections    1
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count 0
zk_approximate_data_size    27
zk_open_file_descriptor_count   27
zk_max_file_descriptor_count    65535
zk_followers    2
zk_synced_followers 2
zk_pending_syncs    0
 

此时的zk_followers为2,说明Leader已经不认1-2号机器了

关闭1-2号机器

关闭idc02-kafka-ds-00

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-00bin]$./zkServer.shstop
JMXenabledbydefault
Usingconfig:/usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stoppingzookeeper...STOPPED
 

关闭idc02-kafka-ds-01

 
1
2
3
4
5
[hadoop@idc02-kafka-ds-01 bin]$ ./zkServer.sh stop
JMX enabled by default
Using config: /usr/local/webserver/zookeeper-3.4.6/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
 

再查看

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hadoop@idc02-kafka-ds-03bin]$echomntr|nclocalhost2181
zk_version  3.4.6-1569965,builton02/20/201409:09GMT
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received5
zk_packets_sent4
zk_num_alive_connections    1
zk_outstanding_requests0
zk_server_stateleader
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count0
zk_approximate_data_size    27
zk_open_file_descriptor_count  27
zk_max_file_descriptor_count    65535
zk_followers    2
zk_synced_followers2
zk_pending_syncs    0
 

没有任何影响

实验成功

ZooKeeper在线迁移的更多相关文章

  1. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  2. Oracle 12C 新特性之表分区或子分区的在线迁移

    Oracle 12c 中迁移表分区或子分区到不同的表空间不再需要复杂的过程.与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间.当指定了 ONLINE 语句,所 ...

  3. Redis Cluster高可用集群在线迁移操作记录【转】

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  4. OpenStack平台虚拟机实例在线迁移失败问题

    一.在线迁移时提示如下的报错 二.原因分析 通过kolla-ansible部署queens版本时,因为OEM的机器设备的UUID记录的一致,导致迁移时识别的是自身机器的UUID,导致迁移失败 三.问题 ...

  5. Redis Cluster 4.0高可用集群安装、在线迁移操作记录

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  6. Redis Cluster在线迁移

    由于之前的redis cluster物理硬件性能不足.决定升级到更好的服务器上.考虑到redis是核心生产数据库,决定在线迁移,迁移过程,不中断服务. 下面是测试环境的完成迁移步骤:1. 原环境(测试 ...

  7. Redis Cluster高可用集群在线迁移操作记录

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  8. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

  9. 开启vmotion,实现虚拟机可以在线迁移的选项

    先决条件: 1.vcenter5.5 2.vmotion服务开启 3.分布式交换机已经部署完毕 4.虚拟机在线迁移必须在web管理下,在vclient不可以

随机推荐

  1. git实验

    四.实例应用 应用1.现有项目移植到git代管 进入目标项目,进行git初始化: 初始化:git init 修改config:git config -- local user.name '名称'  和 ...

  2. Phonegap 环境配置

    目前要开发 Web App 还是有比较多的选择的 如 Phonegap.MUI.AppCan,接下来以 Web前端开发工程师 的角度来一个 Phonegap 的 First Blood 一.开发环境: ...

  3. 第四周作业——C语言自评

    1.你对自己的未来有什么规划?做了哪些准备?以目前的现状来说,希望至少能够掌握专业所要求的基本操作,然后一步步去深入.提升,毕业之后不会灰溜溜的一次次求职失败.目前更多的是利用闲暇时间补回过去老师同学 ...

  4. 使用rand替换random模块

    random模块使用相同的种子,在不同的进程中会出现相同的结果. rand的模块使用不同的种子,在不同的进程中不会出现相同的结果. 2个模块都是erlang自带的. 然后erlang在文档里面注明推荐 ...

  5. iptables 工具的使用

    试验建议:关闭CentOS 7 或 CentOS 6的防火墙 (systemctl stop firewalld ; systemctl disable firewalld 或 service ipt ...

  6. NLP 入门

    作者:微软亚洲研究院链接:https://www.zhihu.com/question/19895141/answer/149475410来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  7. linux下c/c++的文件操作

    opendir,readdir,closedir, stat()查询文件状态 open(), O_TRUNC这个Flag会把打开的文件清零... 文件锁:fcntl, F_GETLK , F_SETL ...

  8. HDU4045_Machine scheduling

    题意为要你从编号为1-n的所有机器中间选择出r个机器且每一个机器的编号只差不小于k-1,然后将选择的r个机器分为m组有多少种方案. 其实这题目的两个步骤是相互独立的. 总共的方案数等于选择的方案数乘以 ...

  9. (转)Nginx图片服务器

    本文转至博客http://wenxin2009.iteye.com/blog/2117079 Nginx搭建图片服务器 Nginx下载地址:http://nginx.org/en/download.h ...

  10. vue使用过程中的一些小技巧

    这些也是自己平时项目中遇到过的一些问题,看到有人整理了出来,也就转载保存一下 文章内容总结: 组件style的scoped Vue 数组/对象更新 视图不更新 vue filters 过滤器的使用 列 ...