Zookeeper动态扩容详细步骤

上一篇文章分析了动态扩容的方法,并没有给出详细步骤,这次给出扩容的详细步骤。 首先分两种情况,第一种情况是以前是单机状态,现在将其扩展为多个机器的集群状态。另一种情况是以前是集群状态,现在扩展为更多的集群状态。

单机扩展

步骤

  1. 首先假设原机器ip为{OLD_SERVER},新机器为2台,{NEW_SERVER1}、{NEW_SERVER2},zookeeper的安装目录为{ZOO_HOME}新机器的安装目录尽量和原机器保持一致,这样configure文件就可以统一管理,在所有机器上保持一致。
  2. 在新机器{NEW_SERVER1}、{NEW_SERVER2}上,下载解压合适的zookeeper版本到指定目录。 cd {ZOO_HOME} tar -xvf zookeeper-3.4.6.tar
  3. 原机器zookeeper中的zoo.cfg文件复制到2台新机器的conf文件夹下。 ssh {OLD_SERVER} cd {ZOO_HOME}/zookeeper-3.4.6/conf scp zoo.cfg {USERNAME}@{NEW_SERVER1}:/{ZOO_HOME}/conf/ scp zoo.cfg {USERNAME}@{NEW_SERVER2}:/{ZOO_HOME}/conf/
  4. 进入到新机器,打开zoo.cfg文件,看是否有配置server项。类似server.x=:xxxxxxxx:xxxx:xxxx,如果有的话,将其删除,文件后面追加 server.0={ODL_SERVER}:2888:3888 server.1={NEW_SERVER1}:2888:3888 server.2={NEW_SERVER2}:2888:3888 其中,*server.0、server.1、server.2*中0、1、2代表的是zookeeper的id,下面会用到。这里指定新机器{NEW_SERVER1}的id为1,{NEW_SERVER2}的id为2,原机器的id为0。
  5. 检查zoo.cfg文件中dataDir配置项的值,一般情况下等于{ZOO_HOME}。在{NEW_SERVER1}上,进入{dataDir}目录,新建myid文件,将上面的id写入文件。由于{NEW_SERVER1}配置的id是1,则在myid文件中写入1。 ssh {NEW_SERVER1} cd {dataDir} vim myid i 1 (Esc) :wq 在{NEW_SERVER2}上,myid文件中写入2。 ssh {NEW_SERVER2} cd {dataDir} vim myid i 2 (Esc) :wq
  6. 依次连接到新机器{NEW_SERVER1}、{NEW_SERVER2}上,进入bin文件夹下启动zookeeper。 cd {ZOO_HOME}/bin ./zkServer.sh start
  7. 查看zookeeper状态,检查zookeeper.out文件。一般情况会提示It is probably not running.,而且zookeeper.out文件里面会提示端口连接的错误,不用理会。 ./zkServer.sh status
  8. 连接到原机器,将新的 zoo.cfg文件拷贝到原机器上,也就是所有机器的配置文件保持一致
  9. 进入{dataDir}目录,查看是否有myid文件,有的话将其删除,将原机器的id写入myid文件。由于原机器配置的id是0,则在myid文件中写入0。
  10. 进入bin文件夹下重启zookeeper。 cd {ZOO_HOME}/bin ./zkServer.sh restart

zookeeper重启时会有短暂的停止服务,在此期间所有依赖zookeeper的系统都会停止服务,比如storm和kafka。不过这个重启过程不会很长,重启之后就恢复正常了。

大功告成

这个时候在新旧机器上运行./zkServer.sh status命令,可以看到,有1个leader,2个follower。这时表明zookeeper已经由单机模式扩展为3台机器构成的集群模式了。

之后要做的就是在所有使用到zookeeper的地方,将以前单机的server地址替换3台机器所有的server地址就可以了。

集群扩展

由于zookeeper的特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。所以我们假设所有集群的数量都是奇数,我们以原集群是3台机器,现在将其扩展为5台为例。

步骤

  1. 首先假设原机器ip为{OLD_SERVER1}、{OLD_SERVER2}、{OLD_SERVER3},新机器为2台,{NEW_SERVER4}、{NEW_SERVER5},zookeeper的安装目录为{ZOO_HOME}新机器的安装目录与原机器保持一致
  2. 在新机器{NEW_SERVER4}、{NEW_SERVER5}上,下载解压合适的zookeeper版本到指定目录。 cd {ZOO_HOME} tar -xvf zookeeper-3.4.6.tar
  3. 我们假设原机器上所有的zoo.cfg文件是一致的。将任意一台原机器zookeeper中的zoo.cfg文件复制到2台新机器的conf文件夹下。 ssh {OLD_SERVER1} cd {ZOO_HOME}/zookeeper-3.4.6/conf scp zoo.cfg {USERNAME}@{NEW_SERVER4}:/{ZOO_HOME}/conf/ scp zoo.cfg {USERNAME}@{NEW_SERVER5}:/{ZOO_HOME}/conf/
  4. 进入2台到新机器,打开zoo.cfg文件,查看配置server项,一般情况server信息如下: server.1={ODL_SERVER1}:2888:3888 server.2={ODL_SERVER2}:2888:3888 server.3={ODL_SERVER3}:2888:3888
  5. 将2台新机器的id和ip、端口号等追加到文件末尾,则上述server信息修改为: server.1={ODL_SERVER1}:2888:3888 server.2={ODL_SERVER2}:2888:3888 server.3={ODL_SERVER3}:2888:3888 server.4={NEW_SERVER4}:2888:3888 server.5={NEW_SERVER5}:2888:3888 其中,4、5为新机器的id。
  6. 在{NEW_SERVER4}、{NEW_SERVER5}上,进入{dataDir}目录,新建myid文件,将上面的id写入文件。
  7. 依次连接到新机器{NEW_SERVER4}、{NEW_SERVER5},进入bin文件夹下启动zookeeper。 cd {ZOO_HOME}/bin ./zkServer.sh start
  8. 启动后使用命令./zkServer.sh status查看zookeeper状态。和单机模式下不同的是,这个时候,可以看到,新机器的模式为follower,而且没有出错。
  9. 依次连接到原机器,将新的zoo.cfg文件拷贝到原机器上,也就是所有机器的配置文件保持一致
  10. 依次连接到原机器{ODL_SERVER1}、{ODL_SERVER2}、{ODL_SERVER3},对zookeeper进行重启。并且需要确保一台机器启动成功后,再重启下一台机器。 cd {ZOO_HOME}/bin ./zkServer.sh restart

大功告成

由于每个时刻只有一台机器会停止服务,所以整个集群中是有过半的机器正常工作的。所以整个集群在重启期间也是可以正常对外工作,对用户来说这个重启过程是无感知的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小怪聊职场

MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化

774100
来自专栏性能与架构

HBase 的表结构

HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的 关系型数据库的表结构 为了更...

471130
来自专栏程序小工

MySQL数据库常见名词对比

MySQL 由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在 Internet 上的中小型网站中。随着 MySQL 的不断成熟,它也...

15930
来自专栏aoho求索

MySQL探秘(二):SQL语句执行过程详解

 昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化...

27610
来自专栏JavaEdge

1 SQL查询优化1. 获取有性能问题SQL的方法2.慢查询日志介绍3. 实时获取3.SQL的解析预处理及生成执行计划4 对特定SQL的查询优化

39370
来自专栏维C果糖

史上最简单的 MySQL 教程(三十四)「视图(下)」

视图数据操作:虽然我们说视图可以称之为select语句的别名,但实际上,它和别名并不一样,因为视图是可以进行数据写操作的,只不过有很多限制而已。

405120
来自专栏王磊的博客

mssql 字增自段怎样重置(重新自增)|清空表已有数据

方法1 -- 清空已有数据,并且将自增自段恢复从1开始计数  truncate table 表名  方法2 -- 不清空已有数据,但将自增自段恢复从1开始计数...

297100
来自专栏Java架构师历程

MYSQL 浅谈MyISAM 存储引擎

       mysql中用的最多存储引擎就是innodb和myisam。做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对《高性能MYSQ...

89720
来自专栏后端技术探索

mysql新特性

oracle官方发布的基准测试声明:In benchmark tests using SysBench Read-only Point-Selects, at ...

11230
来自专栏Java3y

Oracle总结【视图、索引、事务、用户权限、批量操作】

前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了…那么本篇主要总结关于Oralce视图、序列、事务的一些内容… 在数据库中,我们...

41940

扫码关注云+社区

领取腾讯云代金券