[TOC]
(1) Heartbeat 高可用解决方案
Q:什么是高可用技术呢? 答:在生产环境中我既要保证服务不间断的服务又要保证服务器稳定不down机,但是异常还是会发生; 比如说服务器硬件损坏导致服务器down机,我该如何保证服务器down机后继续提供服务呢?这时我就应该请出高可用技术来帮忙了,当我们的服务器发生故障后不能继续时,高可用集群技术解决将业务及服务自动转移至其他主机服务器上继续服务,保证服务架构不间断运行。
1.1 Heartbeat作用 描述:是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统,常常使用在分区集群等大型架构中 通过heartbeat,可以将资源(ip以及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务;
heartbeat和keepalived(近年来使用增加,但是某些场景还是不及hb)有很多相同之处,但是也有区别:
1.2 Heartbeat工作原理 描述:通过修改heartbeat的配置文件,可以指定一台heartbeat服务器作为主服务器,另一台自动成为热备服务器。 在热备服务器上面配置heartbeat守护程序来监听来自主服务器的心跳信息;如果在规定时间内,无法监听到心跳信息,那么就启动故障转移,取得主服务器上的相关资源的所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的;
Heartbeat支持模式:
一般故障转移切换时间在5~20s之间(hearbeat需要进行arp广播,资源收缩等);和keepalived的服务一样,heartbeat高可用是服务器级别的,不是服务级别的。
切换漂移的条件:
1.3 Heartbeat心跳连接 高可用服务器上的Heartbeat软件会利用这条心跳连接线来检查对端的机器释放存活,进而决定是否做故障漂移,资源切换来保证业务的连续性; Q:如何进行心跳连接与监控? 答:至少需要两台主机才可以实现高可用服务,采用通信技术使两台heartbeat服务之间通信;
1.4 Heartbeat应用场景
实际工作中两种高可用问题: (1) hb仅仅控制vip资源,不负责服务资源的启动及停止;比如下面的Heartbeat 安装与配置(Web服务) (2) hb即控制vip资源的漂移,同时又控制服务资源启动及停止;比如下面的实例;(适合数据库和存储)
其他架构参考: (1) heartbeat+drbd+mysql #数据库高可用 (后面会进行讲解) (2) heartbeat+active+nfs/mfs #存储高可用
Tips:
裂脑(splitbrain)原理: 两台服务器在一定时间内,无法相互检测到对方心跳而各自启动故障转移功能,取得资源和服务的所有权,会导致同一个IP在两端同时启动服务,存在两个相同的VIP,造成冲突可能导致服务器两端的数据不一致或数据丢失;(即共享资源被瓜分,服务都起不起来了又或者服务都起来,但是共享资源同时写,最后数据就被破坏了!)
2.1 裂脑原因
2.2 裂脑解决
2.3 fence介绍 描述:Fence是HA集群环境下的术语,在硬件领域fence设备其实就是一个智能电源管理设备(IPMI,Intelligent PowerManagement Interface);其分为内/外部fence,这些设备都有以太网口的,用来在HA切换触发时通过网络重启提供资源服务的服务器;
不同服务器对应Fence设备名称:
高可用软件工作过程中,一般来说由三种消息类型:
提示:以上心跳控制消息都使用UDP协议发生到/etc/ha.d/ha.cf 文件指定的任意端口或者指定多播地址;
3.1 IP地址接管和故障转移 通过IP地址接管和ARP广播进行故障转移的,ARP广播在主服务器故障时候,备用节点接管资源后,会立即强制更新所有Client本地arp表(VIP地址与mac地址的解析记录),确保客户端和新的服务器对话;
3.2 VIP/IP 别名/辅助IP
注意区别辅助ip和别名ip,keepalived和heartbeat3都是用辅助ip的形式;在实际生产环境中需要在DNS配置中把网站域名地址解析到VIP地址而并发非真实IP地址;
#辅助ip设置:(HA/HB3 现在都采用这个)
ip addr add 192.168.12.1/24 broadcast 192.168.12.255 dev eth1
ip addr del 192.168.12.1/24 broadcast 192.168.12.255 dev eth1
#别名ip设置:(收工设置 HB2版本时候使用)
ifconfig eth0:1 192.168.12.1 netmask 255.255.255.224 up
ifconfig eth0:1 192.168.12.1 netmask 255.255.255.224 down
管理IP/VIP对比:
1.环境需求介绍 需求:当Master-data1或者Master-data2任意一台服务器宕机,再宕机的机器上初始启动的虚拟VIP就会自动切换到运作正常的机器上,实现IP资源的自动接管,从而达到高可用无业务影响的目的;
在实际生产环境中,也可以配置主备模式,即只在主的一端配置VIP,备的一端仅处于热备状态;
系统:CentOS release 6.10 (Final)
内核:Linux WeiyiGeek 2.6.32-754.10.1.el6.i686 2019 GNU/Linux
虚拟软件:VirtualBOX (管理-> 全局设定 -> NAT 网络 -> 配置两个1/2网段将自动获取IP去掉)
#机器1 Master-data1
管理IP :192.168.1.100
心跳连接:192.168.2.100
VIP :192.168.1.10
#机器2 Master-data2
管理IP :192.168.1.101
心跳连接:192.168.2.101
VIP :192.168.1.11
#两台机器都关闭防火墙和unix安全
#关闭iptables和selinux:
[root@Master-data1/2 ~]# getenforce
Disabled
Tips:
2.Heartbeat版本和配置 官方网站:http://www.linux-ha.org/wiki/Download Heartbeat-3.X版本以后被分为了4个模块,这些安装包都可以从官网:
WeiyiGeek.Heartbeat下载
HA默认配置文件目录/etc/ha.d/,常用配置文件:
ha.cf 参数配置文件 配置heartbeat一些基本参数
authkey 认证文件 高可用服务器对之间根据对端的authkey(对端进行相互认证-防止第三者插足)
haresource 资源配置文件 配置启动IP资源及脚本程序/服务等
#/etc/ha.d/resource.d/ 以后开发的程序存放目录直接可以进行调用
环境配置
##Step1.配置DATA1与DATA2的 IP地址
vim /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
UUID=c3f35428-3740-4791-bc38-8e0d69707d4b
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.2.100
NETMASK=255.255.255.0
; GATEWAY=192.168.1.1 心跳线IP配置不用配网关和DNS
#或者采用临时生效
$ ifconfig eth2 192.168.2.100
$ ifdown eth2
#机器1 Master-data1
ETH1:inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 #管理
ETH2:inet addr:192.168.2.100 #心跳
#机器2 Master-data2
ETH1:inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
ETH2:inet addr:192.168.2.101 #心跳
##Step2.配置主机名
[root@WeiyiGeek ~]$ hostname Master-data1
[root@WeiyiGeek ~]$ sed -i 's/HOSTNAME=WeiyiGeek/HOSTNAME=Master-data1/g' /etc/sysconfig/network
[root@WeiyiGeek ~]$ sed -i 's/HOSTNAME=WeiyiGeek/HOSTNAME=Master-data2/g' /etc/sysconfig/network
#两台机器上分别运行
cat >> /etc/hosts<<eof
192.168.1.100 Master-data1
192.168.1.101 Master-data2
eof
#判断能否相互通信
[root@Master-data1 ]# ping Master-data2
64 bytes from Master-data2 (192.168.1.101): icmp_seq=1 ttl=64 time=0.415 ms
64 bytes from Master-data2 (192.168.1.101): icmp_seq=2 ttl=64 time=0.545 ms
[root@Master-data2 ]# ping Master-data1
64 bytes from Master-data1 (192.168.1.100): icmp_seq=1 ttl=64 time=1.04 ms
64 bytes from Master-data1 (192.168.1.100): icmp_seq=2 ttl=64 time=0.796 ms
Tips: hosts配置在heartbeat服务中会用到,后文的drbd及存储高可用性能配置都会用到;在实际的生产环境中会把所有机器名对应上所有的机器IP地址;
#Step3.心跳连接配置(实际添加两条主机路由)
route add -host 192.168.2.101 dev eth2 #Master-data1 (对端的IP)
route add -host 192.168.2.100 dev eth2 #Master-data2
echo '/sbin/route add -host 192.168.2.101 dev eth2' >> /etc/rc.local #配置开机自动配置,同上
$ route -n #查看路由
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.101 0.0.0.0 255.255.255.255 UH 0 0 0 eth2 #Master-data1 (对端的IP)
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.100 0.0.0.0 255.255.255.255 UH 0 0 0 eth2 #Master-data2
#Step4.安装Heartbeat3.x软件包
TIPS:先yum search heartbeat看看是否有相关可以下载的包;没有的话下载安装epel扩展 (注意选中对应的版本)
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
yum install -y epel-release #或者
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm #注意系统版本
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 #导入key
[root@Master-data[1/2] ~]# rpm -qa | grep epel
epel-release-6-8.noarch
#进行yum安装heartbeat (您也可选中编译安装)
TIPS:yum 安装rpm包安装后本地不清除的方法 sed -i "s/keepcache=0/keppcache=1/g" /etc/yum.conf
$ yum install heartbeat* -y
#Step5.配置文件
[root@Master-data1 ha.d]$ cd /usr/share/doc/heartbeat-3.0.4/ #配置模板目录
$ cp ha.cf haresources authkeys /etc/ha.d/ # authkeys(600权限)
## ha.cf 文件配置
[root@Master-data1 ha.d]$ vim ha.cf
[root@Master-data1 ha.d]# grep -v -E "^#" ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0 #以上为日志配置
keepalive 2
deadtime 30
warntime 10
initdead 120 #以上为基础参数,配置不需要改动
#关键点(多播的网卡)
mcast eth1 225.0.0.11 694 1 0 #注意这里是11 netmask (关键点)子网掩码对应
auto_failback on
node Master-data1
node Master-data2
## authkeys 文件配置
[root@Master-data1 ha.d]$ chmod 600 authkeys
[root@Master-data1 ha.d]$ vim authkeys
auth 2
2 sha1 HI! #这里HI是密匙
## haresources 文件配置
[root@Master-data1 ha.d]$ vim haresources
#node-name resource1 resource2 ... resourceN
45 Master-data1 IPaddr::192.168.1.10/24/eth1 #这里的IP 网卡 与 mcast 参数是存在关联的 (关键点)
46 Master-data2 IPaddr::192.168.1.11/24/eth1
#Step6.拷贝配置文件到Master-data2中 (注意如果对应IP网卡不对就需要修改)
[root@Master-data1 ha.d]$ tar -zcvf test.tar.gz ha.cf authkeys haresources
[root@Master-data2 ha.d]$ scp root@192.168.1.100:/etc/ha.d/test.tar.gz /etc/ha.d/
$ tar -zxvf test.tar.gz
#Step7. 启动heartbeat
[root@Master-data1 ha.d]$ /etc/init.d/heartbeat start
[root@Master-data2 ha.d]$ /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
INFO: Resource is stopped
Done.
正常情况需要等待120s来恢复网络:
[root@Master-data1 ha.d]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth1 #虚拟VIP
inet 192.168.2.100/24 brd 192.168.2.255 scope global eth2
[root@Master-data2 ha.d]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.101/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth1 #虚拟VIP
inet 192.168.2.101/24 brd 192.168.2.255 scope global eth2
#Step8. 切换延时
#服务器停掉/网卡down掉/heartbeat服务关闭(停掉Master-data1)
[root@Master-data1 ha.d]$ /etc/init.d/heartbeat stop
$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth1
#此时Master-data2进行接管 (当Master-data1 重新启动后将会自动进行接管)
[root@Master-data2 ha.d]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.101/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth1
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth1
目的:通过一个WEB服务高可用案例熟悉heartbeat软件的使用,在上面基础之上进行实现; 环境:安装 httpd (不多说)
步骤流程:
1. 配置httpd首页将Master-data1 / Master-data2分别写入index.html
[root@Master-data1 ~]$ echo "Master-data1 192.168.1.100" > /var/www/html/index.html
[root@Master-data2 ~]$ echo "Master-data2 192.168.1.101" > /var/www/html/index.html
2. 配置host域名来解析(判断VIP是不是被漂移)
[root@Master-data2 ~]$ echo '192.168.1.10 www.demo.org' >> /etc/hosts
[root@Master-data2 ~]$ ping www.demo.org
PING www.demo.org (192.168.1.10) 56(84) bytes of data.
3.开启主备的httpd与heartbeat服务
[root@Master-data1 ~]$ /etc/init.d/heartbeat start
$ service httpd start
Starting httpd: [ OK ]
[root@Master-data2 ~]$ /etc/init.d/heartbeat start
$ /etc/init.d/httpd start
Starting httpd: [ OK ]
4.模式释放 #[Master-data1] 上执行
[root@Master-data1 html]$ /usr/share/heartbeat/hb_standby #[Master-data1] heartbeat3.0.4
Going standby [all].
5.实现的效果
[root@Master-data2 ~]$ curl www.demo.org #(master-data1 释放前)
Master-data1 192.168.1.100
[root@Master-data2 ~]$ curl www.demo.org #(master-data1 释放后)
Master-data2 192.168.1.101
6.此时以将漂移到Master-data2上
[root@Master-data2 ~]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.101/24 brd 192.168.1.255 scope global eth3
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth3
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth3
7.恢复接管
/usr/share/heartbeat/hb_takeover #heartbeat3.0.4
[root@Master-data1 html]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth1
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth1
第二种方式: 让heartbeat负责httpd启动同时负责vip启动
#Step1.将httpd放权给heatbeat
chkconfig httpd off #分别关闭httpd自启动
#Step2.配置http服务启动脚本(由于yum安装已经制动就有了) [Master-data1/2 配置一致]
[root@Master-data1 ha.d]$ cp /etc/init.d/httpd /etc/ha.d/resource.d #拷贝到hb默认脚本目录中
#step3.修改haresource 加上httpd启动脚本 [Master-data1/2 配置一致]
[root@Master-data1 ha.d]$ vim haresources
Master-data1 IPaddr::192.168.1.10/24/eth1 httpd #注意这里只需要配置一个httpd 服务即可(随着VIP漂移而开启与停止)
Master-data2 IPaddr::192.168.1.11/24/eth1
#step4.验证查看
[root@Master-data1 ha.d]$ netstat -tlnp | grep "httpd" #没有启动
[root@Master-data1 ha.d]$ /etc/init.d/heartbeat start #主节点开启heartbeat
[root@Master-data1 resource.d]$ netstat -tlnp | grep "httpd" #等待120s后启动
tcp 0 0 :::80 :::* LISTEN 12984/httpd
[root@Master-data2 ha.d]$ curl www.demo.org
Master-data1 192.168.1.100
#Step5.当主备同时启动heartbeat时候
#Master-data1 heartbeat/主机挂了才会httpd 启动 (默认在Master-data1启动)
#还是会在Master-data1主机进行启动httpd,这时候停止该主机上的heartbeat便会进行漂移到data2上是;
[root@Master-data2 ha.d]$ netstat -tlnp | grep "httpd"
tcp 0 0 :::80 :::* LISTEN 12063/httpd
[root@Master-data2 ha.d]$ curl www.demo.org
Master-data2 192.168.1.101
#可以通过log文件观察 httpd 停止/启动
ResourceManager(default)[14023]:
2019/04/09_23:32:35 info: Releasing resource group: master-data1 IPaddr::192.168.1.10/24/eth1 httpd
ResourceManager(default)[14023]:
2019/04/09_23:32:35 info: Running /etc/ha.d/resource.d/httpd stop
注意事项:
0.heartbeat释放模拟脚本
#完全释放
/usr/lib64/heartbeat/hb_standby
/usr/share/heartbeat/hb_standby #heartbeat3.0.4
#完全接管
/usr/lib64/heartbeat/hb_takeover
/usr/share/heartbeat/hb_takeover #heartbeat3.0.4
1.配置文件讲解 ha.cf
vim /etc/ha.d/ha.cf
24 debugfile /var/log/ha-debug #调试日志文件,取默认值
29 logfile /var/log/ha-log #系统日志文件,取默认值
34 ogfacility local0 #在syslog服务中配置通过local1设备接收日志 表示使用系统日志与上面只能开启一个
48 keepalive 2 #心跳频率,可以自己设定 heartbeat 之间的时间间隔为 2 秒。也可以200ms 表示200毫秒
56 deadtime 30 #节点死亡时间的阀值,就是从节点在过了 30 秒后还没有收到心跳就认为主节点死亡
61 warntime 10 #指定心跳延迟的为10S,当10s内备份节点不能接收到主节点的心跳信号,并在日志中发出“late heartbeat“警告前等待的时间,
71 initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
76 udpport 694 #心跳信息传递的UDP端口,使用端口 694 进行 bcast 和 ucast 通信。这是默认的,并且在 IANA 官方注册的端口号。
#baud 19200 #串行端口的波特率
#serial /dev/ttyS0 # Linux #串口的接口名
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cuad0 # FreeBSD 6.x
#serial /dev/cua/a # Solaris
#bcast eth0 # Linux #传播心跳的广播网卡信息
#bcast eth1 eth2 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solaris
91 #bcast eth0 #表示在 eth0 接口上使用广播 heartbeat(将 eth1 替换为 eth0, eth2,或者您使用的任何接口),心跳网卡,如果你有两个网卡,可以写成 eth1
#重点需要更网卡的物理ip在一个网段
113 mcast eth0 225.0.0.1 694 1 0 #说明:采用udp多播播来通知心跳(稳定), D类地址建议在副节点不只一台时使用(默认端口694) 多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
121 #ucast eth0 192.168.1.64 #需要修改,表示从本机的 eth0 接口发心跳消息给对方节点,写另一端的IP 地址。这是单播地址。 xuegod64 上改为 192.168.1.63
157 auto_failback on #默认启用,当 auto_failback 设置为 on 时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为 off,主节点便不能重新获得资源。
211 node Master-data1 #(主节点)需要修改,该选项是必须配置的。集群中机器的主机名,与“uname –n”的输出相同。
212 node Master-data2 #(备用节点)需要修改
#使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移 有时出现某个进程挂掉 切换需要使用脚本
#ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip
220 ping 192.186.1.254 #需要修改,通过ping命令实现仲裁
253 respawn hacluster /usr/libexec/heartbeat/ipfail #当ping不通时 自动调用 ipfail这个脚本
259 apiauth ipfail gid=haclient uid=hacluster # 表示有权限操作ipfail脚本的组和用户
157 auto_failback on #auto_failback on 为 on 时,主结点恢复正常后,资源自动转给主结点。建议设为 auto_failback off ,等主节点恢复正常后,在业务不繁忙时,切换回来。防止主节点恢复正常时,回切时,再次影起网络中断。
#crm no #是否开启Cluster Resource Masnger(集群资源管理)功能;(一般不用)
authkeys 文件:
# 注意该文件权限必须是600
auth 1 # 设置认证的方法
#1 crc # 不安全
#2 sha1 HI! #推荐使用
#3 md5 Hello!
haresource 文件:
#指定节点主机名,和VIP地址,以双冒号分隔资源,此处以apache为例进行配置
#主备节点 VIP漂移IP
data-1-1 IPaddr::10.0.0.100/24/eth0
data-1-2 IPaddr::10.0.0.101/24/eth0 #当主挂了才进行触发
#参数详解:
data-1-1 : 主机名
IPaddr :Resources.d/ 中的脚本文件
10.0.0.100/24/eth0 : 集群对外服务的VIP,24为子网掩码,eth0为IP绑定的实际物理网卡;为heartbeat提供对外服务的通信接口;
WeiyiGeek.MYSQL集群运维
2.Heartbaet入坑计 建议:查看日志/var/log/ha-log Q:日志分析接管过程?
1.pacemaker support 情况
2.logging daemon
3.heartbeat 版本信息
4.glib:UDP 多播信息发送
5.运行/etc/ha.d/rc.d/status 脚本查看对端的状态;
6.服务异常则接管资源,通过IPaddr脚本
7.广播UDP及VIP地址
8.如果检测对端正常则将结果的资源释放并返回给它 ip-request (请求发送) / ip-request-rsep (请求发送)
Q:两边都显示漂移的VIP地址?
[root@Master-data1 ha.d]$ ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth1 #问题点
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth1
inet 192.168.2.100/24 brd 192.168.2.255 scope global eth3
[root@Master-data2 ha.d]# ip addr | grep -v -E "link|inet6" | grep "192.168"
inet 192.168.1.101/24 brd 192.168.1.255 scope global eth3
inet 192.168.1.10/24 brd 192.168.1.255 scope global secondary eth3 #问题点
inet 192.168.1.11/24 brd 192.168.1.255 scope global secondary eth3
inet 192.168.2.101/24 brd 192.168.2.255 scope global eth5
解决方法:是不是链路有问题,能不能进行通信,防火墙是否被开启(可以关闭/也可以将694端口添加通信规则)
Q:一个LAN中是多组heartbeat服务同时开启的问题? 比如:mcast eth1 225.0.0.1 694 1 0 — 当同一个IDC有多个这样的情况应该使用单播; 如果非要使用多播方式,前提是多播地址不能相同(可选mutiladdr> 224.0.0.0 ~ 239.255.255.255)一般 Router/siwtch等设备都是采用多播形式;
WeiyiGeek.实时同步共享存储
Q:Filesystem脚本问题
#问题
Filesystem(Filesystem_/dev/drbd0)[18085]: 2019/05/14_17:12:48 ERROR: Setup problem: couldn't find command: fuser'
#解决办法
yum install psmisc
Q:从机虚拟机复制的主机开启heartbeat时候报uuid错误
May 15 13:29:21 Szabbix heartbeat: [4467]: WARN: nodename mzabbix uuid changed to szabbix
#解决方法:删除其中一台主机的hd_uuid (重启的时候会自动更新)
[root@Szabbix ~]# rm -rf /usr/local/heartbeat/var/lib/heartbeat/hb_uuid
3.Centos7安装heartbeat在epel源不存在问题 解决方法:描述采用源码编译安装heartbeat即可:
#共用配置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
reboot
hostname data-1
echo "data-1" >> /etc/hostname
echo -e "192.168.1.100 data-1 node1\n192.168.1.100 data-1 node2" >> /etc/hosts
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa
ssh-copy-id root@192.168.1.100 #拷贝公钥到对方机器,就能不使用密码进行登陆ssh
#1.安装基础环境包:
yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc wget psmisc
#2.创建用户和组
groupadd haclient
useradd -g haclient hacluster
#3.官网下载软件包:Reusable-Components-glue、resource-agents、heartbeat
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 -O /opt/heartbeat3.tar.bz2
wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2 -O /opt/glue.tar.bz2
wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz -O /opt/resource-agents.tar.bz2
#4.安装glue
tar xf glue.tar.bz2
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?
#5.安装Resource Agents
tar xf resource-agents.tar.bz2
cd resource-agents-3.9.6/
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?
#6.安装HeartBeat
tar xf heartbeat3.tar.bz2
./bootstrap
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?
#7.配置网卡支持插件文件
mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
#注意:一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
#安装后主要得目录配置文件
heartbeat configuration:
Version = "3.0.6"
Executables = "/usr/local/heartbeat/sbin"
Man pages = "/usr/local/heartbeat/share/man"
Libraries = "/usr/local/heartbeat/lib64"
Header files = "/usr/local/heartbeat/include"
Arch-independent files = "/usr/local/heartbeat/share"
Documentation files = "/usr/local/heartbeat/share/doc/heartbeat"
State information = "/usr/local/heartbeat/var"
System configuration = "/usr/local/heartbeat/etc"
Init (rc) scripts = "/etc/rc.d/init.d"
Init (rc) defaults = "/etc/sysconfig"
Use system LTDL = "yes"
HA group name = "haclient"
HA group id = "1001"
HA user name = "hacluster"
HA user user id = "1001"
Build dopd plugin = "yes"
Enable times kludge = "yes"
#8. 配置heartbeat配置文件(参考上面即可)
#拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d 目录下
cp /usr/local/heartbeat/share/doc/heartbeat/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
vim /usr/local/heartbeat/etc/ha.d/ha.cf
#非常建议使用单播方法 (非常注意网卡 -- 巨坑)
mcast eth2 225.0.0.200 694 1 0 #多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
ucast eth2 192.168.2.100 #对端 - data2上配置
ucast eth2 192.168.2.101 #对端 - data1上配置
vim /usr/local/heartbeat/etc/ha.d/authkeys
vim /usr/local/heartbeat/etc/ha.d/haresources
#指定节点主机名,和VIP地址,以双冒号分隔资源,此处以apache为例进行配置
node1 192.168.1.200 apache::/etc/httpd/conf/httpd.conf
data1 IPaddr::192.168.1.200/24/eth1 #VIP 漂移得IP
data2 IPaddr::192.168.1.201/24/eth1
#9.设置权限非常重要
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
chown -R root:haclient /usr/local/heartbeat/
[root@data1 heartbeat]# ip addr | grep "192.168"
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.201/24 brd 192.168.1.255 scope global secondary eth1:0
inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth1:1
inet 192.168.2.100/24 brd 192.168.2.255 scope global noprefixroute eth2
WeiyiGeek.测试接管
4.如何配置nfs的高可用
#配置NFS共享存储
#在建立NFS的服务器上建立NFS存储:
yum install nfs-utils rpcbind
systemctl start rpcbind
systemctl start nfs
cat /etc/exports #建立NFS共享存储
/data 192.168.146.0/24(ro)
mkdir /data #建立测试文件
echo '<h1>nfs server</h1>' > /data/index.html
#然后修改haresources配置文件添加自动挂载nfs资源:
node1.pjy.com IPaddr::192.168.146.222/24/ens33 Filesystem::192.168.146.151:/data::/var/www/html::nfs::ro apache::/etc/httpd/conf/httpd.conf
pz142 IPaddr::192.168.146.222/24/eth0 drbddisk::nfddrbd Filesystem::/dev/drbd0::/data/image::ext4 killnfsd
#kulllnfsd脚本
#killall -9 nfsd; /etc/init.d/nfs restart; /etc/init.d/nfs restart; exit 0
#重启heartbeat服务加载配置
systemctl restart heartbeat
ssh node2 'systemctl restart heartbeat'
#测试是否加载资源:
ip addr
netstat -lntup
mount
#资源转移测试:
/usr/local/heartbeat/share/heartbeat/hb_standby