“看门狗”是一个 pgpool-II 的子进程,用于为 pgpool-II 添加高可用性功能。看门狗添加的功能包括:
看门狗监控 pgpool 的服务而不是进程。它通过被看门狗监控的 pgpool 发送查询到 PostgreSQL 并检查响应。 而且看门狗监控从 pgpool 到上游服务器(应用服务器等)的链路。 从上游服务器到 pgpool 之间的连接被以 pgpool 的服务的方式进行监控。
看门狗进程交换被监控服务器上的信息信息以保证信息是最新的,并允许看门狗进程相互监控对方。
当 pgpool 服务中探测到故障,看门狗会把这个内容通知到其他看门狗。 看门狗在确认旧的活跃的 pgpool 无法提供服务时,通过投票确定新的 pgpool 活跃节点,并改变活跃/备用状态。
当一个备用的 pgpool 服务提升为活跃状态,新的活跃服务器启动虚拟 IP 接口。 也就是,之前活跃的服务器停用虚拟 IP 接口。 这让活跃的 pgpool 使用相同的 IP 地址,即使是在发生服务器切换的时候。
但故障的服务器恢复或新的服务器被加入,看门狗进程同时会通知其他的看门狗进程关于新服务器的信息, 而在活跃服务器以及其他服务器上的看门狗进程会接收这些信息。然后,新加入的服务器会被注册为备用节点。
下图描述了 pgpool-II 和看门狗进程的配置情况。
看门狗进程岁 pgpool-II 一起启停,也就是说,没有单独的命令启停它。 然而,pgpool-II 必须以 root 权限启动,因为看门狗进程需要控制虚拟 IP 接口。
看门狗的配置参数也在 pgpool.conf 中。在 pgpool.conf.sample 文件中的 WATCHDOG 小节有示例配置。 以下所有的选项都是配置看门狗进程所需要的。
如果为 on,则激活看门狗。默认为 off。
用于检查上游连接的可信服务器列表。每台服务器都邀请能响应 ping。 指定一系列用逗号分隔的服务器列表,例如 "hostA,hostB,hostC"。
指定客户端服务器(应用服务器等)连接到的 pgpool-II 的虚拟 IP 地址(VIP)。 当一个 pgpool 从备用节点切换到活跃状态,pgpool 会使用这个 VIP。
指定用于互相监控的看门狗进程的主机名或 IP 地址。
指定用于互相监控的看门狗进程的端口号。
本参数指定 pgpoll-II 用于存活检测的间隔,单位为秒(大于或等于 1 的数字)。
本参数指定用于监控上游服务器的 ping 命令的路径。只需要设置路径例如 "/bin" 。
T本参数指定用于切换 IP 地址的命令的所在路径。 只设置路径,例如 "/sbin"。
本参数指定一个命令用以启用虚拟 IP。设置命令和参数,例如 "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0"。 参数 $_IP_$ 会被 delegate_IP 设置的值替换。
本参数指定一个命令用以停用虚拟 IP。设置命令和参数,例如 "ifconfig eth0:0 down"。
本参数指定在发生虚拟 IP 切换后用于发送一个 ARP 请求的命令的所在路径。只设置路径,例如 "/usr/sbin"。
本参数指定一个命令用以在发生虚拟 IP 切换后用于发送一个 ARP 请求的命令。 设置命令和参数,例如 "arping -U $_IP_$ -w 1"。参数 $_IP_$ 会被 delegate_IP 设置的值替换。
在确认 pgpool-II 失效时的重试次数(一个大于或等于 1 的数字)。
用于检查 pgpool-II 的查询。默认为 "SELECT 1"。
指定需要监控的 pgpool-II 服务器主机。这用于发送/接收查询和数据包,同时也是看门狗的标识。 本参数名后面的数字表示“服务序号”,从 0 开始。
指定需要监控的 pgpool-II 服务器的 pgpool 服务的端口。对于查询模式,wd_lifecheck_query 指定的查询语句将被发送到这个端口。 本参数名后面的数字表示“服务序号”,从 0 开始。
指定需要监控的 pgpool-II 服务器的看门狗的端口。 本参数名后面的数字表示“服务序号”,从 0 开始。