简介
Heartbeat-3.X版本以后被分为了4个模块,这些安装包都可以从官网:http://www.linux-ha.org/wiki/Downloads下载得到:
端口号:694
实验:使用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/
测试页面是否挂载成功
测试完关闭两端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
两端添加用户,用户组
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
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
我生成的是
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
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
测试手动加载NFS存储资源到/var/www/html
/usr/local/heartbeat/etc/ha.d/resource.d/Filesystem 192.168.1.12:/share /var/www/html/ nfs start
systemctl start httpd
测试打开主服务页面查看是否自动挂载成功http://192.168.1.10
卸载目录,等会交给heartbeat管理
umount /var/www/html/
测试漂移
web1、web2先下载进程管理包
yum install psmisc -y
首先先确定web1,web2,都没有开启nfs服务,也没有开启httpd服务,都未进行挂载
两机器都启动heartbeat服务:
systemctl start heartbeat.service
测试端口
netstat -antup | grep 694
测试VIP
ip a
主节点有VIP,从节点没有
测试挂载
df -h
主节点有挂载,从节点没有
测试heartbeat是否自动开启了httpd
netstat -anput | grep httpd
主节点有,从节点没有
浏览器页面输入VIP测试
关掉web1的heartbeat服务,查看漂移,以及web2的挂载状态以及httpd服务状态
成功漂移到web2
成功开启httpd
查看挂载
浏览器页面依然不受影响
而此时,web1的http服务被停止,且共享目录卸载
再次开启web1的heartbeat服务,VIP再次飘回来,此时web2成功取消挂载并且也关闭了httpd服务,实验成功
发布者:LJH,转发请注明出处:https://www.ljh.cool/6102.html