iyut 发表于 2016-8-8 09:28:10

Keepalived+LVS实现web高可用负载集群

                      目标:基于LVS的DR模型实现keepalived高可用负载集群


拓扑图:

一、准备好DR模型的Real server1和Realserver2两个节点
1、此处我就用脚本来快速的部署这两个节点,脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
vip=192.168.1.100
interface="lo:0"

case $1 in            
start)                  
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $interface $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev $interface                     
;;                              

stop)                  
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $interface down      
;;            
status)               
if ifconfig lo:0 |grep $vip &> /dev/null; then
echo "ipvs is running."               
else                           
echo "ipvs is stopped."               
fi                              
;;                              

*)
echo "Usage: `basename $0` {start|stop|status}"
exit 1
esac




2、分别为两个节点配置web服务,用于测试使用。

1
2
3
4
# yum -y install httpd
# echo "Rserver111" > /var/www/html/index.html
# service httpd start
#######Realserver2同样操作即可





二、配置director1和director2为keepalived的,并且为主和从模式:
Director1:

1
# yum -y install keepalived###安装keepalived程序包





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
! Configuration File for keepalived

global_defs {###全局配置段
   notification_email {###通知邮件发送给哪个地址
      root@localhost
   }
   notification_email_from keepalived@localhost###发件人地址
   smtp_server 127.0.0.1 ##邮件服务器监听地址
   smtp_connect_timeut 30##超时时间
   router_id node1##路由id标识
   vrrp_mcast_group4 224.0.0.100 ###组播地址,几个director需要相同
}


vrrp_instance VI_1 {
    state MASTER##当前节点虚拟路由的初始状态
    interface eno16777736 ###vrrp绑定的接口
    virtual_router_id 51 ##虚拟路由的vrid好,范围是0-255
    priority 100 ###优先级别,范围是1-254
    advert_int 1 ###vrrp通告间隔时间,单位秒
    authentication {   ###定义认证类型和具体的方式
      auth_type PASS###基于简单密码认证
      auth_pass 121212   ###密码,一般不超过8个字符串,主从需要相同
    }
    virtual_ipaddress {定义vip地址,需要同RS相同
      192.168.1.100
    }   


virtual_server 192.168.1.100 80 {###定义Vs的IP地址和端口号
    delay_loop 3##设定RS的检测试剂间隔,默认单位为s
    lb_algo rr##指定地址分配的算法
    lb_kind DR##指定RS的模型
#    persistence_timeout 50##连接超时时长
    net_mask 255.255.255.0
    protocol TCP
    sorry_server 127.0.0.1 80####sorry服务器地址,如果服务都挂了,那么sorry服务器将响应




    real_server 192.168.1.102 80 {##定义Rs1的IP地址及端口号
      weight 1 ###设置RS的权重
      HTTP_GET {###设置Rs的健康检测方式
            url {
            path /index.html ###设置检测资源路径
            #digest 640205b7b0fc66c1ea91c463fac6334d
            status_code 200 ##设置采用status_conde方式验证健康
            }
            connect_timeout 3 连接超时时长
            nb_get_retry 3 ##重试次数
            delay_before_retry 3 ###重试前延迟时长
      }
    }   



real_server 192.168.1.108 80 {####定义RS2的地址和端口号
      weight 1
      HTTP_GET {
            url {
            path /index.html
            #digest 640205b7b0fc66c1ea91c463fac6334d
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
      }
    }
}




ok,director1就基本上搞定了,现在复制本配置文件到director2中做下修改就可以了,此处我就省了。等两边修改好了启动服务,就可以测试了。。

三、简单的监控脚本的使用配置;
a)监控vip流动状态的通知脚本:
1、建立vip状态通知脚本,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
contact='root@localhost' ##定义收件人

notify() {
mailsubject="$(hostname) to be $1, vip floating."
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac      




2、编辑配置文件添调用通知脚本:

1
2
3
4
5
6
7
vrrp_instance VI_2 {

notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"

}




此脚本和配置访问需要Director1和Director2两边都需要配置

b)通过定义vrrp_script脚本来完成资源监控,实现动态调整director的优先级别

脚本定义在vrrp_instance以外就可以:
首先是定义我么的监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
定义通过资源监控来实现调整:
vrrp_script chk_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -5
}

定义通过服务监控来实现调整:
vrrp_script chk_httpd {
script "killall -0 httpd && exit 0 || exit 1"
interval 1
weight -5
}





调用定义好的vrrp脚本,,##此脚本需要放在vrrp_instance内

1
2
3
4
track_script {
chk_down
chk_httpd
}




此脚本和配置访问需要Director1和Director2两边都需要配置
ok!此处我么及可以来测试哦,测试省略;
                   

页: [1]
查看完整版本: Keepalived+LVS实现web高可用负载集群