[root@heartbeat-1-114 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
主服务器A:
在禹州等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、网站设计 网站设计制作按需设计网站,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,成都外贸网站制作,禹州网站建设费用合理。
主机名:heartbeat-1-114
eth0网卡地址:192.168.136.114(管理IP)
eth2网卡地址:10.0.10.4/255.255.255.0 (心跳IP)
从服务器B:
主机名:heartbeat-1-115
eth0网卡地址:192.168.136.115(管理IP)
eth2网卡地址:10.0.10.5/255.255.255.0(心跳IP)
虚拟VIP:
虚拟VIP在主服务器heartbeat-1-114上,VIP:192.168.136.116
仲裁主机:10.0.10.6
配置IP就省略了,设置两台主机的主机名分别为heartbeat-1-114和heartbeat-1-115。分别编译两台机器的/etc/sysconfig/network配置文件,设置HOSTNAME=heartbeat-1-114和HOSTNAME=heartbeat-1-115。然后在命令行下执行hostname heartbeat-1-114和hostname heartbeat-1-115使设置马上生效,注意/etc/hosts文件中127.0.0.1对应的主机名不要配置。
提示:可以执行setup命令然后选network configuration-->Edit configuration即可配置机器名,然后logout退出重新登录后生效。
提示:两台机器必须互相能ping通
在heartbeat-1-114主机上配置hosts文件
[root@heartbeat-1-114 ~]# cat >>/etc/hosts< 192.168.136.114 heartbeat-1-114
> 192.168.136.115 heartbeat-1-115
> EOF
在heartbeat-1-115主机上配置hosts文件
[root@heartbeat-1-115 ~]# cat >>/etc/hosts< 192.168.136.114 heartbeat-1-114
> 192.168.136.115 heartbeat-1-115
> EOF
通过ping ip地址的方法检查测试,看其返回的IP是不是和/etc/hosts中配置的内容一致。
特别强调:机器名必须是uname –n返回的结果
[root@heartbeat-1-114 ~]# uname -n
heartbeat-1-114
[root@heartbeat-1-115 ~]# uname -n
heartbeat-1-115
提示:hosts文件的配置在heartbeat服务中会用到,后文的drbd及存储高可用也会用到,在生产环境中会把所有的机器名对应上所有的机器IP地址,可以通过分发工具统一分发到所有机器的/etc/hosts中。
eth2 10.0.10.5和eth2 10.0.10.4两块网卡之间通过普通网线连接的,即不通过交换机,直接用网线将两块网卡连在一起,用于做心跳检测或传数据等。
提示:高可用服务器对上的heartbeat软件会利用这条心跳线来检查对端的机器是否存活,进而决定是否做故障转移,资源切换,来保证业务的连续性。
如果条件允许,以上连接可同时使用,来加大保险系数防止裂脑问题的发生。
本次案例:选用以太网电缆两网卡直连。
选用原因:简单,容易部署、效果也不错。
在两台机器上分别增加一条主机路由,来实现两台机器检查对端时通过这个心跳线线路检查。
(1)在heartbeat-1-114上添加主机主机路由:
[root@heartbeat-1-114 ~]# /sbin/route add -host 10.0.10.4 dev eth2
添加到开机自启动配置文件中
[root@heartbeat-1-114 ~]# echo "/sbin/route add -host 10.0.10.4 dev eth2">>/etc/rc.local
(2)在heartbeat-1-115上增加如下主机路由:
[root@heartbeat-1-115 ~]# /sbin/route add -host 10.0.10.5 dev eth2
添加到开机自启动配置文件中
[root@heartbeat-1-115 ~]# echo "/sbin/route add -host 10.0.10.5 dev eth2">>/etc/rc.local
提示:要确保心跳线路是通的
在主服务器上heartbeat-1-114上配置辅助VIP,辅助ip用ip addr命令查看
[root@heartbeat-1-114 ha.d]# ip addr add 192.168.136.116/24 dev eth0:1
[root@heartbeat-1-114 ha.d]# ip addr|grep "116"
inet 192.168.136.116/24 brd 192.168.136.255 scope global secondary eth0:1
[root@heartbeat-1-114 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@heartbeat-1-114 ~]# getenforce
Disabled
[root@heartbeat-1-115 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@heartbeat-1-115 ~]# getenforce
Disabled
CentOS-6.8-x86_64的rpm包没有heartbeat软件,所以要下载epel包
[root@heartbeat-1-114 ~]# yum search heartbeat
已加载插件:product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel-local | 4.1 kB 00:00 ...
警告:没有匹配 heartbeat 的软件包
没有找到匹配的软件包
[root@heartbeat-1-114 ~]# mkdir -p /home/linzhongniao/tools
[root@heartbeat-1-114 ~]# cd /home/linzhongniao/tools
[root@heartbeat-1-114 tools]# wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
--2018-11-02 23:04:38-- http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
Resolving mirrors.ustc.edu.cn... 218.104.71.170, 2001:da8:d800:95::110
Connecting to mirrors.ustc.edu.cn|218.104.71.170|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://mirrors.ustc.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm [following]
--2018-11-02 23:04:38-- http://mirrors.ustc.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
Reusing existing connection to mirrors.ustc.edu.cn:80.
HTTP request sent, awaiting response... 200 OK
Length: 14540 (14K) [application/x-redhat-package-manager]
Saving to: “epel-release-6-8.noarch.rpm.1”
100%[==================================================================>] 14,540 --.-K/s in 0.04s
2018-11-02 23:04:38 (371 KB/s) - “epel-release-6-8.noarch.rpm.1” saved [14540/14540]
[root@heartbeat-1-114 tools]# rpm -ivh epel-release-6-8.noarch.rpm
warning: epel-release-6-8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...########################################### [100%]
1:epel-release ########################################### [100%]
[root@heartbeat-1-114 tools]# rpm -qa|grep epel
epel-release-6-8.noarch
yum install heartbeat* -y
提示:如果yum安装后想保留rpm包,用下面的方法。
[root@heartbeat-1-114 ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
[root@heartbeat-1-114 ~]# grep keepcache /etc/yum.conf
keepcache=1
两台机器分别执行安装heartbeat软件后,不出意外就可以安装好heartbeat软件了。前面已经提到了,heartbeat的默认配置文件目录为/etc/ha.d。heartbeat常用的配置文件有三个,ha.cf、authkey和haresource,各自的作用见下面的表格。
(1)先把ha.cf、haresources和authkeys这三个文件拷到/etc/ha.d/目录下
[root@heartbeat-1-114 ~]# ll /usr/share/doc/heartbeat-3.0.4/
total 144
-rw-r--r-- 1 root root 1873 Dec 3 2013 apphbd.cf
-rw-r--r-- 1 root root 645 Dec 3 2013 authkeys
-rw-r--r-- 1 root root 3701 Dec 3 2013 AUTHORS
-rw-r--r-- 1 root root 58752 Dec 3 2013 ChangeLog
-rw-r--r-- 1 root root 17989 Dec 3 2013 COPYING
-rw-r--r-- 1 root root 26532 Dec 3 2013 COPYING.LGPL
-rw-r--r-- 1 root root 10502 Dec 3 2013 ha.cf
-rw-r--r-- 1 root root 5905 Dec 3 2013 haresources
-rw-r--r-- 1 root root 2935 Dec 3 2013 README
[root@heartbeat-1-114 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@heartbeat-1-114 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/
(2)配置ha.cf配置文件
[root@heartbeat-1-114 ha.d]# cat ha.cf
debugfile /var/log/ha-debug
logfile/var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
#bcast eth2
#mcast eth2 225.0.0.114 694 1 0
ucast eth2 10.0.10.5
auto_failback on
node heartbeat-1-114
node heartbeat-1-115
ping 10.0.10.6
respawn root /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=root uid=root
#crm on
(3)ha.cf文件详细说明
debugfile /var/log/ha-debug
:写入调试信息的文件。
logfile /var/log/ha-log
:heartbeat的日志文件。
keepalive 2
:心跳的时间间隔,默认时间单位为秒s。
deadtime 30
:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10
:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60
:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
bcast eth2
:指明心跳使用以太网广播方式在eth2接口上进行广播,如使用两个实际网络来传送心跳则#bcast eth0 eth2
,用udp进行广播建议副节点不止一个情况下使用
mcast eth2 225.0.0.130 694 1 0
:设置多播通信使用的端口,225.0.0.130为多播ip地址在一个局域网内这个ip地址不能一样,694为默认使用的udp端口号,建议在副节点不止一台使用。
注意:一个局域网内有多组heartbeat服务同时正常使用的前提是多播地址不同(可选多播地址段为224.0.0.0-239.255.255.255),一般路由器、交换机等应该都是多播的方式,建议IP的最后八位作为多播地址的最后8位。当然不用多播也能解决心跳问题。
udpport 694
:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth2 10.0.10.5
:设置广播通信对方机器心跳检测的网卡和IP和udpport一起用。
auto_failback on
:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib64/heartbeat/ipfail
:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
crm on
:是否开启集群资源管理功能(Cluster Resource Manager)
提示:我们可以查看/usr/share/doc/heartbeat-3.0.4/下的ha.cf来详细了解参数信息。
(1)配置authkey文件
[root@heartbeat-1-114 ha.d]# sha1sum /etc/ha.d/authkeys
da39a3ee5e6b4b0d3255bfef95601890afd80709 /etc/ha.d/authkeys
[root@heartbeat-1-114 ha.d]# cat /etc/ha.d/authkeys
auth 2
2 sha1 da39a3ee5e6b4b0d3255bfef95601890afd80709
将authkey权限修改为600
[root@heartbeat-1-114 ha.d]# chmod 600 /etc/ha.d/authkeys
[root@heartbeat-1-114 ha.d]# ll /etc/ha.d/authkeys
-rw------- 1 root root 20 Nov 3 20:31 /etc/ha.d/authkeys
(2)文件说明
此处提到authkey权限必须为600
# Authentication file. Must be mode 600
# Must have exactly one auth directive at the front.
# authsend authentication using this method-id
#
# Then, list the method and key that go with that method-id
此处提到可以设置认证方法
# Available methods: crc sha1, md5. Crc doesn't need/want a key.
# You normally only have one authentication method-id listed in this file
# Put more than one to make a smooth transition when changing auth
# methods and/or keys.
这里说明sha1是最好的认证方法,其次md5是最好的
# sha1 is believed to be the "best", md5 next best.
# crc adds no security, except from packet corruption.
# Use only on physically secure networks.
#auth 1
#1 crc
#2 sha1 HI!
#3 md5 Hello!
##########
注意:authkeys需要的权限默认为600否则heartbeat服务会报错不发打开,两台机器都需要操作
[root@heartbeat-1-114 ha.d]# cat /etc/ha.d/haresources
heartbeat-1-114 IPaddr::192.168.136.116/24/eth0:1
配置参数说明 :heartbeat-1-114为主节点hostname,192.168.136.116为vip,24为掩码是24位的网段,eth0:1为vip的设备名。IPaddr为heartbeat配置IP的默认脚本,其后的IP等都是脚本参数,脚本放置的位置如下所示:
[root@heartbeat-1-114 ha.d]# ll /etc/ha.d/resource.d/IPaddr
-rwxr-xr-x 1 root root 2273 Dec 3 2013 /etc/ha.d/resource.d/IPaddr
实际上面haresources文件中的内容,相当于在ip为192.168.136.116的机器上执行下面的脚本:
/etc/ha.d/resource.d/IPaddr 192.168.136.116/24/eth0:1 start/stop
IPaddr::192.168.136.116/24/eth0:1
:这个语句的结构是脚本::(两个冒号)传参,确切的说这里并不是传参只是在ip为192.168.136.116的机器上执行一个这样的脚本,所以自己开发得到脚本只要能够用start/stop启动和停止并且满足脚本::传参这种格式,就能放到haresources文件中这是脚本要写全路径。
把主机上的三个文件拷贝到从上,只需配置ha.cf文件
[root@heartbeat-1-114 ha.d]# scp ha.cf authkeys haresources heartbeat-1-115:/etc/ha.d/
The authenticity of host 'heartbeat-1-115 (192.168.136.115)' can't be established.
RSA key fingerprint is 66:cc:1a:b8:c6:68:8e:8f:d1:2f:a3:a3:56:23:4a:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heartbeat-1-115,192.168.136.115' (RSA) to the list of known hosts.
root@heartbeat-1-115's password:
ha.cf 100% 341 0.3KB/s 00:00
从节点只需要修改ha.cf文件,将10.0.10.5改成10.0.10.4,设置对方机器心跳检测的网卡和IP。
[root@heartbeat-1-115 ha.d]# grep "ucast" ha.cf
ucast eth2 10.0.10.4
先启动主节点后启动从节点,不要让heartbeat开机自启动
[root@heartbeat-1-130 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
[root@heartbeat-1-114 ~]# chkconfig --list|grep heartbeat
heartbeat 0:off 1:off 2:on3:on4:on5:on6:off
[root@heartbeat-1-114 ~]# chkconfig heartbeat off
[root@heartbeat-1-114 ~]# chkconfig --list|grep heartbeat
heartbeat 0:off 1:off 2:off 3:off 4:off 5:off 6:off
有两种方法
(1)主节点停止heartbeat服务
/etc/init.d/heartbeat stop
(2)主节点禁ping
[root@heartbeat-1-114 ha.d]# iptables -I INPUT -p icmp -j DROP
主节点允许ping
[root@heartbeat-1-114 ha.d]# iptables -I INPUT -p icmp -j ACCEPT
我们就会发现虚拟VIP切换到从节点上了,来达到heartbeat高可用功能继续为用户提供服务。
两节点都down掉eth2网卡
ifdown eth2
可以查看heartbeat日志和系统日志查看heartbeat启动及接管资源的过程
tail -f /var/log/ha-log
tail -f /var/log/messages