ZooKeeper集群部署

  1. 规划节点

|----------------|------------|------|
| IP | 主机名 | 节点 |
| 192.168.100.10 | zookeeper1 | 集群节点 |
| 192.168.100.20 | zookeeper2 | 集群节点 |
| 192.168.100.30 | zookeeper3 | 集群节点 |

  1. 基础准备

使用VMWare Workstation软件安装CentOS 7.2操作系统,镜像使用提供的CentOS- 7-x86_64-DVD-1511.iso,最小化安装CentOS 7.2系统,安装基础环境。

(1)主机名配置

使用secureCRT对3台云主机进行连接。 3个节点修改主机名为zookeeper1、zookeeper2、zookeeper3,命令如下:

zookeeper1节点:

bash 复制代码
[root@localhost ~]# hostnamectl set-hostname zookeeper1
[root@localhost ~]# su

zookeeper2节点:

bash 复制代码
[root@localhost ~]# hostnamectl set-hostname zookeeper2
[root@localhost ~]# su

zookeeper3节点:

bash 复制代码
[root@localhost ~]# hostnamectl set-hostname zookeeper3
[root@localhost ~]# su

(2)配置hosts文件

3个节点修改/etc/hosts文件,3个节点均修改成如下代码所示:

bash 复制代码
[root@zookeeper1 ~]# vi /etc/hosts
[root@zookeeper1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 zookeeper1
192.168.100.20 zookeeper2
192.168.100.30 zookeeper3
[root@zookeeper1 ~]systemctl stop firewalld ##三个节点的防火墙都要关闭
[root@zookeeper1 ~]# setenforce 0
[root@zookeeper1 ~]# scp /etc/hosts root@192.168.100.20:/etc/hosts
[root@zookeeper1 ~]# scp /etc/hosts root@192.168.100.30:/etc/hosts

(3)配置YUM源

将提供的gpmall-repo目录上传至3个节点的/opt目录下,首先将3个节点/etc/yum.repo.d目录下 的文件移动到/media目录下,命令如下

bash 复制代码
mv /etc/yum.repos.d/* /media/

在3个节点上创建/etc/yum.repo.d/local.repo,文件内容如下:

bash 复制代码
# mkdir /opt/centos
# mount /dev/sr0 /opt/centos/
# vi /etc/yum.repos.d/local.repo
# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[gpmall]
name=gpmall
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1

. 搭建ZooKeeper集群

(1)安装JDK环境

3个节点安装Java JDK环境,3个节点均执行命令如下:

bash 复制代码
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
bash 复制代码
# java -version
openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

(2)解压ZooKeeper软件包

将zookeeper-3.4.14.tar.gz软件包上传至3个节点的/opt目录下,进行解压操作,3个节点均执行 命令如下

bash 复制代码
# cd /opt/
# tar -zxvf zookeeper-3.4.14.tar.gz -C /root/

(3)修改3个节点配置文件

在zookeeper1节点,进入zookeeper-3.4.14/conf目录下,修改zoo_sample.cfg文件为zoo.cfg, 并编辑该文件内容如下:

bash 复制代码
[root@zookeeper1 opt]# cd
[root@zookeeper1 ~]# cd zookeeper-3.4.14/conf/
[root@zookeeper1 conf]# mv zoo_sample.cfg zoo.cfg
[root@zookeeper1 conf]# vi zoo.cfg
[root@zookeeper1 conf]# grep -n '^'[a-Z] zoo.cfg
2:tickTime=2000
5:initLimit=10
8:syncLimit=5
12:dataDir=/tmp/zookeeper
14:clientPort=2181
29:server.1=192.168.100.10:2888:3888
30:server.2=192.168.100.20:2888:3888
31:server.3=192.168.100.30:2888:3888

命令解析:

initLimit:

ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。当 follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader 很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。

syncLimit:

配置follower和leader之间发送消息,请求和应答的最大时间长度。

tickTime:

tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间 为 2000ms * 5 = 10秒。

server.id=host:port1:port2:

其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。host是该zk进 程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的 端口。

dataDir:

其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内 容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的 id。

注意:zookeeper2和zookeeper3节点的操作与修改的配置和zookeeper1节点一样。

(4)创建myid文件

在3台机器dataDir目录(此处为/tmp/zookeeper)下,分别创建一个myid文件,文件内容分别 只有一行,其内容为1,2,3。即文件中只有一个数字,这个数字即为上面zoo.cfg配置文件中指定的值。 ZooKeeper是根据该文件来决定ZooKeeper集群各个机器的身份分配。

创建myid文件,命令如下:

zookeeper1节点:

bash 复制代码
[root@zookeeper1 ~]# mkdir /tmp/zookeeper
[root@zookeeper1 ~]# vi /tmp/zookeeper/myid
[root@zookeeper1 ~]# cat /tmp/zookeeper/myid
1

zookeeper2节点:

bash 复制代码
[root@zookeeper2 ~]# mkdir /tmp/zookeeper
[root@zookeeper2 ~]# vi /tmp/zookeeper/myid
[root@zookeeper2 ~]# cat /tmp/zookeeper/myid
2

zookeeper3节点:

bash 复制代码
[root@zookeeper3 ~]# mkdir /tmp/zookeeper
[root@zookeeper3 ~]# vi /tmp/zookeeper/myid
[root@zookeeper3 ~]# cat /tmp/zookeeper/myid
3

(5)启动ZooKeeper服务

在3台机器的zookeeper-3.4.14/bin目录下执行命令如下:

zookeeper1节点:

bash 复制代码
[root@zookeeper1 bin]# systemctl stop firewalld
[root@zookeeper1 bin]# setenforce 0
[root@zookeeper1 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

zookeeper2节点:

bash 复制代码
[root@zookeeper3 bin]# systemctl stop firewalld
[root@zookeeper3 bin]# setenforce 0
[root@zookeeper3 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

zookeeper3节点:

bash 复制代码
[root@zookeeper1 bin]# systemctl stop firewalld
[root@zookeeper1 bin]# setenforce 0
[root@zookeeper1 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

可以看到,3个节点,zookeeper1为leader,其他的都是follower。至此,ZooKeeper集群配置 完毕。

注意:查看状态出现问题时,所有节点都启动一下,再查看状态。

相关推荐
Themberfue几秒前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
深山夕照深秋雨mo9 分钟前
在Java中操作Redis
java·开发语言·redis
努力的布布15 分钟前
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
java·后端·spring
xujinwei_gingko15 分钟前
Spring MVC 常用注解
java·spring·mvc
PacosonSWJTU20 分钟前
spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
java·后端·springmvc
PacosonSWJTU22 分钟前
spring揭秘26-springmvc06-springmvc注解驱动的web应用
java·spring·springmvc
原野心存1 小时前
java基础进阶——继承、多态、异常捕获(2)
java·java基础知识·java代码审计
进阶的架构师1 小时前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构
木子02041 小时前
java高并发场景RabbitMQ的使用
java·开发语言