MENU

keepalived-lvs-nat-主备模型实现高可用负载均衡

• 2018 年 05 月 17 日 • Linux技术

keepalived简介

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

lvs简介

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

lvs-nat

多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发;

 1)RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网络要指向DIP(保证响应报文必须经由VS);
 2)请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈
 3)支持端口映射
 4)VS必须是Linux,RS可以是任意OS;

lvsnat设计要点:

(1) DIP与RIP要在同一IP网络,RIP的网关要指向DIP;
(2) 支持端口映射
(3) 是否用到共享存储取决业务需求;
keepalived提供高可用并监测后端服务器健康状态
lvs提供负载均衡
这里使用lvs-nat keepalived的主/备模型来搭建

实验环境:

 虚拟机:VMware Workstation 15.0
 操作系统:CentOS 7
 keepalived-1.2.13-7.el7.x86_64   
 ipvsadm-1.27-7.el7.x86_64
httpd-2.4.6-40.el7.centos.x86_64

IP规划:

 DR-MASTER-外网IP:192.168.1.1
 DR-BACKUP-外网IP:192.168.1.2
 外网VIP:192.168.1.188
 DR-MASTER-内网IP:192.168.10.1
 DR-BACKUP-内网IP:192.168.10.2
 RS1:192.168.10.3
 RS2:192.168.10.4
 DR-MASTER-内网IP:192.168.10.1
 DR-BACKUP-内网IP:192.168.10.2

开始前将所有主机的iptables或firewalld和selinux关闭或者设置允许策略

为DR-MASTER和DR-BACKUP打开网卡转发

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

保存退出

sysctl -p

为RS1、RS2配置IP地址和网关,并保证能ping通

yum -y install httpd

实验中为验证效果,在RS1新建一个主页为/var/www/html/index.html内容如下:

<h1>RS-1</h1>

RS2中新建主页为/var/www/html/index.html,内容如下:

<h1>RS-2</h1>

DR-MASTER

yum -y install keepalived ipvsadm

更改keepalived配置文件(与DR-BACKUP配置文件仅几处不同)
编辑 /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
   root@xoxo.com
        }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.10.1
   smtp_connect_timeout 30
   router_id xoxo1
   vrrp_skip_check_adv_addr
  !vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
!配置外网VIP
vrrp_instance out {
    state MASTER
    interface ens37
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.1.188  
        }
}
!配置内网VIP
vrrp_instance apache {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.10.188 
        }
}
!配置外网VIP里的Real Server
virtual_server 192.168.1.188 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP
    real_server 192.168.10.4 80 {
        weight 1
   TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
        }
real_server 192.168.10.3 80 {
weight 1
   TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
        }
}

DR-BACKUP

yum -y install keepalived ipvsadm

更改keepalived配置文件(与DR-BACKUP配置文件仅几处不同)
编辑 /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
   root@xoxo.com
        }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.10.2
   smtp_connect_timeout 30
   router_id xoxo2
   vrrp_skip_check_adv_addr
   !vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
!配置外网VIP
vrrp_instance out {
    state BACKUP
    interface ens37
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.1.188 
        }
}
!配置内网VIP
vrrp_instance apache {
    state BACKUP

    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.10.188 
        }
}
!配置外网VIP里的Real Server
virtual_server 192.168.1.188 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP
    real_server 192.168.10.4 80 {
        weight 1
   TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
        }
real_server 192.168.10.3 80 {
weight 1
   TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
        }
}
  

启动主备keepalived服务

systemctl start keepalived.service

测试!!!

返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码