zk原理
-
服务提供者启动时,会将其服务名称,ip地址注册到配置中心。
-
服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。当消费者调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从IP列表中取一个服务提供者的服务器调用服务。
-
当服务提供者的某台服务器宕机或下线时,相应的ip会从服务提供者IP列表中移除。同时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
-
当某个服务的所有服务器都下线了,那么这个服务也就下线了。
-
同样,当服务提供者的某台服务器上线时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
-
服务提供方可以根据服务消费者的数量来作为服务下线的依据。
Znode的类型
Znode被分为持久(persistent)节点,顺序(sequential)节点和临时(ephemeral)节点。
- 持久节点 - 即使在创建该特定znode的客户端断开连接后,持久节点仍然存在。默认情况下,除非另有说明,否则所有znode都是持久的。
- 临时节点 - 客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除。因此,只有临时节点不允许有子节点。如果临时节点被删除,则下一个合适的节点将填充其位置。临时节点在leader选举中起着重要作用。
- 顺序节点 - 顺序节点可以是持久的或临时的。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径。例如,如果将具有路径 /myapp 的znode创建为顺序节点,则ZooKeeper会将路径更改为 /myapp0000000001 ,并将下一个序列号设置为0000000002。如果两个顺序节点是同时创建的,那么ZooKeeper不会对每个znode使用相同的数字。顺序节点在锁定和同步中起重要作用。
Sessions(会话)
客户端以特定的时间间隔发送心跳以保持会话有效。如果ZooKeeper集合在超过服务器开启时指定的期间(会话超时)都没有从客户端接收到心跳,则它会判定客户端死机。
会话超时通常以毫秒为单位。当会话由于任何原因结束时,在该会话期间创建的临时节点也会被删除。
Zk集群搭建个人小结
1.首先测试单台zk,成功后,停掉zk,在ZK的bin目录执行命令:sh zkServer.sh stop
2.复制zoo.cfg文件为zoo1.cfg,zoo2.cfg,zoo3.cfg
3.在每个zooX.cfg后面修改端口clientPort=2181,clientPort=2182,clientPort=2183并在每个结尾添加
每个配置文件都要把这三行都加上去:
server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668
server.X=A:B:C
其中:
X是一个数字, 表示这是第几号server,它的值和myid文件中的值对应。
A是该server所在的IP地址。
B是配置该server和集群中的leader交换消息所使用的端口。
C配置选举leader时所使用的端口。
由于配置的是伪集群模式,所以各个server的B, C参数必须不同,如果是真正分布式集群,那么B和C在各个节点上可以相同,因为即使相同由于节点处于不同的服务器也不会导致端口冲突。
4.zookeeper集群模式下还要配置一个myid文件
echo 1 > /app/im/soft/zookeeper/zoo1
echo 2 > /app/im/soft/zookeeper/zoo1
echo 3 > /app/im/soft/zookeeper/zoo1
5.在根目录启动所有节点,命令是:
/app/im/soft/zookeeper-3.4.12/bin/zkServer.sh start /app/im/soft/zookeeper-3.4.12/conf/zoo1.cfg
/app/im/soft/zookeeper-3.4.12/bin/zkServer.sh start /app/im/soft/zookeeper-3.4.12/conf/zoo2.cfg
/app/im/soft/zookeeper-3.4.12/bin/zkServer.sh start /app/im/soft/zookeeper-3.4.12/conf/zoo3.cfg
6.查看节点启动情况,命令为:ps -ef|grep zookeeper
三个节点都运行,就是启动成功
以上就是ZK的集群搭建以及启动