1、安装虚拟机
安装方法可以参考这篇博客 这里安装三台centos7虚拟机,安装完成后效果如下:  为方便控制,这里将虚拟机网络配置为桥接模式,首先在虚拟机设置里面将网络连接改为桥接模式  然后进入虚拟机,修改以下/etc/sysconfig/network-scripts/ifcfg-eno33 这个文件的内容进行设置(ifcfg-eno33 这个文件名因机器而异,需要根据自己的电脑进行修改):
cd /etc/sysconfig/network-scripts/ #先切换到对应的目录
ls #查看当前目录下的文件,找到自己的网卡编号
 我这里网卡编号是eno33,对这个文件内容进行修改
vi ifcfg-ens33 #使用vi打开此文件,并修改里面的内容
桥接模式下,将此文件改为如下内容:
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33 #网卡设备名,与自己机器对应
ONBOOT=yes
IPADDR=192.168.1.120 #此虚拟机的ip地址,自己手动分配,注意不要使用已被其他机器占用的ip地址
NETMASK=255.255.255.0 #子网掩码,根据所在局域网确定
GATEWAY=192.168.1.1 #网关,根据所在局域网确定
DNS1=8.8.8.8
这里的ip地址、子网掩码、网关要根据自己宿主机所在的局域网而定,具体获取方式:打开windows的cmd窗口,输入ipconfig即可得到,如下图所示:   得到默认网关和子网掩码照抄就行,我这里ip地址的格式为192.168.1.x,x为1-254的数,本机已经是104,为减小冲突的概率,尽量选大点,我这里三台虚拟机就选择了130,131,132。 为方便操作,使用xshell连接这三台虚拟机
2、安装xsync
拥有集群之后,需要让它们开始干活,还得安装一堆软件,再进行一堆配置,一个一个的弄显然不太优雅,而使用xsync可以一键将文件同步到集群的所有节点上。 xsync安装可以参考这篇博客 配置可以参考这篇博客,主要是配置免密登录 简化版配置: 设置集群节点名及对应地址:
vi /etc/hosts #打开配置文件
# 插入如下内容 ip地址:节点名 此处节点名可以自己修改
192.168.1.130 host001
192.168.1.131 host002
192.168.1.132 host003
vi /bin/xsync #创建命令文件
文件内容如下:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in host001 host002 host003
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
修改脚本 xsync 具有执行权限
chmod +x xsync
3、下载安装zookeeper
先安装一台机器,然后用xsync同步到其他节点,再分别改下配置就行啦 单机安装zookeeper见这个教程 运行zookeeper需要先安装jdk,安装教程参考这篇博客 下载安装zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
mv apache-zookeeper-3.6.3-bin zookeeper-3.6.3
4、配置zookeeper集群
详细配置可以参考这篇博客
cd zookeeper-3.6.3
mkdir zkData
cd zkData
vi myid
1
cd ../..
xsync zookeeper-3.6.3/
修改配置文件
cd zookeeper-3.6.3/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改的内容如下:
dataDir=/opt/zookeeper/zookeeper-3.6.3/zkData
server.1=host001:2888:3888
server.2=host002:2888:3888
server.3=host003:2888:3888
配置参数解读
server.A=B:C:D
A 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。 B 是这个服务器的地址; C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口; D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
xsync zoo.cfg
cd ..
5、集群操作
(1)启动前需要关闭防火墙(生产环境需要打开对应端口)
systemctl stop firewalld
(2)分别启动 Zookeeper
bin/zkServer.sh start
(3)分别查看各节点状态
bin/zkServer.sh status
三台机器都启动后,看到的状态如下,有一个leeder,两个folower    (5)关闭节点
bin/zkServer.sh stop
6、同步操作
上面的集群一个一个的启动虽然可以,但这也太麻烦了,还很不优雅,可以写一个脚本来一键对所有节点进行操作 vi zk.sh #创建脚本,并写入如下内容
#!/bin/bash
case $1 in
"start"){
for i in host001 host002 host003
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/zookeeper/zookeeper-3.6.3/bin/zkServer.sh start"
done
};;
"stop"){
for i in host001 host002 host003
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/zookeeper/zookeeper-3.6.3/bin/zkServer.sh stop"
done
};;
"status"){
for i in host001 host002 host003
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/zookeeper/zookeeper-3.6.3/bin/zkServer.sh status"
done
};;
esac
执行脚本:
./zk.sh start
./zk.sh status
./zk.sh stop
执行后有可能会报错 JAVA_HOME not found,但已经安装了jdk,此时需要改一下配置,参考这篇博客,在配置中加入JAVA_HOME ,具体操作:
vi zookeeper-3.6.3/bin/zkEnv.sh
JAVA_HOME=/opt/java8/jdk1.8.0_331/
 然后同步一下该文件
xsync zookeeper-3.6.3/bin/zkEnv.sh
xsync zk.sh
此时再运行./zk.sh status 就好啦 
|