Web集群案例实战 -- Keepalived 实现 web 服务高可用
Keepalived 实现 web 服务高可用
- 前言
前言
本环境是基于 Centos 7.8 系统构建 Keepalived 学习环境
具体构建,请参考 Keepalived 环境部署
环境准备
role | host | ip | keepalive-version | httpd-version |
---|---|---|---|---|
MASTER | node01 | 192.168.5.11 | keepalived-2.0.12 | httpd-2.4.6 |
BACKUP | node02 | 192.168.5.12 | keepalived-2.0.12 | httpd-2.4.6 |
Client | node03 | 192.168.5.13 | ---- | ---- |
部署 http服务
---node01[root@node01 ~]# yum install httpd -y[root@node01 ~]# echo "`hostname -I` httpd test page..." > /var/www/html/index.html[root@node01 ~]# systemctl start httpd---node02[root@node02 ~]# yum install httpd -y[root@node02 ~]# echo "`hostname -I` httpd test page..." > /var/www/html/index.html[root@node02 ~]# systemctl start httpd
配置 MASTER
[root@node01 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.5.10 smtp_connect_timeout 30 router_id LVS_DEVEL1}vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 200 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.5.20 }}[root@node01 ~]# systemctl restart keepalived.service
配置 BACKUP
[root@node02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.5.10 smtp_connect_timeout 30 router_id LVS_DEVEL2}vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.5.20 }}[root@node02 ~]# systemctl restart keepalived.service
客户端通过 VIP 访问 web 服务
node01 发生故障后
[root@node01 ~]# systemctl stop keepalived.service [root@node01 ~]# ps -ef | grep keepalivedroot 32598 31955 0 10:19 pts/0 00:00:00 grep --color=auto keepalived
此时 node02 成为 MASTER VIP 漂移到了node02!!!
当node01 web 服务发生故障后
[root@node01 ~]# systemctl start keepalived.service [root@node01 ~]# ps -ef | grep keepalivedroot 32611 1 0 10:21 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -Droot 32612 32611 0 10:21 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -Droot 32614 31955 0 10:21 pts/0 00:00:00 grep --color=auto keepalived[root@node01 ~]# systemctl stop httpd[root@node01 ~]# ps -ef | grep httpdroot 32625 31955 0 10:21 pts/0 00:00:00 grep --color=auto httpd
此时 VIP 在node01 上,且node01 web 服务发生故障…
我们可以通过脚本的方式,keepalive 对web服务进行健康检查!以确保服务的高可用性
---node01[root@node01 ~]# vim /etc/keepalived/check_web_server_keepalive.sh#!/bin/bashwhile truedo http_pid=$(ps -C httpd --no-header | wc -l) echo $http_pid if [ ${http_pid} -eq 0 ] then systemctl start httpd sleep 4 fi http_pid=$(ps -C httpd --no-header | wc -l) if [ ${http_pid} -eq 0 ] then systemctl stop keepalived fi sleep 3done[root@node01 ~]# chmod x /etc/keepalived/check_web_server_keepalive.sh[root@node01 ~]# cd /etc/keepalived/[root@node01 keepalived]# nohup ./check_web_server_keepalive.sh &---node02[root@node02 ~]# vim /etc/keepalived/check_web_server_keepalive.sh#!/bin/bashwhile truedo http_pid=$(ps -C httpd --no-header | wc -l) echo $http_pid if [ ${http_pid} -eq 0 ] then systemctl start httpd sleep 4 fi http_pid=$(ps -C httpd --no-header | wc -l) if [ ${http_pid} -eq 0 ] then systemctl stop keepalived fi sleep 3done[root@node02 ~]# chmod x /etc/keepalived/check_web_server_keepalive.sh[root@node02 ~]# cd /etc/keepalived/[root@node02 keepalived]# nohup ./check_web_server_keepalive.sh &
测试
node02 停止httpd
[root@node01 ~]# systemctl stop httpd
查看node01 web 服务状态
[root@node01 ~]# systemctl is-active httpdactive
node01 web 服务正常响应!!!
停止node01 keepalived 关闭node02 web 服务
[root@node01 ~]# systemctl stop keepalived[root@node01 ~]# systemctl is-active keepalivedunknown[root@node02 keepalived]# systemctl stop httpd
node01 web 服务正常响应!!!来源:https://www.icode9.com/content-4-879351.html
赞 (0)