PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容有对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
keepalive起初专门为lvs负载均衡软件设计的,用来管理监控lvs集群系统中各个服务节点的状态,后来又加入了能轻松实现高可用的vrrp功能。
该项目的主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载平衡和高可用性设施。 负载平衡框架依赖于众所周知且普遍的使用的Linux虚拟服务器(IPVS)内核模块,提供Layer4负载均衡。
keepalived完全遵守VRRP协议,包括竞选机制等等,此外,Keepalived为VRRP有限状态机实现了一组挂钩,提供低级和高速协议交互。为了提供最快的网络故障检验测试,Keepalived实现了BFD协议。VRRP状态转换可优先考虑BFD提示来驱动快速状态转换。Keepalived框架可以单独使用,也可以一起使用,以提供灵活的基础架构。
这个协议起先应用于网络,网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得很重要,在网络里面有个协议就是来做这事的,这个协议就是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的。
其用IP组播的方式,实现服务节点间的通信, 通过一种竞选机制来将路由任务交给某台VRRP路由器. 工作时主节点广播发送VRRP协议报文, 备节点接收报文, 若一段时间(默认3个报文发送时间)备节点接收不到主节点发送的报文, 就会启动接管程序接管主节点的资源. 备节点可以有多个, 通过优先级竞选。
keepalived是模块化设计,不同模块复杂不同的功能,下面是keepalived的组件。
Keepalived配置通过f文件完成。编译器设计用于解析。解析器使用关键字树层次结构来使用特定处理程序映射每个配置关键字。中央多级递归函数读取配置文件并遍历关键字树。在解析期间,配置文件被转换为内部存储器表示。
Keepalived是一种网络路由软件,它对I / O非常封闭。这里使用的设计是一个中央选择(...),负责安排所有内部任务。不使用POSIX线程库。该框架提供了自己的线程抽象,针对网络目的进行了优化。
该框架提供对一些通用内存管理功能的访问,例如分配,重新分配,发布......这个框架能够适用于两种模式:normal_mode和debug_mode。
使用debug_mode时,它提供了一种消除和跟踪内存泄漏的强大方法。这个低级env通过跟踪分配内存并释放来提供缓冲区欠载保护。使用的所有缓冲区都是固定长度的,以防止最终的缓冲区溢出。
是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等。
该框架定义了所有代码中使用的一些通用和全局库。这些库是:html解析,链接列表,计时器,向量,字符串格式化,缓冲区转储,网络工具,守护程序管理,pid处理,低级TCP层4。这里的目标是将代码分解为最大限度,以尽可能地代码重复以增加模块性。
该框架提供子进程监控(VRRP和健康检查)。每个子进程都接受与其自己的监视器unix域套接字的连接。父进程向此子unix域套接字发送“hello”消息。Hello消息使用父端的I / O多路复用器发送,并使用子端的I / O多路复用器接收/处理。如果父检测到损坏的管道,则在子项仍然存活时使用sysV信号来测试并重新再启动它。
检查器测试如果realserver处于活动状态,则此测试以二进制决策结束:从LVS拓扑中删除或添加realserver。内部检查器设计是实时网络软件,它使用完全多线程的FSM设计(有限状态机)。此检查器堆栈提供符合layer4到layer5 / 7测试结果的LVS拓扑操作。它在由父进程监视的独立进程中运行。
在VRRP框架中,它提供了在协议状态转换期间启动额外脚本的能力。系统调用完成分叉进程,以便不可能影响全局调度计时器。
healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
根据上述工作原理知道, 备节点接收不到报文时, 如两者间的网络不通了, 备节点就会启动接管程序接管主节点的资源, 对外提供服务, 表现形式就是备节点上出现了虚拟IP, 此时主节点也是持有虚拟IP的.
只要有虚拟IP存在, 就不可能完全规避这样的一个问题. 也就是没有虚拟IP了, 就没有脑裂了, 那么节点又如何向外提供服务呢?
如果发现又能够ping通网关,再重启keepalived服务。最后在脚本开头再加上脚本是不是已经运行的判断逻辑,将该脚本加到crontab里面。
同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息;
当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源;
keepalived与zookeeper都可拿来实现高可用,高可用一般跟负载均衡会一起考虑,所以通常也会考虑到相应的负载均衡能力。
优点:简单,基本不需要业务层面做所有的事情,就能轻松实现高可用,主备容灾。而且容灾的宕机时间也比较短。
缺点:也是简单,因为VRRP、主备切换都没什么复杂的逻辑,所以没办法应对某些特殊场景,比如主备通信链路出问题,会导致脑裂。同时,keepalived也不容易做负载均衡。
缺点:跟业务结合的比较紧密。需要在业务代码中写好ZK使用的逻辑,比如注册名字。拉取名字对应的服务地址等。
priority 80 #设置节点的优先级,跟weight值组合使用,决定选择哪个为主
1、脚本要放在/etc/keepalived目录下,否则就没办法切换,可能是基于安全的原因。
2、此时第三方主机通过vip连接到的是新的主库数据库(说明vip和备库切换到主库成功)。
3.1、修改f中的内容,屏蔽掉之前当作备库时的配置,否则还是名义上的备库。
1、如果weight值设置为正整数,当主库的vrrp_script脚本执行成功,其权值为priority+weight,而备库的权值为priority+weight的值。那么此时主库的和大于备库的和。
2、如果weight值设置为正整数,当主库的vrrp_script脚本执行失败,其权值为priority设置的值;而备库的权值为priority+weight,如果其和大于主库的priority,则备库会变成主库。
这种模式有一个问题是当原主节点从故障中恢复后会重新获得master角色抢占虚拟IP,这在有些场景可能会出现问题(例如需要数据同步的场景,恢复后需要先同步数据)。
发生故障才切换(比如keepalived进程中断),否则不切换。切换测试时先停止主库,再关闭keepalived进程。
如果是要实现主库和vip都在同一台主机的目标,那么应选择非抢占模式,这样子虽然主库中断,只要keepalived进程还在,则不会发生主库切换和vip切换。虽然切换响应时间受一定的影响,但是保证通过VIP都能够连接主库上。
3、A备库启动(根据抢占模式,抢到vip),B还是主库(但是vip被抢占) #此时通过vip就会访问到备库。
4、如果一定要提高数据库故障切换响应时间,可以配置为抢占模式,但是当备库(原来的主库)启动前,得降低该主机的优先级模式。也就是保证主库所在的优先级要高,vip不会被抢占。
-- 以上就是【PostgreSQL从小白到专家】第48讲 - PG高可用实现 的内容,欢迎一起探讨交流,往期视频及文档,联系CUUG客服
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
广东一学校学生因家里办白事凌晨请假,宿管未开门放行引争议,学校:正处理
程序员错扔7500枚比特币,价值51亿!恼羞成怒蹲守垃圾场11年:谁帮我挖到就分钱!
马云想让黄渤免费代言,黄渤:“可以,你送我一辆车吧!”马云问:“你想要什么车?”黄渤的回答情商太高了
汕头辟谣“大量商户为躲检查关门停业”,当地网友却说:超市关门、没地方吃饭
挪威史上最大规模丑闻!妇科医生20年87名患者,偷录6000小时检查视频
淄博“教具达人”王瑞昌:心里装着孩子,你就创意无限 教育强国 奋斗有我
神仙打架,75%的同学来自C9和二龙四虎,国网第1梯队2024录用名单
《编码物候》展览开幕 北京时代美术馆以科学艺术解读数字与生物交织的宇宙节律
电话: 134-5561-6515
地址: 山东省潍坊市昌乐