操作系统的版本为Centos7.7,做HA需要用到三个软件包
软件名 | 版本 |
Heartbeat | 3.0.6 |
Cluster Glue | 1.0.12 |
Resource Agents | 3.9.6 |
配置步骤
- 配置两台服务器的IP地址
- 配置两台服务器的计算机名和hosts文件
- 获取三个rpm包并编译安装
- 仅安装并启动apache服务
- 配置Heartbeat并测试
IP地址配置
STEP1:server1地址配置
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.101 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 fe80::20c:29ff:fe8c:5445 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:8c:54:45 txqueuelen 1000 (Ethernet)
RX packets 3090 bytes 251941 (246.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4541 bytes 1524995 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
STEP2:server2地址配置
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.102 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 fe80::20c:29ff:fe87:6fd7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:87:6f:d7 txqueuelen 1000 (Ethernet)
RX packets 2664 bytes 207443 (202.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4273 bytes 1487525 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
修改hosts文件与计算机名
STEP1:server1计算机名配置
echo "server1" > /etc/hostname
STEP2:server1配置hosts文件
echo -e '192.168.5.101 server1\n192.168.5.102 server2' >> /etc/hosts
STEP3:server2计算机名配置
echo "server1" > /etc/hostname
STEP4:server2配置hosts文件
echo -e '192.168.5.101 server1\n192.168.5.102 server2' >> /etc/hosts
获取RPM包并编译安装
STEP1:下载软件包,如果下载有302错误就使用windows下载,完成后在上传到Linux
wget -O ~/Heartbeat-3.0.6 https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
wget -O ~/ClusterGlue-1.0.12 http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
wget -O ~/ResourceAgents-3.9.6 http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
STEP2:安装基础环境
yum install -y gcc gcc-c++ autoconf automake \
libtool glib2-devel libxml2-devel bzip2 bzip2-devel \
e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc
STEP3:解压软件包,并将解压出的目录改为方便看的名字
tar -xf Heartbeat-3-0-958e11be8686.bz2
tar -xf resource-agents-3.9.6.tar.gz
tar -xf Reusable-Cluster-Components-glue--0a7add1d9996.bz2
mv Heartbeat-3-0-958e11be8686/ Heartbeat
mv resource-agents-3.9.6/ resource-agents
mv Reusable-Cluster-Components-glue--0a7add1d9996/ Reusable-Cluster
rm -rf Reusable-Cluster-Components-glue--0a7add1d9996.bz2
rm -rf Heartbeat-3-0-958e11be8686.bz2
rm -rf resource-agents-3.9.6.tar.gz
STEP4:创建组并将用户归纳
groupadd haclient
useradd -g haclient hacluster
STEP5:编译安装Reusabli-Cluster
- 进入家目录下的Reusable-Cluster目录
cd ~/Reusable-Cluster/
- 执行Reusable-Cluster目录下的autogen.sh脚本
./autogen.sh
lib/stonith/Makefile.am:22: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
logd/Makefile.am:23: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
lrm/admin/Makefile.am:36: warning: '%'-style pattern rules are a GNU make extension
lrm/admin/Makefile.am:21: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
lrm/lrmd/Makefile.am:21: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
lrm/test/Makefile.am:23: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
replace/Makefile.am:20: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
autoconf
Now run ./configure
- 看到“Now run ./configure”后,执行configure脚本,后面的参数别忘了
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
cluster-glue configuration:
Version = 1.0.12 (Build: unknown)
Features =
Prefix = /usr/local/heartbeat
Executables = /usr/local/heartbeat/sbin
Man pages = /usr/local/heartbeat/share/man
Libraries = /usr/local/heartbeat/lib
Header files = /usr/local/heartbeat/include
Arch-independent files = /usr/local/heartbeat/share
Documentation = /usr/local/heartbeat/share/doc/cluster-glue
State information = /usr/local/heartbeat/var
System configuration = /usr/local/heartbeat/etc
Use system LTDL = yes
HA group name = haclient
HA user name = hacluster
- 进行编译并安装
make && make install
- 使用echo命令查看执行结果,为零正常
echo $?
0
STEP6:编译安装resource-agents
- 进入家目录下的resource-agents目录
cd ~/resource-agents/
- 执行Reusable-Cluster目录下的autogen.sh脚本
./autogen.sh
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf
autoreconf: running: /usr/bin/autoheader
autoreconf: running: automake --add-missing --copy --no-force
configure.ac:102: installing './compile'
configure.ac:33: installing './config.guess'
configure.ac:33: installing './config.sub'
configure.ac:83: installing './install-sh'
configure.ac:83: installing './missing'
heartbeat/Makefile.am: installing './depcomp'
autoreconf: Leaving directory `.'
Now run ./configure and make
- 看到“Now run ./configure”后,执行configure脚本
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
resource-agents configuration:
Version = UNKNOWN
Build Version = 02beac55c1da0ad99a5a19bd3b2333bcff7e916c
Features =
Prefix = /usr/local/heartbeat
Executables = /usr/local/heartbeat/sbin
Man pages = /usr/local/heartbeat/share/man
Libraries = /usr/local/heartbeat/lib
Header files = /usr/local/heartbeat/include
Arch-independent files = /usr/local/heartbeat/share
Documentation = /usr/local/heartbeat/share/doc/resource-agents
State information = /usr/local/heartbeat/var
System configuration = /usr/local/heartbeat/etc
HA_BIN directory prefix = /usr/local/heartbeat/libexec
RA state files = /usr/local/heartbeat/var/run/resource-agents
AIS Plugins =
- 编译并安装
make && make install
- 使用echo命令查看执行结果,为零正常
echo $?
0
STEP7:编译安装Heartbeat
- 进入家目录下的Heartbeat目录
cd ~/Heartbeat/
- 执行Heartbeat目录下的bootstrap脚本
./bootstrap
configure.ac:260: installing './compile'
configure.ac:15: installing './config.guess'
configure.ac:15: installing './config.sub'
configure.ac:44: installing './install-sh'
configure.ac:44: installing './missing'
buildtools/Makefile.am: installing './depcomp'
cts/Makefile.am:24: installing './py-compile'
autoconf
Now run ./configure.
- 导入环境变量(必须,否则在下一步执行configure脚本时会报错)
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
- 执行configure脚本
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
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 = "1000"
HA user name = "hacluster"
HA user user id = "1000"
Build dopd plugin = "yes"
Enable times kludge = "yes"
- 编译并安装
make && make install
- 使用echo命令查看执行结果
echo $?
0
STEP7:配置网卡支持文件
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 -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/
安装Apache
STEP1:两台服务器安装Apache
yum install -y httpd
STEP2:启动apache并设置为开机自启动
systemctl start httpd
systemctl enable httpd
STEP3:server1配置
echo "This is server1" > /var/www/html/index.html
STEP4:server2配置
echo "This is server2" > /var/www/html/index.html
开始配置Heartbeat
STEP1:将三个配置文件的模版,复制到Heartbeat的主目录下
cp ~/Heartbeat/doc/{authkeys,haresources,ha.cf} /usr/local/heartbeat/etc/ha.d/
STEP2:编辑ha.cf配置文件
debugfile /var/log/ha-debug #调试的日志文件,一般测试建议开启
logfile /var/log/ha-log #表示系统的的日志文件所在路径
logfacility local0 #利用系统的日志系统打印日志
keepalive 2 #心跳时间间隔为2秒,既每两秒发送一次广播
deadtime 30 #在30秒内未收到对方的心跳信号,啧立即切换服务
warntime 10 #如果10秒内备份机联系不上主机则写入警告日志
initdead 120 #在某些情况下,重启网络后需一定时间后才能工作,等待系统初始化
ucast ens33 192.168.5.102 #单播发送心跳报文,语法为:ucast INTERFACENAME REMOTE_ADDRESS
udpport 694 #制定集群节点间通信用的udp端口号
auto_failback on #当主节点恢复后,是否自动切换
node server1 #集群中的计算机名,需要与uname -n的输出一致
node server2 #同上
STEP3:编辑authkeys配置文件,第一行的auth后面跟使用算法序号,第三行的sha1后面跟自定义密码
auth AUTH_NUMBER
#1 crc
2 sha1 AUTH_PASSWORD
#3 md5 Hello!
auth 2
#1 crc
2 sha1 abc.123
#3 md5 Hello!
STEP4:对authkeys文件赋予权限
chmod 600 authkeys
STEP5:编辑haresources配置文件,添加如下内容即可
server1 192.168.5.200 apache::/etc/httpd/conf/httpd.conf
语法为
MASTER_SERVER Virtual_IP ServerName::mainconfigurePATH
STEP6:将这三个配置文件使用scp工具发送到server2即可
scp {authkeys,ha.cf,haresources} [email protected]:/usr/local/heartbeat/etc/ha.d/
STEP7:在Server2编辑/usr/local/heartbeat/etc/ha.d/ha.cf文件,做出如下修改
ucast ens33 192.168.5.102 -----> ucast ens33 192.168.5.101
启动服务并测试
STEP1:启动服务并设置开机自启动
systemctl start heartbeat
systemctl enable heartbeat
STEP2:查看服务运行状态,一定要看,因为Heartbeat服务计算你做错,启动失败,都不会报错,一定要手动查看
systemctl status heartbeat
● heartbeat.service - Heartbeat High Availability Cluster Communication and Membership
Loaded: loaded (/usr/lib/systemd/system/heartbeat.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2019-11-10 06:39:12 EST; 2s ago
Main PID: 99213 (heartbeat)
CGroup: /system.slice/heartbeat.service
├─99213 heartbeat: master control process
├─99215 heartbeat: FIFO reader
├─99216 heartbeat: write: ucast ens33
└─99217 heartbeat: read: ucast ens33
STEP3:ping虚拟地址测试
ping 192.168.5.200
PING 192.168.5.200 (192.168.5.200) 56(84) bytes of data.
64 bytes from 192.168.5.200: icmp_seq=1 ttl=64 time=0.012 ms
^C
--- 192.168.5.200 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.012/0.012/0.012/0.000 ms
STEP4:使用curl测试apache集群
curl 192.168.5.200
This is server1
STEP5:使用heartbeat自带脚本切换节点
/usr/local/heartbeat/share/heartbeat/hb_standby
Going standby [all].
STEP6:在此使用curl测试
curl 192.168.5.200
This is server2