准备工作: web1,web2
1. 修改主机名, 永久生效
- # VIM /etc/sysconfig/network
- HOSTNAME=web1.cn
2. 解析
- # VIM /etc/hosts
- 192.168.1.63 web1.cn
- 192.168.1.64 web2.cn
3. 关防火墙, 关掉 selinux
- # iptables -F
- # getenforce
- Permissive
配置 NFS 为 NFS 服务器, 提供存储资源
安装 NFS 服务器:(3 台主机均安装)
- [[email protected] ~]# yum -y install nfs-utils
- [[email protected] ~]# mkdir /wwwdir
- [[email protected] ~]# echo 'Heartbeat Web test!'> /wwwdir/index.html
- [[email protected] ~]#cat /etc/exports
- /wwwdir 192.168.1.0/24(rw)
配置好目录权限:
- [[email protected] ~]# ll -d /wwwdir/
- drwxr-xr-x 2 root root 4096 May 29 18:52 /wwwdir/
- [[email protected] ~]# chmod 777 -R /wwwdir/
- [[email protected] ~]# ll -d /wwwdir/
- drwxrwxrwx 2 root root 4096 May 29 18:52 /wwwdir/
开启 nfs 服务
- [[email protected] ~]# systemctl start nfs
- [[email protected] ~]# systemctl enable nfs
- [[email protected] ~]# showmount -e 查看一下
web1 测试 nfs 存储挂载并安装 httpd Web 服务器:
- [[email protected] ~]# yum install nfs-utils httpd -y
- [[email protected] ~]# systemctl start nfs
- [[email protected] ~]# showmount -e 192.168.1.62
- Export list for 192.168.1.62:
- /wwwdir 192.168.1.0/24
- [[email protected] ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/HTML/
- [[email protected] ~]# systemctl start httpd
测试:
- [[email protected] ~]# yum install elinks -y
- [[email protected] ~]# elinks --dump 192.168.1.63
- Heartbeat Web test!
卸载资源: 后期这些资源通过 heartbeat 直接加载
- [[email protected] ~]# umount /var/www/HTML/
- [[email protected] ~]# systemctl stop httpd
- [[email protected] ~]# systemctl disable httpd
web2 测试 nfs 存储挂载并安装 httpd Web 服务器:
- [[email protected] ~]# cat /etc/sysconfig/network
- NETWORKING=yes
- HOSTNAME=web2.cn
- [[email protected] ~]# scp /etc/hosts 192.168.1.64:/etc/
- [[email protected] ~]# yum install nfs-utils httpd -y
- [[email protected] ~]# systemctl start nfs
- [[email protected] ~]# showmount -e 192.168.1.62
- Export list for 192.168.1.62:
- /wwwdir 192.168.1.0/24
- [[email protected] ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/HTML/
- [[email protected] ~]# systemctl start httpd
测试:
- [[email protected] ~]# yum install elinks -y
- [[email protected] ~]# elinks --dump 192.168.1.64
- Heartbeat Web test!
卸载资源: 后期这些资源通过 heartbeat 直接加载
- [[email protected] ~]# umount /var/www/HTML/
- [[email protected] ~]# systemctl stop httpd
- [[email protected] ~]# systemctl disable httpd
web1 安装 heartbeat
heartbeat 在 Ceontos7 下编译步骤
下载: http://www.linux-ha.org/wiki/Downloads, 从官方下载最新的 HeartBeat 版本:
- Heartbeat 3.0.6
- Cluster Glue 1.0.12
- Resource Agents 3.9.6
1. 配置基础环境(配置好网络 yum 源)
安装依赖包
yum install -y bzip2 bzip2-devel gcc gcc-c++ autoconf automake libtool e2fsprogs-devel glib2-devel libxml2 libxml2-devel libtool-ltdl-devel asciidoc libuuid-devel docbook
如果 LTDL 包安装不成功, 下载 rpm 包安装:
rpm -ivh libtool-ltdl-devel-2.4.2-22.el7_3.x86_64.rpm
2. 编译 Cluster Glue
- # tar jxf Reusable-Cluster-Components-glue.tar.bz2
- # cd Reusable-Cluster-Components-glue--0a7add1d9996/
- # groupadd haclient 创建用户组
- # useradd -g haclient hacluster 创建用户
- # ./autogen.sh
- # ./configure --prefix=/usr/local/heartbeat/
- # make && make install
3. 编译 Resource Agents
- # tar -zxf resource-agents-3.9.6.tar.gz
- # 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
4. 编译 Heartbeat
- # tar -jxvf Heartbeat-3.0.6.tar.bz2
- # cd Heartbeat-3-0-958e11be8686/
- # ./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
生成配置文件:
- # cd /usr/local/heartbeat/etc/ha.d/
- # cp /root/Heartbeat-3-0-958e11be8686/doc/{
- ha.cf,haresources,authkeys
- } .
- # chkconfig --add heartbeat
- # chkconfig heartbeat on
- # chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
- # 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/
- #
- # ln -sv /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
5,Heartbeat 配置
Heartbeat 的配置主要涉及到 ha.cf,haresources,authkeys 这三个文件.
ha.cf: 主配置文件,
haresource: 用来配置要让 Heartbeat 托管的服务,
authkey: 是用来指定 Heartbeat 的认证方式.
1 配置 ha.cf---- 主配置文件
- # VIM /usr/local/heartbeat/etc/ha.d/ha.cf (注: 前面数字是行号)
- 24 debugfile /var/log/ha-debug ## 用于记录 heartbeat 的调试信息
- 29 logfile/var/log/ha-log ## 用于记录 heartbeat 的日志信息
- 34 logfacilitylocal0 ## 设置 heartbeat 的日志, 这里用的是系统日志
- 48 keepalive 2 ## 设定心跳 (监测) 时间时间为 2 秒
- 56 deadtime 30 ## 指定若备用节点在 30 秒内未收到主节点心跳信号, 则接管主服务器资源
- 61 warntime 10 ## 指定心跳延迟的时间为 10 秒, 10 秒内备节点不能接收主节点心跳信号,
即往日志写入警告日志, 但不会切换服务
- 71 initdead 60 ## 系统启动或重启后预留的忽略时间段, 取值至少为 deadtime 的两倍
- 76 udpport 694 ## 广播 / 单播通讯使用的 Udp 端口
- 91 #bcast ens32 # Linux ## 使用网卡 eno32 发送心跳检测
- 113 #mcast eth0 225.0.0.1 694 1 0 ## 采用网卡 eth0 的 Udp 多播来组织心跳, 一般在备用节点
Bcast,ucast 和 mcast 分别代表广播, 单播和多播, 是组织心跳的的方式, 任选其一
- 121 ucast ens32 192.168.2.65 ## 采用网卡 eth32 的 udp 单播来组织心跳, 后面跟的 IP 地址为双机对方 IP 地址
- 157 auto_failback on ## 定义当主节点恢复后, 是否将服务自动切回
- 211 node web1.cn ## 主节点名称
- 212 node web2.cn ## 备用节点名称
- 220 ping 192.168.2.1 ## 通过 ping 网关检测心跳是否正常, 仅用来测试网络
- 253 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail ## 指定和 heartbeat 一起启动, 关闭的进程
- 259 apiauth ipfail gid=haclient uid=hacluster ## 设置启动 IPfail 的用户和组
2 配置 haresources----- 资源文件
Haresources 文件用于指定双机系统的主节点, 集群 IP, 子网掩码, 广播地址及启动服务集群资源, 文件每一行可包含一个或多个资源脚本名, 资源间使用空格隔开, 参数间使用两个冒号隔开, 主节点和备份节点中资源文件 haresources 要完全一样
一般格式为:
node-name network <resource-group>
node-name 表示主节点的主机名, 必须和 ha.cf 文件中指定的节点名一致. network 用于设定集群的
IP 地址, 子网掩码和网络设备标识等. resource-group 用于指定需 Heartbeat 托管的服务(即这些
服务可由 Heartbeat 来启动和关闭).
注意: 这里指定的 IP 地址就是集群对外服务的 IP 地址
如要托管这些服务, 必须将服务写成可通过 start/stop 来启动或关闭的脚本, 放到 / etc/init.d/
或 / etc/ha.d/resource.d / 目录下, Heartbeat 会根据脚本名称自动去 / etc/init.d 或者
/etc/ha.d/resource.d 目录下找到相应脚本进行启动或关闭操作.
例:
- # VIM /usr/local/heartbeat/etc/ha.d/haresources (注: 前面数字为行号)
- 44 web1.cn IPaddr::192.168.2.111/24/ens32 Filesystem::192.168.2.62:/wwwdir::/va
- r/www/HTML::nfs httpd
注: web1.cn 是主服务器的主机名, web2 上不需要修改. 这样资源默认会加一这个主机上. 当 web1 坏了, web2 会再接管.
- IPaddr::192.168.2.111/24/eth32 #指定 VIP 及绑定到哪个网卡上
- Filesystem::192.168.2.62:/wwwdir::/var/www/HTML::nfs #指定要挂载的存储
- httpd #指定要启动的服务. 这个服务必须是在 / etc/init.d 下或者 / usr/local/heartbeat/etc/ha.d/resource.d 目录下
3 配置 authkeys----- 心跳密钥验证文件
- #VIM /usr/local/heartbeat/etc/ha.d/authkeys
- auth 3
- 3 md5 Hello!
注: auth 后填序号, 可任意填写, 但第二行开头必须为序号名, 然后为验证方式, 支持三种 ( crc md5 sha1 ) 方式验证, 最后面是自定义密钥. 我应该选哪种验证?
如果 Heartbeat 运行于安全网络之上, 如本例中的交叉线, 可以使用 crc, 从资源的角度来看, 这是代价最低的方法. 如果网络并不安全, 但也希望降低 CPU 使用, 则使用 md5. 最后, 如果想得到最好的认证, 而不考虑 CPU 使用情况, 则使用 sha1, 它在三者之中最难破解.
4 编写 httpd 启动脚本
- # VIM /usr/local/heartbeat/etc/ha.d/resource.d/httpd
- #!/bin/bash
- /bin/systemctl $1 httpd
- # chmod 755 !$
5 复制配置文件至备机
# scp -rp /usr/local/heartbeat/etc/ha.d/* [email protected]:/usr/local/heartbeat/etc/ha.d/
测试:
手动加载 VIP 192.168.1.111 到 ens32 上
- [[email protected] ~]# cd /usr/local/heartbeat/etc/ha.d/resource.d
- [[email protected] resource.d]# ./IPaddr 192.168.1.111/24/ens32 start
- IPaddr[7116]: INFO: Success
- INFO: Success
查看 VIP:
[[email protected] ~]# ifconfig #可以看到 ens32:1 的 IP 为: 192.168.1.111
手动加载 NFS 存储资源到 / var/www/HTML (加载需要 fuser 支持, yum install psmisc -y)
- [[email protected] resource.d]# ./Filesystem 192.168.1.62:/wwwdir /var/www/HTML/ nfs start
- Filesystem[23567]: INFO: Success
- INFO: Success
- [[email protected] ~]# ls /var/www/HTML/index.HTML
- /var/www/HTML/index.HTML
- [[email protected] ~]# df -h
- .........
- 192.168.2.62:/wwwdir 18G 1.1G 17G 6% /var/www/HTML
手动启动 httpd 服务
[[email protected] ~]# systemctl start httpd
测试打开主服务页面 http://192.168.1.63
web2 上配置 heartbeat
修改文件权限:
[[email protected] ~]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys #此文件必须是 600 权限 否则 heartbeat 启动不成功
修改单播地址:
[[email protected] ~]# VIM /usr/local/heartbeat/etc/ha.d/ha.cf
改:
ucast ens32 192.168.1.64
为:
ucast ens32 192.168.1.63
挂载需要 fuser 支持, yum install psmisc -y
两机器启动 heartbeat 服务:
- [[email protected] ~]# /etc/init.d/heartbeat restart
- [[email protected] ~]# /etc/init.d/heartbeat restart
查看端口号:
- [[email protected] ~]# netstat -antup | grep 694
- udp 0 0 0.0.0.0:694 0.0.0.0:* 6895/heartbeat: wr
查看端口号:
- [[email protected] ~]# netstat -antup | grep 694
- udp 0 0 0.0.0.0:694 0.0.0.0:* 6895/heartbeat: wri
在 web1 查看集群资源:
- [[email protected] ~]# ifconfig #查看 VIP 加载
- ens32:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- .NET 192.168.1.111 netmask 255.255.255.0 broadcast 192.168.1.255
- ether 00:0c:29:f0:fc:2c txqueuelen 1000 (Ethernet) [[email protected] ~]# df -h
- [[email protected] ~]# df -h #查看挂载
- .........
- 192.168.2.62:/wwwdir 18G 1.1G 17G 6% /var/www/HTML
- [[email protected] ~]# netstat -anput | grep httpd #查看 httpd
web2 上查看, 没有任务资源:
- [[email protected] ~]# ifconfig
- [[email protected] ~]# df -h
- [[email protected] ~]# netstat -anput | grep httpd
通过 VIP 测试:
两台主机都开启时, 所有请求到转到了 web1 上. 访问: http://192.168.1.111/ 正常
当掉 web1, 关闭网卡, 等 30 秒钟, 所有请求都转到 web2 上了
- [[email protected] ha.d]# ifdown ens32
- [[email protected] ~]# ifconfig
- ...
- eth0:0 Link encap:Ethernet HWaddr 00:0C:29:48:80:95
- .NET addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.255.0
- [[email protected] ~]# df -h
- ...
- 192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/HTML
- [[email protected] ~]#systemctl status httpd
- httpd (pid 6375) is running...
web1 上把 ens32 网卡再次开启:
[[email protected] ~]# ifup ens32
等 30 秒后, 查看:
- [[email protected] ~]# df -h
- ...
- 192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/HTML #已经加载了 httpd 资源
- [[email protected] ~]# systemctl status httpd
- httpd (pid 27097) is running...
- [[email protected] ~]# ifconfig
- ...
- eth0:0 Link encap:Ethernet HWaddr 00:0C:29:12:EC:1E
- .NET addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.255.0
资源已经回切过来.
在 web2 上查看释放资料:
- [[email protected] ~]# ifconfig #查看不到 ens32:0 192.168.1.111 这个 IP 地址
- [[email protected] ~]# df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda2 9.7G 3.7G 5.5G 41% /
- tmpfs 569M 0 569M 0% /dev/shm
- /dev/sda1 194M 28M 157M 15% /boot
- /dev/sr0 3.4G 3.4G 0 100% /mnt
- [[email protected] ~]# service httpd status
- httpd is stopped
扩展:
heartbeat 自带的断网切换的工具 - ipfail
ipfail 断网切换的原理
关于 ipfail 这个断网切换的原理很简单, 首先 heartbeat 要判断自己的网络是否正常其实就是通过 ping 某个 ip, 如果可以 ping 的通, 说明网络是通的, 如果 ping 不通了, 说明是网络断了, 或者是主服务器的网卡坏了, 然后执行切换的动作.
ping 一个 group 的 ipfail 配置:
ping_group group1 172.16.103.254 172.16.103.212
来源: http://www.bubuko.com/infodetail-3163196.html