heartbeat+lidirectord+keepalived

本文介绍如何使用Heartbeat、ldirectord及Keepalived搭建高可用集群,实现负载均衡与故障转移,确保服务连续性。
heartbeat的作用
通过HeartBeat,可以将资源(IP以及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用的服务。
heartberat的工作原理
通过修改配置文件,指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为备份服务器。然后在指定备份服务器上配置Heartbeat守护进程来监听来自主服务器的心跳。如果备份服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务所有权,接替主服务器继续不间断的提供服务,从而达到资源服务高可用性的目的

以上描述的是Heartbeat主备的模式,Heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内为收到对方发送的心跳报文,那么久认为对方失效或者宕机了,这时就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续对用户提供服务。正常情况下,可以较好的实现主机故障后,业务仍不间断的持续运行。

lftp下载
heartbeat-3.0.4-2.el6.x86_64.rpm        heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm  ldirectord-3.9.5-3.1.x86_64.rpm
yum install hearbeat-* -y
cd /usr/share/doc/heartbeat-3.0.4/
 cp ha.cf authkeys haresources /etc/ha.d/
 cd /etc/ha.d
在vm1上
vim ha.cf
 48 keepalive 2
 61 warntime 10
71 initdead 60
 76 udpport 716
91 bcast   eth0  
211 node    server1
212 node    server4
220 ping 172.25.22.250
253 respawn hacluster /usr/lib64/heartbeat/ipfail
259 apiauth ipfail gid=haclient uid=hacluster
vim haresources
149 server1 IPaddr::172.25.22.100/24/eth0 httpd
vim authkeys
23 auth 1
24 1 crc
scp ha.cf haresource authkeys server4:/etc/ha.d
在vm1,vm4上/etc/init.d/hearbeat start

在作ipvsadm是两边/etc/init.d/hearbeat stop
打开vm2,vm3
在vm1上
ipvsadm -A -t 172.25.22.100:80 -s rr
ip addr add 172.25.22.100/24 dev eth0
ip addr
ipvsadm -l
ipvsadm -a -t 172.25.22.100:80 -r 172.25.22.2:80 -g
ipvsadm -a -t 172.25.22.100:80 -r 172.25.22.3:80 -g
/etc/init.d/ipvsadm save
在vm2上
yum install -y arptables_jf
ip addr add 172.25.22.100/32 dev eth0
arptables -A IN -d 172.25.22.100 -j DROP
arptables -A OUT -s 172.25.22.100 -j mangle --mangle-ip-s 172.25.22.2
/etc/init.d/arptables_jf save
arptables -F
vim /etc/sysconfig/arptables
/etc/init.d/arptables_jf start
在vm3上
yum install -y arptables_jf
ip addr add 172.25.22.100/32 dev eth0
arptables -A IN -d 172.25.22.100 -j DROP
arptables -A OUT -s 172.25.22.100 -j mangle --mangle-ip-s 172.25.22.3
/etc/init.d/arptables_jf save #进行策略保存
arptables -F  ##刷掉策略
vim /etc/sysconfig/arptables  
/etc/init.d/arptables_jf start  ##策略恢复
测试:curl 172.25.22.100

独立的lvs并不具备对后端服务器执行健康检查的机制,这时通常需要配合第三方的工具来一起使用。而ldirectord的作用就是用来监测Real Server,当Real Server失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表
在vm1上
vim ldirectord.cf
virtual=172.25.22.100:80
        real=172.25.22.2:80 gate
        real=172.25.22.3:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
ipvsadm -l
ipvsadm -C
/etc/init.d/ldirectord start

ip addr del 172.25.22.100/24 dev eth0
vim /haresources
149 server1 IPaddr::172.25.22.100/24/eth0 httpd lidirectord
scp haresources ldirectord.cf server4:/etc/ha.d
打开heartbeat进行测试

keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,可以用来保证路由器的高可用。
keepalived主要有三个模块,分别是core、check和vrrp。 core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等 check: 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查。 vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
在vm1上
lfpt下载keepalived-1.2.20.tar.gz
tar zxf keepalived-1.2.20.tar.gz
yum install gcc openssl-devel -y
cd keepalived-1.2.20
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make && make install
cd /usr/local
scp -r keepalived/ server4:/usr/local
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln -s /usr/local/leepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
chmod +x keepalived
cd /etc/keepalined/
vim keepalived.conf
 global_defs {
  4    notification_email {
  5       root@localhost
  6    }
  7    notification_email_from keepalived@server1
  8    smtp_server 127.0.0.1
  9    smtp_connect_timeout 30
 10    router_id LVS_DEVEL
 11    vrrp_skip_check_adv_addr
 12    vrrp_strict
 13 }
 14
 15 vrrp_instance VI_1 {
 16     state MASTER
 17     interface eth0
 18     virtual_router_id 22
 19     priority 100
 20     advert_int 1
 21     authentication {
 22         auth_type PASS
 23         auth_pass 1111
 24     }
 25     virtual_ipaddress {
 26         172.25.22.100
 27     }
 28 }
 29
 30 virtual_server 172.25.22.100 80 {
 31     delay_loop 6
 32     lb_algo rr
 33     lb_kind DR
 34    #persistence_timeout 50
 35     protocol TCP
 36
 37     real_server 172.25.22.2 80 {
 38         weight 1
 39         TCP_CHECK {
 40             connect_timeout 3
 41             nb_get_retry 3
 42             delay_before_retry 3
 43         }
 44     }
 45     real_server 172.25.22.3 80 {
 46         weight 1
 47         TCP_CHECK {
 48             connect_timeout 3
 49             nb_get_retry 3
 50             delay_before_retry 3
 51         }
 52 }
 53 }


/etc/init.d/keepalived start

scp keepalived.conf 172.25.22.4:/etc/keepalived
建立和vm1上一样的软链接
vim keepalived.conf
改server1为server4,status MASTER 为BACKUP
安装keepalived-1.3.5,每次切换需要刷掉iptables规则
iptables -F

chkconfig heartbeat off

下载代码方式:https://pan.quark.cn/s/e6c2e312b658 在苹果公司的Mac操作系统环境中,当用户尝试安装非原厂驱动程序时,可能会遭遇系统无法正常启动的困境。这种情况常常源于名为.kext的内核扩展驱动程序存在兼容性问题或安装过程中出现失误。这份指南介绍了一种无需重新安装操作系统且能够保护所有用户数据的修复方法,这一方案对于先前许多面临类似挑战的用户而言,曾是极为棘手的情况。文档中提及的“用户模式启动”实际是指单用户模式,这种启动方式仅加载核心系统功能,而忽略图形用户界面及常规应用程序的加载。在单用户模式下,用户能够访问命令行界面,进而执行一系列修复指令。解决此问题的首要环节是验证存储设备是否存在故障,因为这是导致系统无法启动的常见诱因。借助终端指令`/sbin/fsck -f`,可以诊断并纠正文件系统层面的错误。倘若系统在启动过程中检测到文件系统异常,通常会自动执行`fsck`命令,然而,如果系统卡在进度条100%无法继续,手动运行该命令则显得尤为必要。指令`mount -uw /`的功能是将根目录切换为可读写状态,由于系统默认是以只读模式启动的。这一操作的目的是为了在不重新进入正常模式的前提下,对系统进行必要的调整。随后,文档提供了一个关键操作:对存在问题的驱动程序文件进行修改或更名。在Mac系统中,第三方驱动程序一般安装在`/Library/Extensions/`目录下。每个驱动程序都包含一个以.kext为后缀名的文件夹,例如在此案例中的AX88772.kext。通过命令行将故障的.kext文件更名(例如改为.kext.bak),可以临时禁用该驱动程序。这一操作需在命令行环境中完成,首先使用`cd /Library/Exte...
源码链接: https://pan.quark.cn/s/a4b39357ea24 海康威视NVR76/78N系列是一款为中小型企业及家庭用户量身打造的网络视频录像机(Network Video Recorder),其核心用途在于对来自网络摄像头的视频流进行管理和存储。该系列具备兼容萤石云服务的功能,这使得用户能够通过网络远程进行监控系统的访问、监控以及管理,借助互联网达成随时随地进行视频查看和录像回放的目标。在标题中提及的"海康NVR76/78N系列升级包"具体指代适用于这一系列录像机的软件更新套装。此类升级通常涵盖性能改进、新增功能、安全漏洞修正以及兼容性增强等多个方面,旨在保障设备始终处于最新状态,优化运行效能并改善用户使用感受。譬如,升级或许囊括了更为先进视频压缩技术的应用,用以降低网络带宽的消耗,或者为新型网络摄像头提供支持。产品说明中所列出的型号,如DS-7816N-SNH、DS-7816N-SHT、DS-7816N-SHT/N、DS-7816N-SHT/P,均属于海康威视NVR76/78N系列的特定版本。这些型号之间的不同之处可能体现在硬盘接口数量、视频通道数目、视频解码性能、网络接口规格以及是否集成内置电源等硬件参数。型号中的"DS-7816N"表明该设备能够同步处理16个视频通道,而后续的字母标识及后缀则可能象征着不同的功能或特性。"萤石云"是由海康威视开发的一套云服务解决方案,它提供了远程监控、即时视频浏览、录像保管和智能警报等多项服务。用户可借助萤石云App或网页版,便捷地监管和检视自身的监控装置,不受地理位置限制。相较于传统的本地存储方式,萤石云服务提供了一种更为方便且可靠的数据备份途径,特别是在拥有多个监控点或需防止设备失窃的情境下...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在移动应用开发领域中,Android平台与Unity3D引擎的整合是一项普遍存在的技术需求,特别是在游戏开发以及混合应用构建方面。本示例演示了如何在Android原生代码和Unity3D引擎之间建立高效的通信机制,以完成数据传递和功能执行的任务。为了有效运用此技术,必须充分认识Android和Unity3D各自的技术特性。 Android作为一个开源的移动操作系统,它提供了大量的应用程序接口和开发工具,适用于构建原生应用程序。而Unity3D则是一款支持多平台的游戏开发工具包,能够用来设计二维、三维游戏以及交互式体验。Unity3D具备卓越的图形渲染性能和便捷的编程接口,但有时需要与Android系统的功能相融合,例如接入硬件设备、管理系统级事件等。 当在Android设备上启动Unity3D应用时,一般通过UnityPlayer类来完成。UnityPlayer是Unity系统在Android设备上的连接媒介,能够用来运行Unity的编程代码或获取Unity的用户界面。举例来说,可以定义一个Intent对象,将信息打包后经由UnityPlayer传输给Unity,然后在Unity的C#编程环境中接收并处理这些信息。 相对于Unity3D调用Android系统,通常需要借助Unity的插件架构。开发者需编写Java语言编写的Android插件,并实现特定的程序接口,随后在Unity环境中使用DllImport指令导入这个插件。Unity会自动将Java代码编译并整合到工程中。执行时,通过Unity的DllImport函数调用Android插件的方法,从而执行Android设备上...
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 本文阐述了新型无线编码芯片EV1527在无线发射模块中的应用及其对应解码方法在无线接收模块中的达成。首先对编码芯片EV1527的操作进行了概述;其次阐述了两种解码方案:借助解码芯片TDH6300进行硬件解析、运用单片机执行软件解码;最后详细地展示了这种编解码系统的实施。 ### EV1527编码芯片的应用及其解码方案 #### 一、引言 随着技术的革新,无线控制技术正迅速发展并得到普遍采用。常规的无线控制装置(如2262发射装置与2272接收装置)尽管应用广泛,但由于其硬件设定的地址码容易被仿制,存在显著的安全风险。与此形成对比的是,EV1527作为一种创新的无线编码芯片,能够提供更为安全且可靠的解决方案。本文将深入探讨EV1527编码芯片的应用及其相关解码策略。 #### 二、EV1527编码芯片概述 **1. EV1527的优势** - **不可仿制性:** EV1527内置有20位可预编程内码,理论上能够产生100万种不同的内码组合,这极大降低了编码重复的可能性。 - **自学习功能:** 发送与接收模块之间能够通过自学习过程完成配对,即便发射模块遗失,也能通过重新学习使原发射模块失效,从而增强安全性。 - **节能特性:** 在无按键触发时,芯片进入低功耗模式,有助于节约能源。 **2. EV1527的引脚功能** - **第5-8引脚:** 按键输入引脚,用于识别用户的操作。 - **第4引脚:** 数据输出引脚,用于传输经过编码的信号。 - **第1引脚:** 振荡电阻连接引脚,用于调节振荡周期。 - **第2引脚:** 电源输入引脚。 #### 三、发射模块的实...
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 在Linux操作系统环境中,检索IP地址与MAC地址的具体途径存在一定难度,特别是在需要获取更详尽信息的情况下,例如系统内网卡的数目、各个网卡的MAC地址以及每块网卡所分配的IP地址数量等。此类信息通常需要借助ifconfig命令来查询,然而对于编程人员而言,在程序中调用外部shell命令并非理想选择,因为无法确保不同平台及不同版本的ifconfig命令输出格式的一致性。 本文将阐述通过ioctl函数获取Linux系统中的IP地址和MAC地址的具体方法。ioctl函数是Unix系统中少数几个具有复杂家族特征的函数之一,它能够用于获取系统的所有接口列表、接口地址、接口标志、广播地址以及子网掩码等信息。 我们需要对ioctl函数的参数结构有所了解。ioctl函数的参数仅有三个,但却是Unix系统中具有复杂家族特征的函数之一。首个参数fd,可以表示一个已打开的文件(文件句柄)或网络套接字,第二个参数request根据函数功能分类定义了多组宏,而第三个参数总是一个指针,指针的类型依赖于参数二request。 在获取Linux系统的IP地址和MAC地址时,我们可以使用SIOCGIFCONF宏来获取所有接口列表,随后使用SIOCGIFADDR宏来获取每个接口的地址信息。ioctl函数的相关结构体包括struct ifconf和struct ifreq。struct ifconf结构体的第二个元素ifc_ifcu是一个联合,指向struct ifreq结构的地址,通常是一组struct ifreq结构空间(每个描述一个接口),struct ifconf结构体的第一个元素ifc_len...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值