keepalived+lvs集群

LVS三种模式介绍:

  • 一.DR模式(路由模式)

原理:

  1. 首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
  2. 然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)
  3. 真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器

优点:

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:

需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局城网环境。

项目架构

e61d3288a5354554b01033dcf4427b05.png

项目规划

IP

节点

网卡

用途

192.168.143.130

dir

nat

分发器

192.168.143.131

rs1

nat

服务器

192.168.143.132

rs2

nat

服务器

192.168.143.133

rs3

nat

服务器

192.168.143.110

 

 

Vip

项目实施

1.搭建基础环境

给所有节点关闭防火墙,selinux:

# systemctl stop firewalld

# systemctl disable firewalld

# setenforce 0

Iptables规则清空并保存:

需要先yum安装 iptables-sevices

# iptables -F; iptables -t nat -F; service iptables save         //三台机器上都要执行

在dir节点安装LVS核心工具ipvsadm:

[root@dir ~]# yum install -y ipvsadm

给三个服务器都安装nginx:

[root@rs3 ~]# yum install -y epel-release

[root@rs3 ~]# yum install -y nginx

2.配置脚本

2.1给分发器配置脚本

[root@dir ~]# vi /usr/local/sbin/lvs_dr.sh

$ipv -a -t $vip:80 -r $rs2$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

$ipv -C

#! /bin/bash

# dir分发器上开启路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.143.110

rs1=192.168.143.131

rs2=192.168.143.132

rs3=192.168.143.133

#代理服务器是真正要响应客户机的,所以虚拟ip 配在网卡,真实服务器要把虚拟ip配置搭配lo回环网卡上

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

# 清空策略

$ipv -C

# 指定代理服务器的虚拟ip,并设置调度算法为加权轮询算法

$ipv -A -t $vip:80 -s wrr
# 加真实服务器-a,指定VIP地址及TCP端口-t,指定RIP地址及TCP端口-r,指定DR模式-g

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

$ipv -a -t $vip:80 -r $rs3:80 -g -w 1

 

2.2 给服务器配置脚本

三个服务器都要进行配置

操作相同,只进行其中一个

[root@rs3 ~]# vi /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.143.110

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

#1只回答目标IP地址是来访网络接口本地地址的ARP查询请求

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore



#2对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce



#1仅在请求的目标IP配置在本地主机的接收到请求报文的接口上,才给予回应

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
#2必须避免将接口信息向非本网络进行通告

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

 

3.对服务器页面进行区分

[root@rs3 ~]# echo "<h1 align=center>rs3</h1>" >/usr/share/nginx/html/index.html

[root@rs3 ~]# systemctl start nginx

[root@rs3 ~]# curl 192.168.143.133

rs3

其他两台服务器操作相似

4.测试

分别在四台机器上执行各自脚本;

执行脚本前要先yum 安装net-tools,因为ifconfig和route工具本身没有

[root@dir ~]# bash /usr/local/sbin/lvs_dr.sh

[root@rs1 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@rs2 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@rs3 ~]# bash /usr/local/sbin/lvs_rs.sh

查看策略是否生效:

[root@dir ~]# 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.143.110:80 wrr

  -> 192.168.143.131:80           Route   1      0          0        

  -> 192.168.143.132:80           Route   1      0          0        

  -> 192.168.143.133:80           Route   1      0          0

直接使用浏览器测试

5bccd73d33f843f58b1c6ee1715b8409.png749839099b8c477eb980d5529c2caabb.png440d4cdc428b4fdc82754aefc6c99c42.png4e356d3da75a4d89ae73ce12d589382b.png

 

 

 

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。

所以这时候扩展出keepalived+LVS

  • 二.keepalived+LVS

项目架构

ebab11fd51354566854b1fd704d21056.png

项目规划

IP

节点

网卡

用途

192.168.143.130

dir

nat

分发器主

192.168.143.131

rs1

nat

服务器

192.168.143.132

rs2

nat

服务器

192.168.143.133

rs3

nat

服务器

192.168.143.134

backup

nat

分发器备

192.168.143.110

 

 

Vip

项目实施

如果你的机器上还未安装过keepalived,则需要先安装,直接yum install -y keepalived即可。

[root@dir ~]# > /etc/keepalived/keepalived.conf    清空配置文件

1.编辑keepalived的配置文件

备份节点同理

      [root@dir ~]# vi /etc/keepalived/keepalived.conf

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.143.110

    }

}



virtual_server 192.168.143.110 80 {             #VIP

    delay_loop 3                #每隔3秒查询realserver状态
    lb_algo wlc                                 #lvs算法

    lb_kind DR                                  #DR模式

    persistence_timeout 5                   #(同一IP的连接5秒内被分配到同一台realserver)

    protocol TCP                #用TCP协议检查realserver状态



    real_server 192.168.143.131 80 {            #真实服务器ip

        weight 100              #权重

        TCP_CHECK {

            connect_timeout 10          # 10秒无响应超时(连接超时时间)

            nb_get_retry 3                      #失败重试次数

            delay_before_retry 3        #失败重试的间隔时间

            connect_port 80             #连接的后端端口

        }

}

     real_server 192.168.143.132 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3
            delay_before_retry 3

            connect_port 80

        }

    }

     real_server 192.168.143.133 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

 

2.清空之前的环境

备份节点同理

由于上一节刚刚执行过LVS的脚本,所以需要做一些操作:

把之前的ipvsadm规则清空

[root@dir ~]# ipvsadm -C

重启网卡,可以把之前设置的VIP删除掉

[root@dir ~]# systemctl restart network   

因为我们在keepalived的配置文件中定义的LVS模式为DR模式,所以还需要在两台rs上重新执行lvs_rs.sh脚本,这个脚本就是上一节设置的脚本。

[root@rs1 ~]# sh /usr/local/sbin/lvs_rs.sh

[root@rs2 ~]# sh /usr/local/sbin/lvs_rs.sh

[root@rs3 ~]# sh /usr/local/sbin/lvs_rs.sh

3.在主备上启动keepalived服务:

[root@dir ~]# systemctl start keepalived

检查有无keepalived进程

[root@dir ~]# ps -aux |grep keepalived

root       5395  0.0  0.0 118684  1384 ?        Ss   07:29   0:02 /usr/sbin/keepalived -D

root       5396  0.0  0.1 129616  3328 ?        S    07:29   0:05 /usr/sbin/keepalived -D

root       5397  0.4  0.1 129484  2620 ?        S    07:29   1:25 /usr/sbin/keepalived -D

root      11487  0.0  0.0 112720   988 pts/0    S+   13:15   0:00 grep --color=auto keepalived

4.测试

4.1 测试是否能够用vip访问到服务器

fdc1abc460a946f288be9d427b7be098.png

查看策略是否生效:

[root@dir ~]# 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.143.110:80 wlc persistent 5

  -> 192.168.143.131:80           Route   100    0          0        

  -> 192.168.143.132:80           Route   100    0          0        

  -> 192.168.143.133:80           Route   100    2          0        

4.2 测试把客户端访问的服务器关掉,能否切换其他服务器

[root@rs3 ~]# systemctl stop nginx

c254fec278a944d380083fce31285ce2.png

查看策略:

[root@dir ~]# 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.143.110:80 wlc persistent 5

  -> 192.168.143.131:80           Route   100    0          0        

  -> 192.168.143.132:80           Route   100    2          0

再次启动rs3服务器

[root@rs3 ~]# systemctl start nginx

查看策略服务器变回了3台

[root@dir ~]# 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.143.110:80 wlc persistent 5

  -> 192.168.143.131:80           Route   100    0          0        

  -> 192.168.143.132:80           Route   100    2          2        

  -> 192.168.143.133:80           Route   100    0          0       

4.3测试主备分发器的高可用性

停掉主节点的keepalived

[root@dir ~]# systemctl stop keepalived

查看vip是否飘移到备节点上了

c7c6ea3a29414875939cac3408d514ad.png

去浏览器看看能否正常运行

832dd976ecbb4e8cb240caa723446718.png

给备节点安装ipvsadm

查看策略:

[root@backup keepalived]# 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.143.110:80 wlc persistent 5

  -> 192.168.143.131:80           Route   100    0          0        

  -> 192.168.143.132:80           Route   100    0          0        

  -> 192.168.143.133:80           Route   100    2          0       

三.Nat模式

原理

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。

 

然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的工P地址(RIP)。

 

真实服务器响应完请查看默认路由,把响应后的数据包发送给负载均衡器,

负载均衡器在接收到响应包后,把包的源地址改成虚拟地址,(VIP)然后发送回给客户端。

优点

集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

缺点

扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈

项目架构

1db4e502a892405388dcba58a451cef4.png

项目规划

IP

网卡

节点

用途

192.168.143.130

192.168.117.130

nat

仅主机

dir

分发器

192.168.117.131

仅主机

rs1

服务器

192.168.117.132

仅主机

rs2

服务器

192.168.117.133

仅主机

rs3

服务器

项目实施

这里需要把服务器的网关设置成192.168.117.130即分发器内网的ip

1.清空之前的规则

iptables -F; iptables -t nat -F; service iptables save

2.编写脚本

继续在dir上编写一个脚本:

[root@dir ~]# vi /usr/local/sbin/lvs_nat.sh

#!/bin/bash

# director 服务器上开启路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

# 关闭icmp的重定向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

# 注意区分网卡名字

echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens36/send_redirects

# director 设置nat防火墙

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.143.0/24  -j MASQUERADE

# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C

$IPVSADM -A -t 192.168.143.130:80 -s wlc

$IPVSADM -a -t 192.168.143.130:80 -r 192.168.117.131:80 -m -w 1

$IPVSADM -a -t 192.168.143.130:80 -r 192.168.117.132:80 -m -w 1

$IPVSADM -a -t 192.168.143.130:80 -r 192.168.117.133:80 -m -w 1

 

直接执行脚本

[root@dir ~]#  bash /usr/local/sbin/lvs_nat.sh

在dir上直接访问rs

[root@dir ~]# curl 192.168.117.131

<h1 align=center>rs1</h1>

[root@dir ~]# curl 192.168.117.132

<h1 align=center>rs2</h1>

[root@dir ~]# curl 192.168.117.133

<h1 align=center>rs3</h1>

然后再直接访问dir的外网192.168.143.130

[root@dir ~]# curl 192.168.143.130

<h1 align=center>rs3</h1>

[root@dir ~]# curl 192.168.143.130

<h1 align=center>rs2</h1>

[root@dir ~]# curl 192.168.143.130

<h1 align=center>rs1</h1>

查询策略:

d2be60adc59b44059a557dfbed4055a6.png

  • Tun模式(隧道模式)

原理

首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。

然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。

真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均器

优点

负载均衡器只负责将请求包分发给后端节点服务器,而Rs将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

且负载均衡服务器 和 真实服务器可以不在同一网段(一般用于跨地区的大型企业)

缺点

ip隧道要花钱买 成本高

 

因为Tun模式并不常见,这里就不做案例了,它能实现的效果和dr大致类似。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值