Linux LVS+Keepalived负载均衡安装配置笔记

Linux LVS+Keepalived负载均衡安装配置笔记

经安装测试能够实现我的这些需要:

  • 双机或多机实现虚拟IP,能够实现IP故障切换
  • 能够连接多台后端真实服务器,实现后端服务器的负载均衡
  • 能够实现双机热备份(同一时间单机工作,故障后切换到另一台)
  • 能够双机虚拟IP且负载均衡(双机即做调度器又做真实服务器)

1,LVS (Linux Virtual Server)

虚拟IP,负载均衡调度器,但需要手工动态增加命令,所以需要keepalived来实现自动配合。虚拟IP同时只能存在于某一台机器上,此时称为master机,其它为backup机。
安装:ubuntu上直接用apt-get install ipvsadm,装完后为自启动服务。剩下的事就交给keepalived管理了,不需要手工配置LVS。

2,Keepalived

根据配置文件进行监控,向LVS提供信息,自动检测各调度器可用性,从而实现虚拟IP(即master机)由哪台机器服务。就是指定哪些机器一块虚拟出哪个IP。还有在虚拟的IP上提供哪个端口映射到哪些后端真实服务器从而实现后端服务的负载均衡(可自动检测出哪些不可用)
安装:ubuntu上直接用apt-get install keepalived,装完后为自启动服务。然后在/etc/keepalived/中增加配置keepalived.conf

3,基本网络结构

一般需要4台机器,2台做为双机备份的调度器(VIP同时只能存在其中一台机上,另一台闲着的),另2台做为真实应用服务器(realserver)如web服务器。其中调度器可以增加为多台(浪费),realserver也可以增加为多台。设:
虚拟VIP:192.168.0.10
调度器A:192.168.0.11 (装lvs+keepalived+配置)
调度器B:192.168.0.12 (装lvs+keepalived+配置)
realserverA:192.168.0.13 (需要启动realserver.sh脚本)
realserverB:192.168.0.14 (需要启动realserver.sh脚本)

配置文件keepalived.conf

global_defs {
         router_id webHA
         }

vrrp_instance VI_1 {    #调度器虚拟IP切换配置
        state MASTER   #一台为MASTER,另一台为BACKUP。或者两台均是BACKUP
        interface eth0
        virtual_router_id 51    
        priority 100   #优先级,另一台改为90
        advert_int 1    #组播信息发送间隔,两个节点设置必须一样
        nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
        authentication {
          auth_type PASS
          auth_pass 1111
        }
        virtual_ipaddress {
          192.168.0.10
        }
    }

virtual_server 192.168.0.10 8080 {  #负载均衡配置 (重要:端口必须与realserver端口一致,不能更改)
        delay_loop 5   #每个5秒检查一次real_server状态
        lb_algo rr   #LVS算法
        lb_kind DR    #LVS模式
        persistence_timeout 10   #会话保持时间
        protocol TCP
        real_server 192.168.0.13 8080 {
            weight 1            
            TCP_CHECK {
              connect_timeout 5    #连接超时时间
              nb_get_retry 2       #重连次数
              delay_before_retry 3   #重连间隔时间
              connect_port 8080   #健康检查端口
            }
        }
        real_server 192.168.0.14 8080 {
            weight 1
            TCP_CHECK {
              connect_timeout 5    #连接超时时间
              nb_get_retry 2       #重连次数
              delay_before_retry 3   #重连间隔时间
              connect_port 8080   #健康检查端口
            }
        }
    }

两台调度器做好配置后,重启service keepalived restart,即可实现2台调度器上的VIP切换(关掉机器或断掉网络或关掉keepalived都可以使VIP切换)。

重要:要使服务转接到后端realserver实现负载均衡,realserver上必须运行一个脚本用来修改网络配置,不能realserver会产生对VIP的冲突,原理暂时我还不清楚。

重要:虚拟VIP实现的服务端口必须与realserver上的服务端口一致,不能更改成其它端口,否则不能转接到realserver。

可以在2台调度器机器上运行 ipvsadm -ln 来查看后方realserver的状态。没有显示出来的则表示该realserver有问题,能显示的代表realserver服务正常,但不一定从VIP访问就是OK的

realserver.sh脚本

#!/bin/bash
# description: Config realserver lo and apply noarp 
#Written by :NetSeek http://www.linuxtone.org

VIP=192.168.0.10

. /lib/init/vars.sh
. /lib/lsb/init-functions

case "$1" in
start)
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    /sbin/route add -host $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 $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

完成上面步骤后,就可以虚拟IP并且负载均衡了。

4,只有2台机器实现双机热备份(一台工作一台闲着)

实现虚拟VIP只需要2台机器就可以了,就是2台调度器的工作,配置部分就是vrrp_instance VI_1
由于同时VIP只存在于其中一台机上,可以在调度器机器上直接提供应用服务(如web服务),不需要后接2台真实服务器,故不需要填写负载均衡部分的配置,只实现VIP切换就可以了。服务不需要向后转接,而是在VIP所在机上直接提供。两台机器也不需要运行realserver.sh。
这样同时只有一台工作,另一台闲着。但机器或网络故障后可以切换到另一台机。如果web服务故障,则可以通过notify_down通知脚本重启机器来切换到另一台机(未测试)。

5,两台机器实现负载均衡

经过测试,两台机器即做调度器,又做realserver,也可以实现切换和负载均衡。按照基本网络配置进行操作,且两台机都要运行realserver。
两台机器都正常时,将可以提供两台web均衡服务。

–完–

你可能感兴趣的:(linux)