lvs+keepalive 实现高可用软负载均衡集群

LVS 负载均衡原理图

LVS无需安装

安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

ipvsadm是通过命令行管理,而keepalive读取配置文件管理

机器规划

IP

用途

部署

134.64.14.200

DS1

Ipvsadm+keepalive

134.64.14.203

DS2

Ipvsadm+keepalive

134.64.14.201

RS1

Realserver+http

134.64.14.202

RS2

Realserver+http

 

1.安装ipvsadm管理工具

yum -y install ipvsadm

查看当前LVS状态,顺便激活LVS内核模块

Ipvsadm

 

查看系统LVS模块

 

2.LVS集群搭建

2.1DS配置

DS1节点keepalive配置:

 

! Configuration File for keepalived

global_defs {
    router_id LVS_DS1      #机器唯一标识
}
vrrp_instance VI_1 {       #配置虚拟路由器的实例,VI_1是自定义的实例名称
    state MASTER              #初始状态,MASTER|BACKUP,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER,所以这里的MASTER并不是表示此台服务器一直是MASTER
    interface ens32           #通告选举所用端口
    virtual_router_id 14    #虚拟路由的ID号(一般不可大于255)(keepalive集群唯一标识
    priority 100                 #权重
    advert_int 1                #VRRP通告间隔,秒
    authentication {
        auth_type PASS      #认证机制
        auth_pass 1111     #认证密码(随机)
    }
    virtual_ipaddress {
        134.64.14.204/23   #VIP,可以通知设置掩码
    }
}
virtual_server 134.64.14.204 80 {
    delay_loop 6               # service polling的delay时间,即服务轮询的时间间隔
    lb_algo rr                    #loadbalance调度算法(rr/wrr/dh/sh/wlc/lc/lblc/lblcr)
    lb_kind DR                  #loadbalance工作模式(NAT/DR/TUN)
    nat_mask 255.255.255.0  
    persistence_timeout 0   #会话保持时间
    protocol TCP              #健康检查用的是TCP还是UDP
    real_server 134.64.220.121 80 { #后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个
        weight 1               #给每台的权重,rr无效
        TCP_CHECK {   #TCP检查策略
            connect_timeout 3   #连接超时时间
            nb_get_retry 3        #重连次数
            delay_before_retry 3  #重连间隔时间
            connect_port 80    #健康检查端口
        } 
    }
    real_server 134.64.220.123 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

DS2节点keepalive配置:

! Configuration File for keepalived

global_defs {
    router_id LVS_DS2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    virtual_router_id 14
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        134.64.14.204/23
    }
}
virtual_server 134.64.14.204 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0 
    persistence_timeout 0
    protocol TCP
    real_server 134.64.14.201 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        } 
    }
    real_server 134.64.14.202 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

启动keepalive服务

Service keepalived start

可以看到有三个keepalive进程

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:healthchecker子进程

检查lvs配置

 

可以看到14.204的80端口可以正常转发14.201和14.202两台的80端口,且采用rr轮询方式

 

2.2 RS配置

RS1节点配置:

[root@jtbs31 init.d]# vim realserver.sh 

 

#!/bin/bash
#description: Config realserver
VIP=134.64.14.204
case "$1" in
start)
       /sbin/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)
       /sbin/ifconfig lo:0 down
       /sbin/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

启动rs服务

# chmod u+x realserver.sh
# ./realserver.sh start

检查lo回环配置是否正常

 

RS2节点配置:

 

[root@jtbs32 init.d]# vim realserver.sh 
#!/bin/bash
#description: Config realserver
VIP=134.64.14.204
case "$1" in
start)
       /sbin/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)
       /sbin/ifconfig lo:0 down
       /sbin/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

启动rs服务

# chmod u+x realserver.sh
# ./realserver.sh start

检查lo回环配置是否正常

2.3 http配置

首先在RS1和RS2节点上安装http

yum install httpd

提供一个测试页面

RS1:echo "RS1" >> /var/www/html/index.html
RS2:echo "RS2" >> /var/www/html/index.html

启动http服务:

service httpd start

加载测试页面

 

2.3参数详解

DS:Director server  LVS调度中心(调度层)

RS:Realserver 真实服务中心(集群层)

 

LVS三种工作模式:

NAT模式

调度器将请求的目标ip即vip地址修改为Real server的ip,返回的数据也经过调度器,调度器再把源地址修改为vip

TUN模式

调度器将请求来的数据包封装加密通过ip隧道转发到后端的real server上,而real server会直接把数据返回给客户端,而不再经过调度器

DR模式

调度器将请求来的数据包的目标mac地址修改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端

 

LVS调度算法:

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

 

(1)rr 轮叫调度(Round Robin),这种算法是最简单的,不管RS的后端配置和处理能力,均衡的分发下去

(2)wrr 加权轮叫(Weight Round Robin),比上面的算法多了一个权重的概念,可以给RS设置权重,权重越高,那么分发的请求数越多,权重取值范围0-100

(3)LC最少链接(least connection),这个算法会根据后端的RS的连接数来决定把请求发给谁,比如RS1连接数比RS2连接数少,那么请求优先发给RS1

(4)WLC 加权最少链接(Weighted Least Connecttion)比最少链接算法多了一个权重

(5)Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS

(6)SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS

(7)lblc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS

(8)Lblcr  带复制的基于本地的最少连接:是LBLC算法的改进

 

arp_announce : INTEGER

对网络接口上本地IP地址发出的ARP报文作出相应级别的限制。

0:本机所有IP地址都向任何一个接口通告ARP报文。

1:尽量仅向该网卡回应与该网段匹配的ARP报文。

2:只向该网卡回应与该网段匹配的ARP报文。

 

arp_ignore : INTEGER

定义对目标地址为本地IP的ARP询问不同的应答模式。

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:预留。

8:不回应所有的arp请求。

3.测试验证

3.1VIP高可用测试

可以看到VIP在DS1上面,直接重启DS1主机,观察VIP是否正常漂到DS2上面

 

可以看到正常切换过来了,验证RS服务是否能正常访问

 

说明VIP已经具备高可用

3.2LVS负载均衡验证

刷新页面

可以看到从RS2切到RS1中,会话均衡分发

可以通过ipvsadm -lnc查看会话链接情况

 

 ---------------------------------------------完结----------------------------------------------

 

转载于:https://www.cnblogs.com/tonnytangy/p/8560527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值