在将heartbeat应用到线上后,启动service heartbeat start,发现之后就再没反应了,查看日志tail -f /var/log/ha-log如下:
heartbeat[30680]: 2015/01/27_18:04:29 info: Version 2 support: false heartbeat[30680]: 2015/01/27_18:04:29 WARN: Logging daemon is disabled --enabling logging daemon is recommended heartbeat[30680]: 2015/01/27_18:04:29 info: ************************** heartbeat[30680]: 2015/01/27_18:04:29 info: Configuration validated. Starting heartbeat 2.1.3 heartbeat[30681]: 2015/01/27_18:04:29 info: heartbeat: version 2.1.3 heartbeat[30681]: 2015/01/27_18:04:29 WARN: No Previous generation - starting at 1422353070 heartbeat[30681]: 2015/01/27_18:04:29 info: Heartbeat generation: 1422353070 heartbeat[30681]: 2015/01/27_18:04:29 info: No uuid found for current node - generating a new uuid. heartbeat[30681]: 2015/01/27_18:04:29 info: Creating FIFO /var/lib/heartbeat/fifo.
一直保持在此不动,heartbeat所管理的资源也没有启动。
刚开始没有任何头绪,即使查看debug日志也没有什么作用,还会有什么地方会有报错信息呢?
终于想到service hearbeat status,终于有所提示:
Cannot shmget for process status: Invalid argument
顺着这根线百度,查到是由于kernel.shmmax,是内核参数导致的。因为这台机器是老机器,版本为5.5,而新配置的6.5服务器没有这个问题。
我的机器shmmax数据设置的过大,从而导致创建共享内存失败。
shmmax内核参数定义单个共享内存段的最大值,一般建议使用物理内存的一半,单位为字节。
以2G为例:2048/2*1024*1024=1073741824
在/etc/sysctl.conf中添加kernel.shmmax=1073741824,在系统重启后仍生效。
改完之后,service heartbeat start,仍未启动,再次service hearbeat status报错
Cannot shmget for process status: No space left on device
这是由于shmall共享内存设置过大导致
shmall内核参数定义共享内存页数,一般建议设置为物理内存大小,单位为页,1页=4k
以2G为例:2048*1024*1024/4000= 536870
在/etc/sysctl.conf中添加kernel.shmall=536870,在系统重启后仍生效。
以上全部改完后,再次service heartbeat start,正常启动且顺利接管VIP。
ok,希望给大家带来帮助。