heartbeat是什么意思 是用什么语言写的

3221人阅读
linux(8)
1.编辑/etc/hosts文件
vi /etc/hosts
192.168.203.57 fca-vm-search-apache1.synnex.org 主server主机名
192.168.203.58 fca-vm-search-apache2.synnex.org 备用server主机名
2. 在主备servers都安装libnet
tar -zxvf libnet.tar.gz& -C /usr/local/src/
cd /usr/local/src/libnet
./configure
make install
3. 在主备servers都安装heartbeat
tar -zxvf heartbeat-2.1.3.tar.gz -C /usr/local/src
cd /usr/local/src/heartbeat-2.1.3&&&&&&&&&&&&&&
./configure&&&&&&&&&&&&&&&&&&&&&
groupadd haclient&&&&&&&&&&&&&&&
useradd -g haclient hacluster&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
make&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
make install
heartbeat安装完成后,自动在/etc/rc.d/init.d/目录下生成启动脚本heartbeat,启动heartbeat可以使用命令:
/etc/rc.d/init.d/heartbeat& start
4.在主备servers上,将heartbeat作为系统服务
chkconfig --add heartbeat&&&&&&&&&&&&&&&&&
chkconfig heartbeat on& 开机自动启动
cd /usr/local/src/heartbeat-2.1.3/doc/
cp {ha.cf,haresources,authkeys} /usr/local/etc/ha.d/
5. 编辑ha.cf文件
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility&&&& local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 192.168.203.57 双机中对方节点的真实IP地址,非虚拟IP
auto_failback on 当主节点恢复时,是否切换回主节点,on 切换,off 不切换
node&&& fca-vm-search-apache1.synnex.org 主节点uname -n
node&&& fca-vm-search-apache2.synnex.org 备用节点uname -n
6.编辑authkeys文件 主备节点上这个文件必须是相同的
#vi authkeys
#chmod 600 authkeys
7.编辑haresources文件
#vi haresources 在主备节点上这个文件必须是相同的
fca-vm-search-apache1.synnex.org 192.168.203.76 httpd&&&
(主节点名称)& (虚拟IP地址)&& (需要高可用的服务(httpd),需要将这个服务配置为系统服务)
8.将apache作为系统服务
cp $apache_home/bin/apachectl /etc/init.d/httpd
例如:cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 2345 httpd on
9.修改apache服务的httpd.conf
将Listen地址改为&虚拟IP:80, &本例中的虚拟IP为192.168.203.76
Listen 192.168.203.76:80
10.启动heartbeat服务,看否能访问apache服务,停掉heartbeat服务,看是否能访问apache服务
11. 在主节点上添加一个监控httpd服务的脚本,或者使用heartbear的crm(cluster resource manager)功能,监控http服务是否存活,如果已经停掉,则关闭heartbeat服务,从而将服务转移到备用server,并且发邮件通知管理员,我们使用的是脚本的方式,CRM如何配置,请看以下连接
#vi check_httpd_heartbeat.sh
vip=192.168.203.76
touch /var/log/loe-ha.log& #此文件记录apache正常运行的时间点
&& status=`netstat -tln|grep $vip:80`
&& sleep 1 #设置监听周期,约1s
&& echo &`date`: Chief node's server is running normally.& && /var/log/loe-ha.log
&& if [& &$status&=&& ];then
&&&&& echo &Server is not running , please wait & && /var/log/loe-ha.log
&&&&& /etc/init.d/heartbeat stop
&&&&& wait
&&&&& mutt -e &my_hdr from:leey& -s &master httpd server is down, please check it ASAP&& & /var/log/loe-ha.log
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:49340次
排名:千里之外
原创:20篇
(6)(3)(4)(1)(1)(6)(1)(5)LVS和Heartbeat的安装配置说明_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
LVS和Heartbeat的安装配置说明
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩47页未读,继续阅读
你可能喜欢闲说HeartBeat心跳包和TCP协议的KeepAlive机制
这篇文章还是写得蛮容易理解的
很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。
学过TCP/IP的同学应该都知道,传输层的两个主要协议是UDP和TCP,其中UDP是无连接的、面向packet的,而TCP协议是有连接、面向流的协议。
所以非常容易理解,使用UDP协议的客户端(例如早期的“OICQ”,听说这两天被抢注了来着,好古老的回忆)需要定时向服务器发送心跳包,告诉服务器自己在线。
然而,MSN和现在的QQ往往使用的是TCP连接了,尽管TCP/IP底层提供了可选的KeepAlive(ACK-ACK包)机制,但是它们也还是实现了更高层的心跳包。似乎既浪费流量又浪费CPU,有点莫名其妙。
具体查了下,TCP的KeepAlive机制是这样的,首先它貌似默认是不打开的,要用setsockopt将SOL_SOCKET.SO_KEEPALIVE设置为1才是打开,并且可以设置三个参数tcp_keepalive_time/tcp_keepalive_probes/tcp_keepalive_intvl,分别表示连接闲置多久开始发keepalive的ack包、发几个ack包不回复才当对方死了、两个ack包之间间隔多长,在我测试的Ubuntu
10.04下面默认值是7200秒(2个小时,要不要这么蛋疼啊!)、9次、75秒。于是连接就了有一个超时时间窗口,如果连接之间没有通信,这个时间窗口会逐渐减小,当它减小到零的时候,TCP协议会向对方发一个带有ACK标志的空数据包(KeepAlive探针),对方在收到ACK包以后,如果连接一切正常,应该回复一个ACK;如果连接出现错误了(例如对方重启了,连接状态丢失),则应当回复一个RST;如果对方没有回复,服务器每隔intvl的时间再发ACK,如果连续probes个包都被无视了,说明连接被断开了。
这里有一篇非常详细的介绍文章:&&,包括了KeepAlive的介绍、相关内核参数、C编程接口、如何为现有应用(可以或者不可以修改源码的)启用KeepAlive机制,很值得详读。
这篇文章的2.4节说的是“Preventing disconnection due to network
inactivity”,阻止因网络连接不活跃(长时间没有数据包)而导致的连接中断,说的是,很多网络设备,尤其是NAT路由器,由于其硬件的限制(例如内存、CPU处理能力),无法保持其上的所有连接,因此在必要的时候,会在连接池中选择一些不活跃的连接踢掉。典型做法是LRU,把最久没有数据的连接给T掉。通过使用TCP的KeepAlive机制(修改那个time参数),可以让连接每隔一小段时间就产生一些ack包,以降低被T掉的风险,当然,这样的代价是额外的网络和CPU负担。
前面说到,许多IM协议实现了自己的心跳机制,而不是直接依赖于底层的机制,不知道真正的原因是什么。
就我看来,一些简单的协议,直接使用底层机制就可以了,对上层完全透明,降低了开发难度,不用管理连接对应的状态。而那些自己实现心跳机制的协议,应该是期望通过发送心跳包的同时来传输一些数据,这样服务端可以获知更多的状态。例如某些客户端很喜欢收集用户的信息……反正是要发个包,不如再塞点数据,否则包头又浪费了……
大概就是这样吧,如果有大牛知道真正的原因,还望不吝赐教。
通过咨询某个做过IM的同事,参考答案应该是,自己实现的心跳机制通用,可以无视底层的UDP或TCP协议。如果只是用TCP协议的话,那么直接使用KeepAlive机制就足够了。
# cat /proc/sys/net/ipv4/tcp_keepalive_time
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
# cat /proc/sys/net/ipv4/tcp_keepalive_probes
# echo 600 & /proc/sys/net/ipv4/tcp_keepalive_time&
# echo 60 & /proc/sys/net/ipv4/tcp_keepalive_intvl&
# echo 20 & /proc/sys/net/ipv4/tcp_keepalive_probes
我想这里只是设置每个socket的默认值,具体在创建socket的时候,可以对每个socket进行设置。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。heartbeat中ha.cf参数说明
#debugfile /var/log/ha-debug
说明:调试日志文件文件,取默认值
logfile /var/log/ha-log
说明:系统运行日志文件,取默认值
#logfacility local0
说明:用于syslog()/logger的设备
keepalive 2
说明:心跳频率,自己设定。1:表示1秒;200ms:表示200毫秒
deadtime 30
说明:节点死亡时间阀值,就是从节点在过了10后还没有收到心跳就认为主节点死亡,自己设定
warntime 10
说明:发出警告时间,自己设定
udpport 694
说明:心跳信息传递的udp端口,自己设定
#bcast eth0 # Linux
说明:采用udp广播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 172.30.31.68
说明:采用网卡eth0的udp单播来通知心跳,eth0的IP
#mcast eth0 225.0.0.1 694 1 0
说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
auto_failback off
说明:主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
node heartbeat1
说明:主节点名称,与uname –n保持一致。排在第一的默认为主节点,所以不要搞措顺序
node heartbeat2
说明:副节点名称,与uname –n保持一致
watchdog /dev/watchdog
说明:看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启
以上这些是我个人认为必配项,下面这些是可选项
stonith baytech /etc/ha.d/conf/stonith.baytech
说明:主/副等所有节点的一种校验。
respawn userid /path/name/to/run
说明:和heartbeat必须一起启动的本地服务
ping 10.10.10.254
说明:伪节点IP,伪节点就是其失效时主/副节点不会正常工作但本身不是主/副节点之一。
respawn hacluster /usr/lib/heartbeat/ipfail
说明:与ping选项一起使用,取默认值。
baud 19200
说明:串口波特率,与serial一起使用。
serial /dev/ttyS0 # Linux
说明:采用串口来传递心跳信息。
此条目发表在
分类目录。将加入收藏夹。
加我微信(xifenfei88)
订阅惜分飞
WP Cumulus Flash tag cloud by
9 or better.openssl heartbeat问题 | SELinux+

我要回帖

更多关于 heartbeat什么意思 的文章

 

随机推荐