keepalived高可用lvs-dr 负载均衡httpd

这次实践主要是尝试:keepalived高可用lvs,完成对后端主机的负载均衡。lvs使用最为常用的DR模型,DIP,RIPs使用内网地址,节省公网IP的使用。

一、实验要求

要求任何一台代理服务器不可用时,不影响正常访问,任何一台真实主机服务不可用时,不影响正常访问。

二、实验环境

这里假设192.168.0.0/24作为外网地址(因为它确实能连接外网),192.168.100.0/24作为内网网络,前端代理放置在外网,真实服务器放在内网。这样设计可以使用更少的IP完成架构。这里要注意的是:1.要了解DR模型中的要点,需要所有的网卡都要在一个物理网络中,才能修改MAC实现转发;2.内网主机要求只有内网(保证其默认网关要指向内网路由),这里实在虚拟机内操作的,没用xshell。

实验中物理图如下:

系统中服务器配置(mysql服务器没有配置,不影响实验):

系统 角色 IP 网关 软件
CentOS 6.6 前端代理 192.168.0.140
192.168.100.140
192.168.0.1 keepalived+lvs(dr)
CentOS 6.6 前端代理 192.168.0.141
192.168.100.141
192.168.0.1 keepalived+lvs(dr)
CentOS 6.6 web服务器 192.168.100.142 192.168.100.146 httpd
CentOS 6.6 web服务器 192.168.100.143 192.168.100.146 httpd
CentOS 6.6 内网路由
192.168.0.146

192.168.100.146

192.168.0.1

*说明keepalived VIP为192.168.0.144。

三、搭建后端web服务器,设置lvs(dr)模型真实服务器设置

搭建web服务器只要简单设置就可以了,这里不在重复,要记住标准化环境;这里设置不同的页面标识调度器的情况,这里仅仅提供了不同的index页面。

真实主机的设置使用脚本初始化:

#cat dr.sh
#!/bin/sh
#
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.0.144 netmask 255.255.255.255 broadcast 192.168.0.144
route add -host 192.168.0.144 gw 192.168.0.144

脚本两台RS上都要运行,验证下web服务器可用。真实服务器准备好了。

四、建立前端的keepalived高可用

在两台前端反向代理安装keepalived,ipvsadm,修改/etc/keepalived/keepalived.conf,配置如下:

CentOS6-140的keepalived配置:

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2
   vrrp_mcast_group4 224.0.29.18
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 20
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 11112222
    }
    virtual_ipaddress {
        192.168.0.144 dev eth0 label eth0:0 
    }
}

virtual_server 192.168.0.144 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
#    persistence_timeout 50
    protocol TCP

    sorry_server 127.0.0.1  80

    real_server 192.168.100.142 80 {
        weight 1
        HTTP_GET {
            url { 
              path /index.html
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.143 80 {
        weight 1
        HTTP_GET {
            url { 
              path /index.html
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

CentOS6-141的keepalived配置如下:

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2
   vrrp_mcast_group4 224.0.29.18
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 20
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 11112222
    }
    virtual_ipaddress {
        192.168.0.144 dev eth0 label eth0:0 
    }
}

virtual_server 192.168.0.144 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
#    persistence_timeout 50
    protocol TCP

    sorry_server 127.0.0.1  80

    real_server 192.168.100.142 80 {
        weight 1
        HTTP_GET {
            url { 
              path /index.html
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.100.143 80 {
        weight 1
        HTTP_GET {
            url { 
              path /index.html
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

先启动从服务器,查看IP:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:31:79:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.141/24 brd 192.168.0.255 scope global eth3
    inet 192.168.0.144/32 scope global eth3
    inet6 fe80::250:56ff:fe31:79fe/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:35:d5:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.141/24 brd 192.168.100.255 scope global eth2
    inet6 fe80::250:56ff:fe35:d587/64 scope link 
       valid_lft forever preferred_lft forever

可以看到keepalived备服务器已经取得了IP地址,再启动主服务器可用看到从服务器IP被主服务器夺了过去。

[[email protected] ~]# service keepalived start
Starting keepalived:                                       [  OK  ]
[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4a:2a:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.140/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.144/32 scope global eth0:0
    inet6 fe80::20c:29ff:fe4a:2a21/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:24:1e:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.140/24 brd 192.168.100.255 scope global eth1
    inet6 fe80::250:56ff:fe24:1e26/64 scope link 
       valid_lft forever preferred_lft forever

从前端主机请求后端真实的web服务(这里实验设置的web服务器内容不一致,真实服务器要求一致):

[[email protected] ~]# curl http://192.168.100.142
<h1>server 142</h1>
[[email protected] ~]# curl http://192.168.100.143
<h1>server 143</h1>

查看lvs的转发情况:

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.144:http rr
  -> 192.168.100.142:http         Route   1      0          0         
  -> 192.168.100.143:http         Route   1      0          0

五、设置内网路由器

这时候请求http://192.168.0.144不能请求到。实际上可以看到lvs链接记录,但是不会得到回应,因为后端这时服务器不知道该向哪里转发,找不到网关MAC信息。

这里需要配置双网的内网路由器转发。

配置路由器可以转发:

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward 
1

设置IP地址和路由如下:

[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:3e:e1:4f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.146/24 brd 192.168.0.255 scope global eth0
    inet 192.168.100.146/24 brd 192.168.100.255 scope global eth0:0
    inet6 fe80::250:56ff:fe3e:e14f/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:50:56:2b:e1:67 brd ff:ff:ff:ff:ff:ff

配置路由:

# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.100.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0       192.168.0.1         0.0.0.0         UG    0      0        0 eth0

六、测试

七、总结

实验中出现问题:

1.keepalived 140对142监控可以连接上,但是从来不把请求转发到142服务器,其他正常。以后再做一次看看什么问题;

2.实验中keepalive对真实主机的测试,回被记录到access日志中,可以再建立虚拟主机并设置日志的位置,方便线上统计;

3.现有的结构中除了没有提供mysql(当然也需要高可用),由于http协议是无状态协议,对于一次用户访问,session不会和调度一致,理论上也属于单点故障,所以后期还可以添加session的解决方案,比如session 集群或session server。想想还有好多东西要做,后期慢慢完善。

实验中有的地方值得留下mark,搭建结构的步骤很重要,弄清来龙去脉:

  1. 做好需求,安装好服务器的各种软件(可能没有内网YUM源,所以在外网环境中安装好);
  2. 网络设计:搞清楚DR要求的条件,VIP、DIP、RIPs要求在一个物理网络,DIP,RIPs可以用私网地址但是使用私网地址需要设置内网路由;设置内网路由,那么需要开启转发功能;当然在实际环境中可能一个真实路由器搞定了,路由器性能要好点,毕竟需要转发响应报文,而响应报文是需要转发能力和带宽的,不容忽视;
  3. 良好的步骤和验证:

首先,设计内网真实的主机,能够正常服务;

其次,设置外网负载均衡,保证能够动态负载后端,任何一台前端或后端失败都不会影响后端服务器正常访问;

再次,设置内网路由器,确保其能够转发,最好外网自己的主机设置返回内网的路由条目,使内网的报文能够返回到内网服务器,这时候用RS是能够ping外网主机,路由功能正常。

4.确保内网主机使用默认网关为内网路由器的内网地址。

快速完成架构部署还不是熟练,尽量一步一步趋于完善。

实验就是这样了,如果有对其中实验的问题,欢迎留言!

时间: 2024-09-30 23:51:43

keepalived高可用lvs-dr 负载均衡httpd的相关文章

实践:在CentOS7.3部署 keepalived 高可用nginx(负载均衡)

背景: 既然有了Lvs+keepalived这样高性能的组合,那为何还要有Nginx+keepalived呢,keepalived的初衷就是为了Lvs而设计的,我们都知道Lvs是一个四层的负载均衡设备,虽然有着高性能的优势,但同时它却没有后端服务器的健康检查机制,keepalived为lvs设计了一系列的健康检查机制TCP_CHECK,UDP_CHECK,HTTP_GET等.同时lvs也可以自己写健康检查脚脚本.或者结合ldirectory来实现后端检测.但是固LVS始终无法摆脱它是一个四层设备

基于keepalived+nginx部署强健的高可用7层负载均衡方案20151214

高可用是个老生常谈的问题了,开源的高可用软件已经做的相当成熟了,之前也在debian下做过lvs+heartbeat的4层LB,一直很稳定(可惜流量不大啊),现在由于业务的需要,做一个基于keepalived+nginx的高可用7层负载均衡. 拓扑结构也比较简单,就不画拓扑图了:2个节点上分别安装配置keepalived和nginx,配置nginx反向代理后端的real server 比较关键的几个点: 1.为避免同一个局域网中有多个keepalived组中的多播相互响应,采用单播通信 2.状态

LVS DR 负载均衡集群

LVS DR 负载均衡集群 试验准备:五台主机ABCDE,主机ABCDE均为单网卡,IP地址分别为192.168.10.2,192.168.10.3,192.168.10.4,192.168.10.5,192.168.10.6.主机A作为内网客户端,主机B负载均衡调度器,主机C和主机D作为网站服务器,主机E作为共享存储,均清除防火墙和SELINUX.操作系统均为RHELx86_64,为最小化安装. 主机A操作 #vim /etc/sysconfig/network-scripts/ifcfg-e

keepalived高可用lvs集群,主/备和主/主模型

利用keepalived高可用lvs集群,主/备和主/主: vrrp_script高可用双主nginx: keepalived主备:lvs-dr工作模型 网络搭建: 在前端2台调度器: DR1:172.18.11.111 DR2:172.18.11.112 VIP:172.18.11.7 后端2台web服务器,运行nginx: RS1:172.18.11.11 RS2:172.18.11.12 搭建web服务器: 提供简单的测试页面,以便容易观测到哪台RS被调度响应: 在RS1上: ]# yum

RHEL6 搭建LVS/DR 负载均衡集群 案例

搭建LVS/DR 负载均衡集群 案例 实验拓扑图: 操作流程: Director Server :        192.168.4.50 pc50 安装并启用ipvsadm 配置辅助IP地址 创建虚拟服务器,向虚拟服务器中加入节点 Real Server:        192.168.4.51 pc51        192.168.4.52 pc52 配置WEB 服务器 配置辅助IP地址,调整内核参数 Clinet :192.168.4.253 pc253 连接虚拟服务器测试 环境准备:

keepalived+LVS实现高可用的Web负载均衡

数据流架构图: 一.测试环境 主机名 ip vip lvs01 192.168.137.150 192.168.137.80 lvs02 192.168.137.130 web01 192.168.137.128 -- web02 192.168.137.134 -- 二.安装配置lvs.keepalived 1.分别在lvs01,lvs02主机上安装ipvsadm keepalived yum install ipvsadm keepalived -y Installed: ipvsadm.x

lvs+keepalived实现高可用的web负载均衡

拓扑图 安装keepalived [[email protected] ~]# yum install -y keepalived 修改keepalived MASTER    配置文件 [[email protected] ~]# vim /etc/keepalived/keepalived.conf  ! Configuration File for keepalived   global_defs {    notification_email {      [email protecte

客户需求:nginx + keepalive 实现高可用 +后端的负载均衡

突然接到客户需求,需要使用nginx + keepalive 实现HA + LB,下面是主要的配置内容: 软件包直接从官网获取 操作系统环境:RHEL 6.8 X86_64 版本号:nginx-自定 keepalived-1.2.13-5.el6_6.x86_64.rpm IP地址分配:VIP: 192.168.56.10/24 RIP: 192.168.56.11/24  192.168.56.12/24 安装软件 yum -y install nginx keepalived #将nginx

keepalived高可用lvs

LVS只是做一个负载均衡,通过访问VIP来访问后端的网站程序,一旦LVS宕机,整个网站就访问不了,这就出现了单点.所以要结合keepalive这种高可用软件来保证整个网站的高可用.本文将介绍如何利用keepalive来实现LVS的高可用(以LVS的DR模式为例,生产环境后台的real server 网站内容是一致的,为了看到实验效果,这里是两个不同的页面). 实验拓扑: 1.在两台Real Server上配置web服务 2.配置两台Real Server 配置脚本如下: #!/bin/bash

drbd+mariadb+corosync+pacemaker构建高可用,实现负载均衡

DRBD DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群 drbd 工作原理:DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能. 当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个 文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远 程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一 个共享盘阵.因为数据同时存在