heartbeat高可用

Configure HA (high availability) in Centos 6 Using Heartbeat | SkrinHitam

简介

Heartbeat-3.X版本以后被分为了4个模块,这些安装包都可以从官网:http://www.linux-ha.org/wiki/Downloads下载得到:
端口号:694

实验:使用heartbeat实现高可用

heartbeat高可用

实验环境准备

web1:192.168.1.10
web2:192.168.1.11
nfs:192.168.1.12
网卡都用net模式

实验流程

修改主机名,hosts文件

web1
hostnamectl set-hostname web1
bash
vim /etc/hosts

192.168.1.10 web1
192.168.1.11 web2
192.168.1.12 nfs

web2
hostnamectl set-hostname web2
bash
vim /etc/hosts

192.168.1.10 web1
192.168.1.11 web2
192.168.1.12 nfs

12端配置nfs服务,共享本网段,创建/share目录,并在目录下写一个测试文件index.html,并输入内容

yum -y install rpcbind nfs-utils
mkdir /share
echo 'Heartbeat Web test!'> /share/index.html
vim /etc/exports
/share 192.168.1.0(rw,sync,no_root_squash)
systemctl start rpcbind
systemctl start nfs
showmount -e

11端,10端下载httpd,尝试挂载nfs
yum install nfs-utils httpd -y
systemctl start httpd
systemctl start nfs
showmount -e 192.168.1.12
mount -t nfs 192.168.1.12:/share /var/www/html/

测试页面是否挂载成功

heartbeat高可用
heartbeat高可用

测试完关闭两端httpd和取消挂载nfs,之后交给heartbeat处理
umount /var/www/html/
systemctl stop httpd
systemctl disable httpd

使用网络源下载
备份本地源
mv /etc/yum.repos.d/local.repo /etc/yum.repos.d/local.bak
挂载阿里云网络源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
挂载阿里云epel源
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all;yum makecache

主备节点安装依赖包
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

主备节同时配置
下载Heartbeat 3.0.6 Cluster Glue 1.0.12 Resource Agents 3.9.6三个包
去下载网站http://www.linux-ha.org/wiki/Downloads

heartbeat高可用
heartbeat高可用

两端添加用户,用户组
groupadd haclient
useradd -g haclient hacluster

编译安装前一定要打个快照,一旦安装出错立刻恢复快照

先配置glue

tar xf 0a7add1d9996.tar.bz2
cd Reusable-Cluster-Components-glue--0a7add1d9996/
./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 $?
cd ..

安装Resource Agents

tar xf 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
echo $?
cd ..

安装HeartBeat

tar xf 958e11be8686.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
echo $?

拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d 目录下 (三个文件分别是认证文件,主配置问文件,资源文件)
cd /usr/local/heartbeat/etc/ha.d/
cp /root/Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} .

配置

chkconfig --add heartbeat
chkconfig heartbeat on
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/

两台机器创建库文件链接
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/

主节点配置

修改主配置文件
vim  /usr/local/heartbeat/etc/ha.d/ha.cf

debugfile /var/log/ha-debug          
##用于记录heartbeat的调试信息
logfile /var/log/ha-log
#指定heartbeat日志文件的位置
logfacility     local0
#设置heartbeat的日志,这里用的是系统日志
keepalive 2
# 心跳发送时间间隔
deadtime 10
# 备用节点10s内没有检测到master机的心跳,确认对方故障
warntime 5
#指定心跳延迟的时间为5秒,5秒内备节点不能接收主节点心跳信号, 即往日志写入警告日志,但不会切换服务
initdead 30
# 守护进程启动30s后,启动服务资源,取值至少为deadtime的两倍。
udpport 694 
#设定集群节点间的通信协议及端口为udp694监听端口(该端口可以修改)
ucast ens33 192.168.1.11
# 另一台主机节点网卡的地址,注意是另一台。
auto_failback on
#当primary节点切换到secondary节点之后,primary节点恢复正常,进行切回操作,但是切换一次mysql master成本很高,一般为off。
node    web1
node    web2
# 定义两个节点的主机名,一行写一个。
ping 192.168.1.2
#两个IP的网关,通过ping网关检测心跳是否正常,仅用来测试网络
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail 
#使用这个脚本去侦听对方是否还活着(使用的是ICMP报文检测),指定和heartbeat一起启动、关闭的进程
apiauth ipfail gid=haclient uid=hacluster     
##设置启动IPfail的用户和组

简介
Bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的的方式,任选其一

配置resources资源文件(该配置文件用于配置 心跳的核心配置)
vim /usr/local/heartbeat/etc/ha.d/haresources
web1 IPaddr::192.168.1.100/24/ens33 Filesystem::192.168.1.12:/share::/var/www/html::nfs httpd

heartbeat高可用

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址及启动服务集群资源,文件每一行可包含一个或多个资源脚本名,资源间使用空格隔开,参数间使用两个冒号隔开,主节点和备份节点中资源文件haresources要完全一样,resource-group用于指定需Heartbeat托管的服务(即这些服务可由Heartbeat来启动和关闭)。如要托管这些服务,必须将服务写成可通过start/stop来启动或关闭的脚本,放到/etc/init.d/或/etc/ha.d/resource.d/目录下,Heartbeat会根据脚本名称自动去/etc/init.d或者/etc/ha.d/resource.d目录下找到相应脚本进行启动或关闭操作。

注:web1是主服务器的主机名, web2上不需要修改。这样资源默认会加一这个主机上。当web1坏了,web2会再接管。

配置authkeys认证文件
 vim /usr/local/heartbeat/etc/ha.d/authkeys

heartbeat高可用

我生成的是
025d3d71f762a68cb56419a06aeb120a

该权限必须为600
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys

简介
auth后填序号,可任意填写,但第二行开头必须为序号名,然后为验证方式,支持三种( crc md5 sha1 )方式验证,最后面是自定义密钥。应该选哪种验证?
如果Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但也希望降低CPU使用,则使用md5。最后,如果想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

编写httpd启动脚本
vim /usr/local/heartbeat/etc/ha.d/resource.d/httpd 

#!/bin/bash
/bin/systemctl $1 httpd

chmod +x !$

拷贝配置文件和脚本到web2
scp -r /usr/local/heartbeat/etc/ha.d/{authkeys,haresources,ha.cf} root@web2:/usr/local/heartbeat/etc/ha.d/
scp /usr/local/heartbeat/etc/ha.d/resource.d/httpd 192.168.1.11:/usr/local/heartbeat/etc/ha.d/resource.d/

从节点配置

去web2中修改
vim /usr/local/heartbeat/etc/ha.d/ha.cf

heartbeat高可用

chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys

测试

测试产生VIP
cd /usr/local/heartbeat/etc/ha.d/resource.d/
./IPaddr 192.168.1.100/24/ens33 start

heartbeat高可用

测试手动加载NFS存储资源到/var/www/html
/usr/local/heartbeat/etc/ha.d/resource.d/Filesystem 192.168.1.12:/share /var/www/html/ nfs start 

heartbeat高可用

systemctl start httpd

测试打开主服务页面查看是否自动挂载成功http://192.168.1.10

heartbeat高可用

卸载目录,等会交给heartbeat管理
umount /var/www/html/

测试漂移
web1、web2先下载进程管理包
yum install psmisc -y
首先先确定web1,web2,都没有开启nfs服务,也没有开启httpd服务,都未进行挂载
两机器都启动heartbeat服务:
systemctl start heartbeat.service

测试端口
netstat -antup | grep 694

heartbeat高可用

测试VIP
ip a

heartbeat高可用

主节点有VIP,从节点没有

测试挂载
df -h

heartbeat高可用

主节点有挂载,从节点没有

测试heartbeat是否自动开启了httpd
netstat -anput | grep httpd

heartbeat高可用

主节点有,从节点没有

浏览器页面输入VIP测试

heartbeat高可用

关掉web1的heartbeat服务,查看漂移,以及web2的挂载状态以及httpd服务状态
成功漂移到web2

heartbeat高可用

成功开启httpd

heartbeat高可用

查看挂载

heartbeat高可用

浏览器页面依然不受影响

heartbeat高可用

而此时,web1的http服务被停止,且共享目录卸载

再次开启web1的heartbeat服务,VIP再次飘回来,此时web2成功取消挂载并且也关闭了httpd服务,实验成功

发布者:LJH,转发请注明出处:https://www.ljh.cool/6102.html

(0)
上一篇 2021年5月23日 上午1:41
下一篇 2021年7月10日 下午9:42

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注