单虚拟机搭建zookeeper分布式伪集群
1、zookeeper的来源和含义
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。顾名思义。分布式其实就是拆。将一个服务。拆分成多个服务。在保证系统服务功能完整的基础上,进行拆分。比如订单服务down掉了并不会影响整体功能的运行。而单体式服务会影响
早在90年代。计算机学家提出分布式cap定律。
c:一致性。读写一致性。客户端发出读或写请求。服务器返回/做出相应结果。
1、假如有a,b服务器。同时存储了数字1.
2、客户发出写请求:向a服务器写入2.覆盖掉数字1.(现在a服务器只有2)。
3、客户继续对a服务器发出读请求。如果服务器a没有挂掉。则返回数字2
4、但是如果这时候,客户端对b服务器发出读请求。由于没有往b上做写操作。所以只能读出1(其实客户是想读出2)
5、这就不满足一致性原理。。zookeeper则做了对应处理。当一个节点被改写后。对应其他尚可服务的节点都被改写。
a:可用性。zookeeper不满足高可用。满足2n-1选举策略。当超过一半以上节点挂掉。则判定整个zookeeper集群挂掉。票选机制必须满足单数票选。集群的服务器个数必须为3,5,7,9等。否则票数可能一样。选不出leader。
p:分区容错性:多个服务器可能分布在不同地域。不同地域的网络请求结果不一样。设计分布式系统时必须考虑。
所以普通的单体项目满足ca
分布式系统:满足ap和cp
三者不能同时满足
2、分布式集群搭建
因为服务器只有一个。所以单虚拟机搭建zk集群
1、apache官网下载zk包
zk
2、打开linux系统。切换root目录
mkdir zookeeper
3、将下载好的tar包解压至此目录
tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
4、将解压的目录移动至zookeeper1
mv apache-zookeeper-3.6.2-bin zookeeper1
5、编辑修改集群1
cd zookeeper1/
mkdir data
cd data
echo "1" > myid #集群第一个节点myid为1
cd ../
cd conf/
cp zoo_sample.cfg zoo.cfg #将zoo_sample拷贝为zoo.cfg
vi zoo.cfg
编辑zoo.cfg文件
修改dataDir为:dataDir=/zookeeper/zookeeper1/data
末尾追加三行:
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
6、编辑修改集群2
cd /zookeeper/
cp -r zookeeper1 zookeeper2
cp -r zookeeper1 zookeeper3
cd zookeeper2
echo "2" >data/myid
vi conf/zoo.cfg
编辑zoo.cfg文件
修改dataDir为:dataDir=/zookeeper/zookeeper2/data
修改clientPort=2182
7、编辑修改集群3
cd ../
cd zookeeper3
echo "3">data/myid
vi conf/zoo.cfg
编辑zoo.cfg文件
修改dataDir为:dataDir=/zookeeper/zookeeper3/data
修改clientPort=2183
8、分别启动集群三个节点
cd ../
sh /zookeeper/zookeeper1/bin/zkServer.sh start
sh /zookeeper/zookeeper2/bin/zkServer.sh start
sh /zookeeper/zookeeper3/bin/zkServer.sh start
9、查看集群节点运行状态
第一个集群
cd zookeeper1
./bin/zkServer.sh status
第二个集群
cd ../zookeeper2/
./bin/zkServer.sh status
第三个集群
cd ../zookeeper3/
./bin/zkServer.sh status
其中leader就是master节点
follower从节点
10、启动客户端
常规操作:
1、查询节点
2、新增节点
父节点不存在情况下创建不了子节点
这时候2181和2182同时也新增了这个节点
3、查询节点
4、编辑节点
5、创建子节点
子节点里有值
6、删除节点
7、递归删除节点(删除父节点和子节点)