lvs+keepalived 案例配置

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:

        基于keepalived和RS端脚本配置的案例,,后端是tomcat应用程序.

软件地址: 

1
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz

 

再做以下操作之前,应该lvs配置成功、配置见这篇文章

1
http://douya.blog.51cto.com/6173221/1680692


开始配置lvs基于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
[root@lvs-1 soft] # ls -al /usr/src/
total 16
drwxr-xr-x.  4 root root 4096 Nov 19 00:26 .
drwxr-xr-x. 14 root root 4096 Nov 19 00:32 ..
drwxr-xr-x.  2 root root 4096 Sep 23  2011 debug
drwxr-xr-x.  4 root root 4096 Nov 19 00:27 kernels
lrwxrwxrwx.  1 root root   39 Nov 19 00:26 linux ->  /usr/src/kernels/2 .6.32-431.el6.x86_64/
  
安装前先查看是不是有此路径,如果没有,请执行以下步骤:
ls  /usr/src/kernels/2 .6.32-573.8.1.el6.x86_64/ 
yum  install   kernel kernel-devel  -y 
      
ln   -s  /usr/src/kernels/2 .6.32-573.8.1.el6.x86_64/  /usr/src/linux/
[root@lvs-1 keepalived-1.1.19] tar  xvf keepalived-1.1.19. tar .gz 
[root@lvs-1 keepalived-1.1.19]   cd  keepalived-1.1.19
[root@lvs-1 keepalived-1.1.19]  . /configure 
   configure: error:
   !!! OpenSSL is not properly installed on your system. !!!
   !!! Can not include OpenSSL headers files.            !!!
[root@lvs-1 keepalived-1.1.19]yum  install  openssl* -y 
[root@lvs-1 keepalived-1.1.19]. /configure
Keepalived configuration
------------------------
Keepalived version       : 1.1.19
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto 
Use IPVS Framework       : Yes
IPVS  sync  daemon support   : Yes
Use VRRP Framework       : Yes
Use Debug flags         : No
表明无误
[root@lvs-1 keepalived-1.1.19] make  && make  install

以上是编译安装,推荐使用yum install keepalived 安装


一、开始安装

1
yum install keepalived  - y


二、开始配置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
lvs-1 配置keepalived ---MASTER
[root@lvs-1 ~] # more /etc/keepalived/keepalived.conf 
! Configuration File  for  keepalived
global_defs {
    notification_email {
    334035686@qq.com
    }
    notification_email_from  root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id LVS_1
}
vrrp_instance VI_1 {
     state MASTER
     interface eth0
     virtual_router_id 51
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.2.12 /24
     }
}
virtual_server  192.168.2.12 80 {     #设置虚拟服务器,需要指定虚拟IP与服务端口,用空格分隔
     delay_loop 6                #设置健康状态检查时间,单位为秒
     lb_algo rr                 #设置负载高度算法,rr为轮询
     lb_kind DR                 #设置LVS实现负载均衡的机制,可以为{NAT|TUN|DR}三种
     nat_mask 255.255.255.0         #设置掩码
     persistence_timeout 50         #会话保持时间,单位为秒;这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案
     protocol TCP                #指定转发协议类型可以设置{TCP|UDP}两种
     real_server 192.168.2.221 80 {    #后端服务器节点,需要指定Real_server的IP与端口,用空格分隔
         weight 1               #配置服务节点的权重,数字越大,权重越高
    TCP_CHECK {              
            connect_timeout 3     #这个设置几秒钟测试一下这服务有没有挂.
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
         }
     }
     real_server  192.168.2.30 80 {
         weight 1
           TCP_CHECK {            
            connect_timeout 3      #这个设置几秒钟测试一下这服务有没有挂.
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
         }
     }
}

SLAVE端配置文件

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
[root@lvs-2~] # more /etc/keepalived/keepalived.conf 
! Configuration File  for  keepalived
global_defs {
    notification_email {
    334035686@qq.com
    }
    notification_email_from  root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id LVS_2
}
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 51
     priority 90
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.2.12 /24
     }
}
virtual_server  192.168.2.12 80 {     #设置虚拟服务器,需要指定虚拟IP与服务端口,用空格分隔
     delay_loop 6                #设置健康状态检查时间,单位为秒
     lb_algo rr                 #设置负载高度算法,rr为轮询
     lb_kind DR                 #设置LVS实现负载均衡的机制,可以为{NAT|TUN|DR}三种
     nat_mask 255.255.255.0         #设置掩码
     persistence_timeout 50         #会话保持时间,单位为秒;这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案
     protocol TCP                #指定转发协议类型可以设置{TCP|UDP}两种
     real_server 192.168.2.221 80 {    #后端服务器节点,需要指定Real_server的IP与端口,用空格分隔
         weight 1               #配置服务节点的权重,数字越大,权重越高
    TCP_CHECK {                       
            connect_timeout 3     #这个设置几秒钟测试一下这服务有没有挂.
             nb_get_retry 3  
             delay_before_retry 3
             connect_port 80
         }
     }
     real_server  192.168.2.30 80 {
         weight 1
        TCP_CHECK {                      
            connect_timeout 3      #这个设置几秒钟测试一下这服务有没有挂.
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
         }
     }
}

启动master,slave,,在master查看状态

1
2
3
4
5
6
7
8
9
10
11
12
[root@lvs-1 scripts] # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
     link /ether  00:0c:29:c8:69:ec brd ff:ff:ff:ff:ff:ff
     inet 192.168.2.13 /24  brd 192.168.2.255 scope global eth0
     inet 192.168.2.12 /24  scope global secondary eth0
     inet6 fe80::20c:29ff:fec8:69ec /64  scope link 
        valid_lft forever preferred_lft forever

到目前为止,在lvs server端的配置已经完成


三、下面开始配置real-server后面节点即(绑定VIP到lo,抑制ARP、)

此处可以使用脚本进行配置

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
                                                            
#!/bin/sh
#Date: 2015-11-20
#By: charles
#Description: deploy backend server (bind lo interface and Inhibition arp)
VIP= "192.168.2.12"
INT= "lo:0"
lo_INT=` ifconfig | grep  lo| awk  -F  " "  '{print $1 }' `
.   /etc/init .d /functions
function  start() {
if  "$lo_INT"  ==  "lo"  ]; then
          ifconfig  $INT $VIP  broadcast $VIP netmask 255.255.255.255 up
          route add -host $VIP dev $INT
          echo  "1"  /proc/sys/net/ipv4/conf/lo/arp_ignore 
          echo  "2"  /proc/sys/net/ipv4/conf/lo/arp_announce 
          echo  "1"  /proc/sys/net/ipv4/conf/all/arp_ignore 
          echo  "2"  /proc/sys/net/ipv4/conf/all/arp_announce 
else    
          echo  "vip is binded,Pls Re binding"
          exit  2
fi
if  [ $? - eq  0 ]
     then
         action  "start bind vip and  Inhibition arp is success"  /bin/true
else
         action  "start bind vip  and  Inhibition arp  failed"  /bin/false
fi
function  stop() {
ifconfig  $INT $VIP  broadcast $VIP netmask 255.255.255.255 up
echo  "0"  /proc/sys/net/ipv4/conf/lo/arp_ignore
echo  "0"  /proc/sys/net/ipv4/conf/lo/arp_announce
echo  "0"  /proc/sys/net/ipv4/conf/all/arp_ignore
echo  "0"  /proc/sys/net/ipv4/conf/all/arp_announce
if  "$INT"  !=   "lo"  ]
     then
         action  "stop bind vip and  Inhibition arp is success"  /bin/true
elif  "$INT"  ==   "lo"  ]
      then  
         action  "stop bind vip  is and   Inhibition arp  failed"  /bin/false
else
      echo  "bind Error"
fi
}
function  restart() {
  stop
  sleep  1
  start
}
case  "$1"  in 
           start)
               start
               ;;
           stop)
               stop
               ;;
           restart)
               restart
               ;; 
          *)
              echo     "USAGE :$0 {start|stop|restart}"
              exit  2
esac
exit  $?

  

四、还有对keepalived的日志做rsyslog的日志专门记录



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
root@lvs-1 ~] # cat /etc/sysconfig/keepalived 
1,修改keepalived的日志格式
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#
#KEEPALIVED_OPTIONS="-D"
KEEPALIVED_OPTIONS= "-D -d -S 0" ,
2, 配置rsyslog
yum  install  syslog -y
新加一下行
[root@lvs-1 ~] # vim /etc/rsyslog.conf | grep local0
local0.*              /var/log/keepalived .log
[root@lvs-1 ~]
/etc/init .d /rsyslog      restart
/etc/init .d /keepalived    restart
3,查看日志
[root@lvs-1 ~] # tail -f /var/log/keepalived.log 
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Using LinkWatch kernel netlink reflector...
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Activating healthchecker  for  service [192.168.2.221]:80
Nov 20 13:36:27 lvs-1 Keepalived_healthcheckers[12935]: Activating healthchecker  for  service [192.168.2.30]:80
Nov 20 13:36:28 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Transition to MASTER STATE
Nov 20 13:36:28 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Entering MASTER STATE
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) setting protocol VIPs.
Nov 20 13:36:29 lvs-1 Keepalived_healthcheckers[12935]: Netlink reflector reports IP 192.168.2.12 added
Nov 20 13:36:29 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0  for  192.168.2.12
Nov 20 13:36:34 lvs-1 Keepalived_vrrp[12936]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0  for  192.168.2.12



##########################################################################################

LB server本机配置nginx服务


master 配置文件如下:

vim keepalived.conf


 ! Configuration File for keepalived

vrrp_script check_run {
     script "/etc/keepalived/nginx_check.sh"
     interval 5
     weight   2
                      }

   
global_defs {
    notification_email {
    334035686@qq.com
                        }
notification_email_from  root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id LVS_1
                       }

    vrrp_instance VI_1 {
            state MASTER
            interface eth0
            virtual_router_id 51  ## the same as slave  lvs
            priority 100
            advert_int 1
    track_interface {
        eth0
    }

    authentication {
            auth_type PASS
            auth_pass 1111
                    }
    virtual_ipaddress {
            192.168.2.12
                       }
      track_script {  
        check_run  
    }  
}




#BACKUP 配置文件


vim keepalived.conf


 ! Configuration File for keepalived

vrrp_script check_run {
     script "/etc/keepalived/nginx_check.sh"
     interval 5
     weight   2
                      }

   
global_defs {
    notification_email {
    334035686@qq.com
                        }
notification_email_from  root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id LVS_1
                       }

    vrrp_instance VI_1 {
            state BACKUP
            interface eth0
            virtual_router_id 51  ## the same as MASTER lvs
            priority 90
            advert_int 1
    track_interface {
        eth0
    }

    authentication {
            auth_type PASS
            auth_pass 1111
                    }
    virtual_ipaddress {
            192.168.2.12
                       }
      track_script {  
        check_run  
    }  
}





以下是检查nginx健康状态的脚本:


 #!/bin/bash
NGINX_PROCESS=`ps -C nginx --no-header | wc -l`
if [ $NGINX_PROCESS -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 3

        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
                /etc/init.d/keepalived stop
        fi  
fi








      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1715183,如需转载请自行联系原作者




相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
运维 算法 Linux
LVS详解(四)——LVS安装与配置命令
LVS详解(四)——LVS安装与配置命令
130 2
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
1149 0
|
2月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
73 8
LVS+Keepalived 负载均衡
|
2月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
63 5
|
4月前
|
网络协议 应用服务中间件 Linux
LVS介绍与配置
LVS介绍与配置
199 8
|
4月前
|
负载均衡 网络协议 算法
使用IPVSADM配置LVS负载均衡
使用IPVSADM配置LVS负载均衡
|
6月前
|
运维 负载均衡 监控
keepalived+LVS实现高可用性集群
通过结合keepalived和LVS,你可以创建一个高可用性的负载均衡集群,确保服务器的稳定性和性能。这对于托管Web服务、应用服务器等关键服务的服务器集群非常有用。
119 1
|
6月前
|
负载均衡 监控 Linux
CentOS6.5高可用集群LVS+Keepalived(DR模式)
CentOS6.5高可用集群LVS+Keepalived(DR模式)
|
6月前
|
负载均衡 监控 调度
Keepalived+Lvs(dr)调度器主备配置小实验
Keepalived和LVS(Linux Virtual Server)是两个常用的开源软件,通常结合使用以提供高可用性和负载均衡的解决方案。 Keepalived是一种用于实现高可用性的软件,它可以监控服务器的健康状态,并在主服务器出现故障时自动切换到备份服务器。
216 2
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
386 1