vagrant搭建zk集群

/ 分布式

通过单机部署,我们应该熟悉了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 reloadvagrant up时同步。如果想一直同步,请执行vagrant rsync-auto命令。参考RSync同步类型详解

我们可以将jdkzk下载到共享文件中,这样三个虚拟机都可以共享资源。

使用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安装

JAVA_HOME=/home/vagrant/share/jdk1.8.0_221
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

zk安装

export ZOOKEEPER_HOME=/home/vagrant/share/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin
ZOO_LOG_DIR="/home/vagrant/zkData/logs"

zk集群搭建

# 心跳检测间隔
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

简单运维

zk通过发送一系列四字命令telnetnc客户端端口, 从而获得关于zk的状态信息。通过这些信息,我们可以对zk进行简单的监控和运维。

简单举例