ZooKeeper如何设置监视点

Zookeeper的API中的所有读操作:getData、getChildren和exists,均可以选择在读取的znode节点上设置监视点。使用监视点机制,需要实现Watcher接口类,实现其中的方法如下:

public void process(WatchedEvent event);

WatchedEvent数据结构包括以下信息:

  • Zookeeper会话状态(KeeperState):Disconnected、SyncConnected、AuthFailed、ConnectedReadOnly、SaslAuthenticated和Expired
  • 事件类型(EventType):NodeCreated、NodeDeleted、NodeDataChanged、NodeChildrenChanged和None
  • 如果事件类型不是None时,返回一个znode路径

其中前三个事件类型只涉及单个znode节点,第四个事件类型涉及监视的znode节点的子节点。使用None不是表示无事件发生,而是Zookeeper的会话状态发生了变化。

监视点有两种类型:数据监视点和子节点监视点。创建、删除或设置一个znode节点的数据都会触发数据监视点,exists和getData这两个操作可以设置数据监视点。只有getChildren操作可以设置子节点监视点,这种监视点只有在znode子节点创建或删除时才被触发。对于每种事件类型,可以通过以下调用设置监视点:

  • NodeCreated:通过exists调用设置一个监视点
  • NodeDeleted:通过exists或getData调用设置监视点
  • NodeDataChanged:通过exists或getData调用设置监视点
  • NodeChildrenChanged:通过getChildren调用设置监视点

当创建一个Zookeeper对象,需要传递一个默认的Watcher对象,Zookeeper客户端使用这个监视点来通知应用Zookeeper状态的变化情况,如会话状态的变化。对于ZooKeeper节点的事件的通知,可以使用默认的监视点,也可以单独实现一个。例如,getData调用有两种方式设置监视点:

public byte[] getData(final String path, Watcher watcher, Stat stat);
public byte[] getData(String path, boolean watch, Stat stat);

两个方法第一个参数均为znode节点,第一个方法传递一个新的Watcher对象,第二个方法则告诉客户端使用默认的监视点,只需要在调用时将第二个参数传递true。

stat入參為Stat类型的实例化对象,ZooKeeper使用该对象返回指定的path参数的znode节点信息。Stat结构包括znode节点的属性信息,如该znode节点的上次更新(zxid)的时间戳,以及该znode节点的子节点数。

对于监视点的一个重要问题是,一旦设置监视点就无法移除。要想移除一个监视点,只有两个方法,一是触发这个监视点,二是使其会话被关闭或过期

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
确保在使用 Keepalived 和 ZooKeeper 进行设置之前,您已经正确安装和配置了这两个软件。 首先,您需要在每个 Keepalived 节点上编辑 Keepalived 配置文件。通常,该文件位于 `/etc/keepalived/keepalived.conf` 或 `/etc/keepalived.conf`。打开此文件并进行以下配置: 1. 配置 Keepalived 全局参数: ``` global_defs { notification_email { your_email@example.com } notification_email_from keepalived@your_server smtp_server your_smtp_server smtp_connect_timeout 30 router_id your_router_id } ``` 将 `your_email@example.com` 替换为您要接收通知的电子邮件地址,将 `your_smtp_server` 替换为您的 SMTP 服务器地址,将 `your_router_id` 替换为唯一的路由器 ID。 2. 配置 Keepalived VRRP (虚拟路由冗余协议)实例: ``` vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass your_authentication_password } virtual_ipaddress { your_virtual_ip_address } } ``` 将 `eth0` 替换为您的网络接口名称,将 `your_authentication_password` 替换为用于认证的密码,将 `your_virtual_ip_address` 替换为您的虚拟 IP 地址。 3. 配置 Keepalived 的检测脚本。这些脚本用于监视 ZooKeeper 进程的状态,并在必要时执行故障转移: ``` notify_master /etc/keepalived/zookeeper-master.sh notify_backup /etc/keepalived/zookeeper-backup.sh notify_fault /etc/keepalived/zookeeper-fault.sh ``` 创建上述文件并为每个文件添加适当的脚本代码。这些脚本应该能够启动、停止或重启 ZooKeeper 服务。 在每个 Keepalived 节点上重复上述步骤,确保配置文件一致。 接下来,您需要配置 ZooKeeper 以支持故障转移。在每个 ZooKeeper 节点的 `zoo.cfg` 文件中,将以下参数添加到文件末尾: ``` server.1=your_zk_node1:2888:3888 server.2=your_zk_node2:2888:3888 server.3=your_zk_node3:2888:3888 ``` 将 `your_zk_node1`、`your_zk_node2` 和 `your_zk_node3` 替换为实际的 ZooKeeper 节点主机名或 IP 地址。 保存并关闭 `zoo.cfg` 文件。 最后,启动 Keepalived 和 ZooKeeper 服务,并验证配置是否正常工作。您可以通过检查 Keepalived 的日志文件和使用 `vrrpadm` 命令来监视 Keepalived 的状态,使用 `zkServer.sh status` 命令来检查 ZooKeeper 的状态。 请注意,这只是一个简单的示例配置,具体的设置可能因您的环境和需求而有所不同。请根据您自己的情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值