一、前言
HA(high available)高可用,又被叫做双机热备,多用于生产业务系统。两台服务器一台做为主机,一台备用。当主服务器宕机,备用服务器自动接管服务,完成切换。
二、实验环境
1.操作系统版本:centOS7
2.服务器两台,IP地址配置采用一块网卡配置两个IP地址
主节点服务器:hangmaster(主机名)
eth0 IP1:172.16.81.62
eth0 IP2:172.16.81.64
备用节点服务器:hangslave(主机名)
eth0 IP1:172.16.81.63
eth0 IP2:172.16.81.65
漂移IP:172.16.81.61
3.实验拓扑
三、配置
以下两台服务器相同
1.hosts文件配置,
vim /etc/hosts
增加以下内容:
172.16.81.62 hangmaster
172.16.81.63 hangslave
2.关闭操作系统防火墙和selinux
(1)、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
(2)、关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
四、拷贝安装介质
以下两台服务器相同
包括nginx、heartbeat、glue、Resource Agents安装包
五、安装
1.安装依赖组件
以下两台服务器相同
(1)、安装gcc
yum install -y gcc-c++
(2)、安装PCRE pcre-devel
yum install -y pcre pcre-devel
(3)、安装zlib
yum install -y zlib zlib-devel
(4)、安装OpenSSL
yum install -y openssl openssl-devel
2.安装nginx,以下两台服务器相同
(1)、执行
tar -zxvf nginx-1.25.2.tar.gz
cd nginx-1.25.2/
./configure
make&&make install
(2)、添加nginx启动脚本
vim /etc/init.d/nginx
添加以下内容:
#!/bin/sh
# chkconfig: 2345 80 90
# description: Start and Stop nginx
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
kill -INT `cat $PIDFILE` || echo -n "nginx not running"
}
do_reload() {
kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
(3)、注册系统服务
chkconfig --add nginx
chmod a+wrx /etc/init.d/nginx
--注册完成后通过chkconfig --list nginx命令查看,出现下列内容说明添加成功
--2023.11.02补充:
以服务方式注册:
在如下位置创建服务脚本nginx.service
vi /usr/lib/systemd/system/nginx.service
服务脚本内容如下(注意路径要对应,这里的路径是/usr/local/nginx/sbin):
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载系统服务
systemctl daemon-reload
- 1
启动服务
systemctl start nginx.service
(4)、设置权限
chmod a+wrx /etc/init.d/nginx
(5)、
启动nginx服务
service nginx start
(6)、启动nginx服务后,通过浏览器打开nginx首页查看,为了检查HA集群切换效果,建议修改主节点和备用节点首页内容
主节点:
备用节点:
3.编译安装heartbeat
第一步到第四步主节点和备用节点一致
(1)、安装依赖包
yum install -y bzip2 autoconf automake libtool glib2-devel libxml2-devel bzip2-devel libtool-ltdl-devel asciidoc libuuid-devel
(2)、安装glue
tar -zxvf Cluster-Glue-1.0.12.tar.gz
cd Cluster-Glue-1.0.12/
groupadd haclient
useradd -g haclient hacluster
./autogen.sh
./configure --prefix=/usr/local/heartbeat/
make && make install
(3)、安装Resource Agents
tar -zxvf resource-agents-3.9.6.tar.gz
cd resource-agents-3.9.6/
./autogen.sh
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/
vim /etc/ld.so.conf.d/heartbeat.conf
#添加:
/usr/local/heartbeat/lib
ldconfig
make && make install
(4)、安装Heartbeat
tar -zxvf Heartbeat-3.0.6.tar.gz
cd Heartbeat-3.0.6/
./bootstrap
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/
vim /usr/local/heartbeat/include/heartbeat/glue_config.h
/*define HA_HBCONF_DIR “/usr/local/heartbeat/etc/ha.d/”*/ #把这一行用/**/注释掉
make && make install
4.配置Heartbeat
(1)、主节点操作,拷贝配置文件(System configuration = “/usr/local/heartbeat/etc” 默认的配置需要置于 /usr/local/heartbeat/etc目录下 默认该目录不存在配置文件)
cp /usr/local/heartbeat/share/doc/heartbeat/ha.cf /usr/local/heartbeat/etc/ha.d
cp /usr/local/heartbeat/share/doc/heartbeat/authkeys /usr/local/heartbeat/etc/ha.d
cp /usr/local/heartbeat/share/doc/heartbeat/haresources /usr/local/heartbeat/etc/ha.d
(2)、配置authkeys(该文件表示发送心跳时 机器用于验证的key的hash算法 双方必须配置成一致的密码)
vim /usr/local/heartbeat/etc/ha.d/authkeys
增加或者修改:
auth 3 #表示使用id为3的验证 下边需要定义一个3的验证算法,这里要保持一致,输了2下面就对应2,输了3下面就对应3
3 md5 Hello! #口令(Hello!)随便给 主从配置相同即可
修改权限:
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
(3)、配置haresources
该文件表示资源的管理,如果是主机,当主机启动后,自动加载该文件中配置的所有启动资源
vim /usr/local/heartbeat/etc/ha.d/haresources
添加或修改:
hangmaster 172.16.81.61/24/eth0:0 nginx
注意:这里的172.16.81.61是配置的虚拟IP;nginx表示启动的服务,需要在/etc/init.d/目录下有对应启动服务的脚本,注意master为主节点主机名
(4)、修改ha.cf(该配置文件用于配置心跳的核心配置)
vim /usr/local/heartbeat/etc/ha.d/ha.cf
添加或修改:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 172.16.81.63
auto_failback on
node hangmaster
node hangslave
ping 172.16.81.1
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
说明:
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth1 172.16.254.28:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
注意:一般启动时会报错因为 ping和ucast这些配置都需要插件支持 需要将lib64下面的插件软连接到lib目录 才不会抛出异常。注意node节点配置中的主机名
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/
(5)、从节点配置文件以同样方式生成
(6)、从节点修改ha.cf文件,只需将心跳IP改成主节点IP即可
(7)、启动服务(启动heartbeat服务,先启动主节点,再启动从节点)
service heartbeat start
(8)、测试结果:
两台服务器同时启动情况下,访问VIP
当停止主节点后,访问VIP也可以正常访问服务