Chinaunix首页 | 论坛 | 博客
  • 博客访问: 113966
  • 博文数量: 17
  • 博客积分: 431
  • 博客等级: 下士
  • 技术积分: 172
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-13 14:45
文章分类

全部博文(17)

文章存档

2012年(1)

2011年(16)

分类: LINUX

2011-10-21 17:26:48

LVS+Keepalived

keepalived 作用

如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

 

Keepalived的代码结构和工作图示:

keepalived依赖包

  ipvsadm

 libpopt0

  libssl-dev

 

VRRP协议

  虚拟路由器冗余协议(VRRP)是一种选择协议VRRP通过优先级来确定由谁当master,谁当backup

 

LVS

Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

 

LVS结构与工作原理

LVS由前端的负载均衡器(Load BalancerLB)和后端的真实服务器(Real ServerRS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。

  当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RSRS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。

LVS转发策略:

NAT (Network Address Translation)模式。

IP隧道 (IP Tunneling)模式。

DR(Direct Routing)模式。 我们这里,最常见的,使用最多的是DR模式

 

 

MASTER

root@example:~# apt-get install libssl-dev libpopt-dev     \\安装opensslpopt

root@example:~# apt-get install keepalived                 

root@example:~# vim /etc/keepalived/keepalived.conf      \\创建keepalived的配置文件进行编写

!Configuration File for keepalived

 global_defs {

 notification_email {

     root@example.com                            \\当出现问题时,发送的收件人地址

        }

        notification_email_from

        smtp_server 127.0.0.1                         \\邮件服务器地址

        smtp_connect_timeout 30                    \\ 连接邮件服务器超时的时间

        router_id LVS_DEVEL                      \\ 主管lvs的名字

}

        vrrp_instance VI_1 {

        state MASTER                            \\主服务器

        interface eth0                             \\选择设备

        virtual_router_id 51              \\+ 虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标,同backup中的是一致的,与整个vrrp中也是一致的

        priority 100                         \\ 优先级,数越大,优先级越高

        advert_int 1

        authentication {                            \\ 类型主要有PASSAH两种,通常使用的类型PASS

       auth_type PASS

       auth_pass 1111

}

virtual_ipaddress {                          \\ 浮动IP  虚拟IP地址

       192.168.1.104

}

}

virtual_server 192.168.1.104 80 {                \\ 虚拟服务器virtual_server定义块

delay_loop 6                                 \\健康检查时间间隔

lb_algo wrr                                  \\负载均衡调度算法

lb_kind DR                                  \\负载均衡转发规则

persistence_timeout 60                         \\会话保持时间

protocol TCP                                   转发协议

 

real_server 192.168.1.101 80 {                         \\ 服务器池

       weight 3                                    \\  权重值数值越大,权重越高

       TCP_CHECK {                              \\  Tcp检查

       connect_timeout 10                           \\    连接超时

       nb_get_retry 3                               \\       重连次数

       delay_before_retry 3                           \\ 重连间隔时间

       connect_port 80                               \\ 连接端口

}

}

real_server 192.168.1.102 80 {

       weight 3

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

       connect_port 80

       }

    }

}

BACKUP

root@example1:~# apt-get install libssl-dev libpopt-dev   

root@example1:~# apt-get install keepalived

root@example1:~# vim /etc/keepalived/keepalived.conf

!Configuration File for keepalived

 global_defs {

 notification_email {

     root@example.com

        }

        notification_email_from

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

        vrrp_instance VI_1 {

        state BACKUP                     \\备份服务器

        interface eth0

        virtual_router_id 51

        priority 99                         \\优先级比master

        advert_int 1

        authentication {

       auth_type PASS

       auth_pass 1111

}

virtual_ipaddress {

       192.168.1.104

}

}

virtual_server 192.168.1.104 80 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 60

protocol TCP

 

real_server 192.168.1.101 80 {

       weight 3

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

       connect_port 80

}

}

real_server 192.168.1.102 80 {

       weight 3

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

       connect_port 80

       }

    }

}

两边配置好后,启动keepalived服务, 环境需要脚本支持,

 

 

exampleexample1上分别启动real.sh脚本  代理机启动lvs-dr.sh脚本   并且打开watch -n 1 'ipvsadm -ln' 进行查看,下面附加两个网上参考脚本 已测试 可以使用 但需要因人 进行稍加修改

 

vim /etc/keepalived/lvs-dr.sh       

  #!/bin/bash

        # description: start LVS of DirectorServer

        #Written by :NetSeek [url][/url]

 

        GW=192.168.1.1

        # website director vip.

        SNS_VIP=192.168.1.104

        SNS_RIP1=192.168.1.101

        SNS_RIP2=192.168.1.102

 

        logger $0 called with $1

 

        case "$1" in

 

        start)

           # set squid vip

           /sbin/ipvsadm --set 30 5 60

                   /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.0

     #   broadcast $SNS_VIP up

           /sbin/route add -host $SNS_VIP dev eth0:0

           /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3

           /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1

           /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1

           touch /var/lock/subsys/ipvsadm >/dev/null 2>&1

    ;;

        stop)

           /sbin/ipvsadm -C

           /sbin/ipvsadm -Z

           ifconfig eth0:0 down

           ifconfig eth0:1 down

           route del $SNS_VIP

           route del $SS_VIP

           rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1

           echo "ipvsadm stoped"

           ;;

 

        status)

 

           if [ ! -e /var/lock/subsys/ipvsadm ];then

                echo "ipvsadm stoped"

                exit 1

           else

                echo "ipvsadm OK"

           fi

           ;;

 

        *)

          echo "Usage: $0 {start|stop|status}"

           exit 1

  esac

 

        exit 0

 

 

root@example:~# vim /etc/keepalived/real.sh

#!/bin/bash

        # description: Config realserver lo and apply noarp

        #Written by :NetSeek [url][/url]

 

        SNS_VIP=192.168.1.104

 

        . /etc/rc.d/init.d/functions

 

        case "$1" in

        start)

               ifconfig lo:0 $SNS_VIP netmask 255.255.255.0 broadcast $SNS_VIP

               /sbin/route add -host $SNS_VIP dev lo:0

               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

               sysctl -p >/dev/null 2>&1

               echo "RealServer Start OK"

 

               ;;

     stop)

               ifconfig lo:0 down

               route del $SNS_VIP >/dev/null 2>&1

               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

               echo "RealServer Stoped"

               ;;

        *)

               echo "Usage: $0 {start|stop}"

               exit 1

        esac

 

        exit 0

 

参考  本部门经理文档

      网上参考资料

阅读(7069) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chenkun19982013-11-10 23:45:50

不错,收藏了!