负载均衡LVS / ipvsadm基本配置 / Keepalived高可用

为解决服务器高并发访问时的压力,将访问分担到不同的服务器上实现负载均衡lvs
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统
ipvs : 嵌入到linux的内核
ipvsadm:管理应用程序
类型:
    NAT:地址转换(D_NAT  lvs负责接收和返回)
    DR: 直接路由  ( LVS负责接收,RS负责返回)
    TUN:隧道  (  LVS通过隧道转给RS, LVS负责接收,RS负责返回
    假想架构图


下面实现的是DR模式
        LVS服务器与RS服务器公用一个公网ip(VIP),隐藏RS的vip达到欺骗效果
        VIP:与客户端交互,对客户端透明
        DIP,RIP:LVS与RS之间交互的内网IP,只需用MAC地址来寻址
1、 一台主机作为 DR(虚拟服务器,lvs)安装ipvsadm
yum install ipvsadm
2、在DR上设置两个静态ip
DIP 192.168.126.12
VIP 192.168.126.200 

 ifconfig eth0:1 192.168.126.200 netmask 255.255.255.0
3 、多台机器作为RS
a) 静态设置 rip 192.168.126.13
  192.168.126.14
b)修改报文源IP的设置,需设置内核参数,降低对ARP请求mac反应的级别
                    arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;
    arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

c)在RS上,设置网卡别名:192.168.126.200 隐藏VIP 子网掩码需为255.255.255.255
ifconfig lo:1 192.168.126.200 netmask 255.255.255.255 broadcast 192.168.126.200


4 、RS分别配置web服务
yum install httpd -y
cd /var/www/html
vi index.html
    启动服务 (netstat -natp | grep 80 查看端口情况)
service httpd start
    不同index.html配置不同内容以测试
vi /var/www/html/index.html

5 、在DR上使用ipvsadm 添加集群服务
ipvsadm -C
ipvsadm -A -t 192.168.126.200:80 -s wlc
ipvsadm -a -t 192.168.126.200:80 -r 192.168.126.13 -g -w 1
ipvsadm -a -t 192.168.126.200:80 -r 192.168.126.14 -g -w 1
测试本机对于网络连接详情
客户端访问本机进程的情况
    
netstat -nalp
LVS 查看负载详情
 ipvsadm –Lnc  



Keepalived高可用

keepalived是集群管理中保证集群高可用的服务软件,解决单个LVS出现故障,进行主备切换

高可用 High Available

1、需要心跳机制探测后端RS是否提供服务。

a) 探测down,需要从lvs中删除该RS

b) 探测发送从down到up,需要从lvs中再次添加RS。

2、Lvs DR,需要主从(HA),由主服务器发送心跳,备服务器根据心跳判断主服务器是否alive


Keepalived 原理
    VRRP协议(虚拟路由冗余协议) - Virtual Router Redundancy Protocol
    IP漂移
架构图

keepalive安装
在WEB1和WEB2分别执行
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
分别设置网卡别名:10.0.0.148 隐藏VIP 子网掩码需为255.255.255.255
ifconfig lo:1 10.0.0.148 netmask 255.255.255.255
分别安装httpd,并
vi /var/www/html/index.html
不然keepalived心跳验证时会显示304

可以不用安装ipvsadm,keepalived会完成LVS配置,安装ipvsadm则可以使用ipvsadm -lnc查看网络
在LVS_MASTER和LVS_BACKUP上安装keepalived
yum install  keepalived
帮助手册
man 5 keepalived.conf
查看日志
 tail  /var/log/message 
       
修改配置(LVS_MASTER和LVS_BACKUP上
             配置文件位置
            /etc/keepalived/keepalived.conf
编辑之前,需要备份
cp keepalived.conf keepalived.conf.backup
vi keepalived.conf

keepalived

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost  #发送提醒邮件的目标地址可有多个
     goldbin@126.com
  }
   notification_email_from test@localhost              #发送邮件的from地址,可以随意写,邮件地址不存在都无所谓
   smtp_server 127.0.0.1             #邮件服务的地址,一般写本地
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP        #MASTER 主和从 
    interface eth0        #VIP需要绑定的网卡名称
    virtual_router_id 51
    priority 101        #优先级 主的优先级要高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.148/24 dev eth0 label eth0:1         #设置VIP,不需要手动设置lvs的vip了,keepalived会自动配置
    }
}
virtual_server 10.0.0.148 80 {       #设置虚拟lvs服务,VIP PORT
    delay_loop 6
    lb_algo rr#调度算法wrr
    lb_kind DR#lvs的模式
    nat_mask 255.255.255.0
    persistence_timeout 50 #同一个IP地址在50秒内lvs转发给同一个后端服务器
    protocol TCP

    real_server 10.0.0.137 80 {       #设置真实服务器的心跳机制 RID PORT
        weight 1      #权重
        HTTP_GET {      #心跳检测的方式
            url {
              path /      #心跳检查的地址
              status_code 200      #心跳检查返回的状态
            }
            connect_timeout 2       #超时时间
            nb_get_retry 3      #重复检查3次
            delay_before_retry 1      #每隔1秒钟再次检查
        }
    }
    real_server 10.0.0.139 80 {      #第二个真实服务器设置
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}
 在主备LVS分别启动
service keepalived start
测试
    在LVS_MASTER上执行
ipconfig eth0 down

    查看LVS_BACKUP是否会启用vip

ipconfig

keepalived缺点

    直接杀死LVS_MASTER,会导致LVS_BACKUP启用vip,从而产生两个暴露的vip



添加新评论