版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22067469/article/details/84674205
前言
由于本次搭建只有一台服务器,真实的集群是需要部署在不同的服务器上的,所以这次搭建伪集群
,把所有的服务都搭建到一台服务器上,用端口进行区分。
本次搭建一个三个节点的Zookeeper集群。
准备工作
1、安装JDK【此步骤省略】。
2、下载Zookeeper压缩包文件,上传到服务器,也可以使用命令下载
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
3、将Zookeeper解压,进到Zookeeper目录创建data目录,将conf下的zoo_sample.cfg文件改名为zoo.cfg
tar -xvzf zookeeper-3.4.10.tar.gz
cd zookeeper-3.4.10
mkdir data
cd conf
mv zoo_sample.cfg zoo.cfg
4、建立/usr/local/zookeeper-cluster
目录,将修改后的zookeeper复制到以下三个目录
mkdir /usr/local/zookeeper-cluster
cp -r zookeeper-3.4.10 /usr/local/zookeeper-cluster/zookeeper-1
cp -r zookeeper-3.4.10 /usr/local/zookeeper-cluster/zookeeper-2
cp -r zookeeper-3.4.10 /usr/local/zookeeper-cluster/zookeeper-3
5、配置每一个Zookeeper的conf目录下的zoo.cfg
文件的dataDir
、clientPort
。
- 修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
- 修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
- 修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
配置集群
1、在每个Zookeeper的data目录下创建一个 myid文件,内容分别为1、2、3。这个文件就是记录每个服务器的ID
当前目录为 zookeeper-cluster
echo 1 > zookeeper-1/data/myid
echo 2 > zookeeper-2/data/myid
echo 3 > zookeeper-3/data/myid
2、在每一个zookeeper的zoo.cfg配置客户端访问端口clientPort
和集群服务器IP列表。
解释 server.服务器ID=服务器ID地址:服务器之间通信端口:服务器之间投票选举端口
server.1=172.16.32.17:2881:3881
server.2=172.16.32.17:2882:3882
server.3=172.16.32.17:2883:3883
启动集群
1、 启动集群就是分别启动每个实例
zookeeper-1/bin/zkServer.sh start
zookeeper-2/bin/zkServer.sh start
zookeeper-3/bin/zkServer.sh start
2、启动后查看每一个实例的运行状态
- 第一个服务 Mode为
fllower
表示是跟随者(从) - 第二个服务 Mode为
leader
表示领导者(主) - 第三个服务 Mode为
fllower
跟随者(从)
模拟集群异常
1、首先我们测试如果从服务器挂掉。
- 把3号服务器停掉,观察1号和2号,发现状态并没有变化
因此得出结论,3个节点的集群,从服务器挂掉,集群正常
2、再把1号服务(从服务器)也停掉,查看2号(主服务器)的状态,发现已经停止运行了。
因此得出结论,3个节点的集群,2个从服务器挂掉,主服务器也无法运行。国为可运行的机器没有超过集群总数的半数。
3、再次把1号服务器启动起来,发现2号服务器又开始正常工作了。而且依然是领导者。
4、把3号服务器也启动起来,把2号服务器停掉(领导挂了)停掉后观察1号和3号的状态。
这时候发现了新的领导者(leader)
由此得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader。
5、再次测试,把2号服务器重新启动,启动后,会发现2号服务器并没有成为领导,看结果。
得出结论,2号服务器启动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者
。
Dubbox连接Zookeeper集群
修改服务提供者和服务调用的spring配置文件
<!-- 指定注册中心地址 -->
<dubbo:registry
protocol="zookeeper" address="119.29.181.129:2181,119.29.181.129:2182,119.29.181.129:2183">
</dubbo:registry>
总结
1、如果是云服务器,zoo.cfg里面的ip要是内网地址,不能是别名或者公网地址。
2、端口的防火墙必须开。