LVS+Keepalived -----> 效率最高的负载均衡器

 

 

一、 简介 

1. 负载均衡的类型 

  • 负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
  • 商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
  • 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs 

2. lvs 负载均衡机制 

lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之 上
传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
lvs 的转发还可以通过修改直接路由实现(DR 模式) 
3、 lvs+keepAlived 的应用场景? 

  • 大型网站负载均衡

 

 

Keepavlied双机热备

                                  HA(高可用)

 

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点

==================================================================================================

 

一.lvs搭建

1、环境

名称                                         IP 
LVS-DR-Master                192.168.200.111 
LVS-DR-BACKUP            192.168.200.112
LVS-DR-VIP                      192.168.200.254 
WEB1                                192.168.200.113
WEB2                                192.168.200.114

 

二.  LVS-DR-Master/LVS-DR-BACKUP 安装 LVS和 Keepalvied软件包

 

 

[root@localhost ~]# yum install ipvsadm kernel-devel openssl-devel keepalived -y
注:一定要与当前的运行的内核一致,因为 /usr/src/kernels目录下可有多个内核。否则在编译 keepalived 时会出错,
从而不能继续进行安装外,还会使keepalived 启动后功能失效

 

三.  配置 LVS实现负载均衡 

 

 

1. LVS-DR-Master 配置
设置网卡IP地址

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=none


2、配置Keepalived

[root@master ~]# cd /etc/keepalived/
[root@masterkeepalived]# cp keepalived.conf keepalived.conf.bak

keepalived配置文件详情

! Configuration File for keepalived
global_defs {
   notification_email { 
   crushlinux@163.com  #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务
   }
   notification_email_from root@example.com   #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置smtp服务器地址
   smtp_connect_timeout 30      #设置连接 smtp 服务器超时时间 
   router_id LVS_MASTER       #运行 Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息
}
vrrp_instance VI_1 {    #vrrp实例定义部分    
    state MASTER     #指定 Keepalived 的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。备份服务器上将 MASTER 改为 BACKUP。 
    interface eth0     #指定 HA监测网络的接口
    virtual_router_id 51   虚拟路由标识,这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识,即同一个 vrrp_instance下,MASTER 和 BACKUP必须是一致的。(0-255)
    priority 100     #定义优先级,数字越大,优先级越高,在一个 vrrp_instance下,MASTER的优先级必须大于 BACKUP 的优先级。备份服务上将 100 改为 50
    advert_int 1     #设定MASTER 与 BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {    #设定验证类型和密码 
        auth_type PASS    #设置验证类型,主要有 PASS和 AH 两种 
        auth_pass 1111    #设置验证密码,在一个 vrrp_instance下,MASTER 与 BACKUP必须使用相同的密码才能正常通信。
    }
    virtual_ipaddress {    #设置虚拟 IP地址,可以设置多个虚拟IP地址,每行一个 
        192.168.200.254 
    }
}
#虚拟服务器定义部分 
virtual_server 192.168.200.254 80 {  #设置虚拟服务器,需要指定虚拟 ip 地址和服务端口,ip 与
端口之间用空格隔开。 
    delay_loop 6      #设置健康检查时间,单位是秒
    lb_algo rr       #设置负载调度算法,这里设置为 rr,即轮询算法,rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR       #设置 LVS实现负载均衡的机制,可以有 NAT、TUN 和 DR三个模式可选。  
    protocol TCP      #指定转发协议类型,有 tcp和 udp 两种
    real_server 192.168.200.113 80 { #配置服务节点 1,需要指定 real server 的真实IP地址和端口,ip 与端口之间用空格隔开。
        weight 1      #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的
权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源 
        TCP_CHECK {      #realserve 的状态检测设置部分,单位是秒
            connect_timeout 10   #10秒无响应超时
            nb_get_retry 3    #重试次数
            delay_before_retry 3  #重试间隔 
            connect_port 80    #测试连接的端口 
        }
    }
    real_server 192.168.200.114 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
Master配置

[root@master keepalived]# cat keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
crushlinux@163.com
}
notification_email_from root@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.254
}
}
virtual_server 192.168.200.254 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.200.113 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.200.114 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

[root@localhost keepalived]# systemctl restart keepalived
[root@localhost keepalived]# chkconfig keepalived on

 

SALVE备配置

1. LVS-DR-salve 配置

设置网卡IP地址

[root@salve  ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=none

2、配置Keepalived

[root@salve  ~]# cd /etc/keepalived/
[root@salve keepalived]# cp keepalived.conf keepalived.conf.bak
[root@salve  keepalived]# vim keepalived.conf
[root@salve  keepalived]# cat keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email { 
crushlinux@163.com
}
notification_email_from root@example.com
smtp_server 127.0.0.1 
smtp_connect_timeout 30 
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication { 
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.254 
}
}
virtual_server 192.168.200.254 80 { 
delay_loop 6 
lb_algo wrr 
lb_kind DR 
protocol TCP 
real_server 192.168.200.113 80 {
weight 1
TCP_CHECK { 
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.200.114 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

[root@localhost keepalived]# systemctl restart keepalived
[root@localhost keepalived]# chkconfig keepalived on

四.  配置WEB1和WEB2操作一致

 

[root@web1 ~]# cat realserver.sh

 

#!/bin/bash 
SNS_VIP=192.168.200.254 
. /etc/rc.d/init.d/functions 
case "$1" in 
start) 
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 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

[root@web1 ~]# chmod +x realserver.sh

[root@web1 ~]# ./realserver.sh start
RealServer Start OK
[root@web1 ~]# yum install httpd -y

[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# iptables -F
[root@web1 ~]# setenforce 0

 

五、配置两台WEB中的index.html测试页面用于区分

 

[root@web1 ~]# cd /var/www/html/
[root@web1 html]# echo '192.168.200.113' > index.html

 

 

[root@web2 ~]# cd /var/www/html/
[root@web2 html]# echo '192.168.200.114' > index.html

六、测试LVS

 

 

[root@master ~]# ip a | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.111/24 brd 192.168.200.255 scope global noprefixroute ens33
inet 192.168.200.254/32 scope global ens33

 

 

[root@salve ~]# ip a | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.112/24 brd 192.168.200.255 scope global noprefixroute ens33

 

 

多刷新几次页面

 

 

 

[root@master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.254:80 wrr
-> 192.168.200.113:80             Route     1   1     2
-> 192.168.200.114:80             Route     1   1     2

posted @ 2019-10-06 21:02  Room、C  阅读(355)  评论(0编辑  收藏  举报