通过单机部署,我们应该熟悉了zk的基本操作,接下来我们将通过集群部署验证zk的选择模式、服务故障及恢复等特性。这里我们推荐使用vagrant+virtualBox的虚拟机搭建方式,当然也可以使用vmware等其他方式搭建。
vagrant 及 virtualBox 安装
Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.
vagrant是一个用于构建和管理虚拟机环境的高效开发工具。其次,vagrant是一个命令行工具,还可以通过Vagrantfile配置快速构建单个或多个虚拟机环境,从而免去了大量手工的配置步骤,对于开发人员来说极为方便。
virtualBox是甲骨文公司开发的一款小巧、高性能、免费的虚拟机产品。
通过vagrant和virtualBox的完美结合,使得我们可以在不同的平台快速搭建虚拟机环境。
Vagrantfile
Vagrant.configure("2") do |config|
(2..4).each do |i|
config.vm.define "node#{i}" do |node|
# 设置虚拟机的Box
node.vm.box = "centos/7"
# 设置虚拟机的主机名
node.vm.hostname="node#{i}"
# 设置虚拟机的IP
node.vm.network "private_network", ip: "172.16.0.#{i}"
# 设置共享文件夹
node.vm.synced_folder "./share", "/home/vagrant/share", create: true, owner: "root", group: "root", mount_options: ["dmode=755","fmode=644"], type: "rsync"
# VirtaulBox相关配置
node.vm.provider "virtualbox" do |v|
# 设置虚拟机的名称
v.name = "node#{i}"
# 设置虚拟机的内存大小
v.memory = 2048
# 设置虚拟机的CPU个数
v.cpus = 1
end
end
end
end
在初次执行上面的配置文件时,centos/7
镜像文件的下载可能会很慢,需要vpn加速下。
当然,你也可以选择其他镜像。
在执行完,上面操作后,我们将会得到名为node2
,node3
,node4
的三个虚拟机。且当前目录的share
文件夹的内容会共享到每个虚拟机/home/vagrant/share
下。
注意,文件的同步只会在vagrant reload
或vagrant up
时同步。如果想一直同步,请执行vagrant rsync-auto
命令。参考RSync同步类型详解。
我们可以将jdk
和zk
下载到共享文件中,这样三个虚拟机都可以共享资源。
使用vagrant up
,启动全部虚拟机后,为了方便集群测试,我们先关闭每个虚拟机的防火墙。
//查看firewall的状态
firewall-cmd --state
//停止firewall
systemctl stop firewalld.service
//禁止firewall开机启动
systemctl disable firewalld.service
如果,你想只开放部分端口,请自行进行防火墙设置。
开启ssh账密登录。默认账密为vagrant:vagrant
。
//修改/etc/ssh/sshd_config
PasswordAuthentication yes
//重启sshd服务
systemctl restart sshd
vagrant halt node2
,可以单独关闭node2虚拟机服务,关闭其他单个虚拟机,同此。
jdk安装
- 官网下载JDK安装包,打开官网下载。
- 将JDK解压至宿主机
./share
文件夹下 vagranr up
,启动虚拟机并配置JDK环境变量sudo vi /etc/profile
,添加如下环境变量,并刷新环境变量
JAVA_HOME=/home/vagrant/share/jdk1.8.0_221
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
java -version
,验证JDK安装
zk安装
- 官网下载安装包,建议安装稳定版。本次安装包为
zookeeper-3.4.9
。 - 解压至宿主机
./share
文件夹下。 - 添加环境变量至
/etc/
export ZOOKEEPER_HOME=/home/vagrant/share/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin
bin/zkEnv.sh
,修改日志输出目录如下
ZOO_LOG_DIR="/home/vagrant/zkData/logs"
zk集群搭建
- 添加文件,
conf/zoo.cfg
# 心跳检测间隔
tickTime=2000
# 主节点等待子节点启动建立连接并同步数据的超时时间
initLimit=10
# 心跳检测的最大延时时间
syncLimit=2
# zk数据存放目录
dataDir=/home/vagrant/zkData
# zk客户端端口号
clientPort=2181
# 集群配置 端口解释: ip:数据同步:leader选举
server.2=172.16.0.2:2888:3888
server.3=172.16.0.3:2888:3888
server.4=172.16.0.4:2888:3888
-
在每个虚拟机
/home/vagrant/
下新建zkData
目录 -
在
/home/vagrant/zkData/
下,新建myid
文件,并分别写入上述zoo.cfg
配置的serverid。这里建议,node2
写入2
,node3
写入3
,node4
写入4
。方便记忆。 -
启动集群
zkServer.sh start
,启动节点zkServer.sh stop
,关闭节点zkServer.sh status
,查看节点状态
简单运维
zk通过发送一系列四字命令telnet
或nc
客户端端口, 从而获得关于zk的状态信息。通过这些信息,我们可以对zk进行简单的监控和运维。
简单举例
-
conf
- 功能 详细的打印zk服务配置
- 命令
sudo conf | nc localhost 2181
-
envi
- 功能 返回zk服务的运行环境信息
- 命令
sudo envi | nc localhost 2181
-
mntr
- 功能 返回一组zk的监控参数
- 命令
sudo mntr | nc localhost 2181
-
stat
- 功能 列出服务器和连接的客户端的简要详细信息
- 命令
sudo stat | nc localhost 2181
-
更多命令,请参考官方四字命令指南
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名,转载请标明出处
最后编辑时间为:
2019-09-13