Keepalived & LVS: 实现web的负载均衡和高可用

 目录

1. 环境介绍
2. LVS DR模型中Realserver上的准备
3. ha上的准备
4. 配置keepalived
5. 测试Realserver的切换
6. failback页面测试
7. keepalived自动切换
8. keepalived切换邮件通告

 1. 环境介绍

A. 192.168.205.111 steppingstone.glinux.top steppingstone
B. 192.168.205.112 rs1.glinux.top rs1
C. 192.168.205.118 rs2.glinux.top rs2
D. 192.168.205.113 ha1.glinux.top ha1
E. 192.168.205.115 ha2.glinux.top ha2
F. alias定义 

  vim /root/.bashrc

alias echop='for i in `seq 1 $COLUMNS`; do echo -n "+"; done'
alias rs='for i in {1..2}; do ssh rs$i'
alias ha='for i in {1..2}; do ssh ha$i'

2. LVS DR模型中Realserver上的准备

A. [root@steppingstone ~]# rs ' cd /proc/sys/net/ipv4/conf/; pwd'; echop; done
B. [root@steppingstone ~]# rs 'echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce'; echop; done #修改arp_announce
C. [root@steppingstone ~]# rs 'echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce'; echop; done
D. [root@steppingstone ~]# rs 'echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore'; echop; done
E. [root@steppingstone ~]# rs ' echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore'; echop; done
F. [root@steppingstone ~]# rs 'ifconfig lo:0 192.168.205.80 broadcast 192.168.205.80 netmask 255.255.255.255 up; ifconfig lo:0'; echop; done #配置vip地址
H. [root@steppingstone ~]# rs 'yum install httpd; echo "<h1>`uname -n`</h1>"> /var/www/html/index.html; service httpd restart'; echop; done #安装web服务

3. ha上的准备

A. [root@steppingstone ~]# ha 'yum install keepalived -y'; echop; done #安装keepalived
B. [root@steppingstone ~]# ha 'yum install ipvsadm -y'; echop; done #安装ipvsadm

4. 配置keepalived

A. [root@ha2 ~]# man keepalived.conf #查看帮助文档
B. [root@ha1 keepalived]# vim keepalived.conf

 1 ! Configuration File for keepalived
 2 
 3 global_defs {
 4 notification_email {
 5 #指定故障发生时通告给的邮件地址 
 6 xxxxx@163.com
 7 }
 8 #发送者信息 
 9 notification_email_from xxxxxx@163.com
10 smtp_server smtp.163.com
11 smtp_connect_timeout 30
12 router_id LVS_DEVEL
13 }
14 vrrp_script chk_schedown {
15 #此处可自定义检测脚本, 0表示测试成功,此处以检测是否存在改文件做测试
16 script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
17 #每两秒检测一次
18 interval 2
19 #如果失败, 优先级减去多少
20 weight -10
21 #失败检测次数,失败2次才是失败
22 fall 2
23 #成功一次, 即时成功
24 rise 1 
25 }
26 vrrp_instance VI_1 {
27 #定义vrrp虚拟路由 
28 state MASTER
29 #定义工作的物理接口
30 interface eth0
31 #两台ha上的虚拟路由id要保持一致
32 virtual_router_id 50
33 #优先级要比备节点大
34 priority 105
35 advert_int 1
36 #定义认证码
37 authentication {
38 #认证类型为简单字符认证
39 auth_type PASS
40 auth_pass keepalivedpass
41 }
42 #定义提供服务的虚拟ip
43 virtual_ipaddress {
44 192.168.205.80/24 dev eth0 label eth0:0
45 }
46 #定义要检查的脚本
47 track_script {
48 chk_schedown
49 }
50 #定义keepalived节点转换通知
51 notify_master "/etc/keepalived/keepalived_notify.sh master 192.168.205.80"
52 notify_backup "/etc/keepalived/keepalived_notify.sh backup 192.168.205.80"
53 notify_fault "/etc/keepalived/keepalived_notify.sh fault 192.168.205.80"
54 }
55 #定义vitual_server
56 virtual_server 192.168.205.80 80 {
57 delay_loop 6
58 lb_algo rr
59 lb_kind DR
60 nat_mask 255.255.255.0
61 #指定是否使用长连接
62 #persistence_timeout 50
63 protocol TCP
64 sorry_server 127.0.0.1 80
65 #指定realserver rs1, 
66 # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK, 可分别针对于http, https, mysql, mail等进行健康状况监测
67 real_server 192.168.205.112 80 {
68 weight 1
69 HTTP_GET {
70 url {
71 path /
72 #http返回状态为200, 说明状态ok
73 status_code 200
74 }
75 #定义超时时间
76 connect_timeout 3
77 #定义重试次数
78 nb_get_retry 3
79 delay_before_retry 3
80 }
81 }
82 real_server 192.168.205.118 80 {
83 weight 1
84 HTTP_GET {
85 url {
86 path /
87 #http返回状态为200, 说明状态ok
88 status_code 200
89 }
90 #定义超时时间
91 connect_timeout 3
92 #定义重试次数
93 nb_get_retry 3
94 delay_before_retry 3
95 }
96 }
keepalived.conf

C. [root@ha1 keepalived]# scp keepalived.conf ha2:/etc/keepalived/ #拷贝到另一台设备上

D. [root@ha2 ~]# vim /etc/keepalived/keepalived.conf #修改ha2上的配置

#配置状态
state BACKUP
#优先级
priority 100

E. [root@steppingstone ~]# ha 'service keepalived start'; echop; done #启动服务
F. [root@steppingstone ~]# ha 'ifconfig'; echop; done #查看网卡状态

G. [root@steppingstone ~]# ha 'ipvsadm -L -n'; echop; done #查看ipvs规则

5. 测试Realserver的切换

A. [root@rs1 ~]# service httpd stop #在一台rs上停止web服务
B. [root@steppingstone ~]# ha 'ipvsadm -L -n'; echop; done

C. 通知邮件

6. failback页面测试

A. [root@steppingstone ~]# ha 'yum install httpd -y; echo "<h1>`uname -n`, RealServer is rairing!</h1>">/www/html/index.html; service httpd start'; echop; done
B. 测试

a. [root@steppingstone ~]# rs 'service httpd stop'; echop; done #停掉realserver
b. [root@steppingstone ~]# ha 'ipvsadm -L -n'; echop; done

c. [root@rs1 ~]# service httpd start

d. [root@steppingstone ~]# ha 'ipvsadm -L -n'; echop; done

7. keepalived自动切换

A. [root@ha1 ~]# touch /etc/keepalived/down #创建文件模拟测试

B. [root@ha1 keepalived]# tail /var/log/messages -f | grep Keepalived #查看日志

8. keepalived切换邮件通告

  • A. [root@ha1 ~]# vim /etc/keepalived/keepalived_notify.sh #编辑邮件通知脚本, 改文件拷贝到ha2上相同位置
    #!/bin/bash
    
    #指定要接收的邮件的联系人
    contact=xxxxxx@163.com
    
    #命令帮助函数
    Usage() {
    echo "Usage: `basename $0` {master|backup|fault} VIP"
    }
    
    #发送邮件函数
    Notify() {
    subject="`hostname`s status changed to $1"
    mailbody="`date "+%F %T"`: `hostname`'s status change to $1, $VIP floating."
    echo $mailbody | mail -s "$subject" -r xxxxxx@163.com $contact
    }
    
    #判断命令使用是否正确
    [ $# -lt 2 ] && Usage && exit
    #接收到vip地址
    VIP=$2
    #判断主题
    case $1 in 
    master)
    Notify master
    ;;
    backup)
    Notify backup
    ;;
    fault)
    Notify fault 
    ;;
    *)
    Usage
    exit 1
    ;;
    esac

B. [root@ha1 ~]# vim /etc/keepalived/keepalived.conf #查看配置文件

vrrp_instance VI_1 {
#定义keepalived节点转换通知
notify_master "/etc/keepalived/keepalived_notify.sh master 192.168.205.80"
notify_backup "/etc/keepalived/keepalived_notify.sh backup 192.168.205.80"
notify_fault "/etc/keepalived/keepalived_notify.sh fault 192.168.205.80"
}

C. 通知邮件

 

 

原文地址:https://www.cnblogs.com/William-Guozi/p/Linux_keepalived.html