Linux集群架构(2)LVS介绍、LVS的调度算法、NAT模式搭建、 DR模式、keepalive

             负载均衡集群介绍

blob.png

                LVS介绍

blob.png


1.LVS NAT模式:(,目标ip转发。适用于小型集群,机器数量不多10台左右)

blob.png


2.LVS IP Tunnel模式(将目标ip进行更改)

blob.png

(在这个模式下的rs机器都是配置有公网ip)

3.LVS DR模式(把数据包的MAC地址修改)

blob.png

NAT模式适合小型集群,机器在10台左右。其优势是节省公网ip。 IP TUNNEL和DR

相差不大,能使用在较大的集群模式下,但是每台rs服务器都要配置有公网ip,这样会比较浪费公网ip,费钱。


        LVS的调度算法

blob.png

常用的算法是前四种:rr 、wrr 、 lc 、wlc。



                LVS NAT模式搭建

  准备工作:

blob.png


1.准备三台机器(我是从第二台直接克隆的)

(1)修改第三台克隆机的ip

blob.png

修改完重启服务:

blob.png

(2)修改克隆集主机名:

 hostnamectl set-hostname cansheng3


2.将分发器,也叫调度器(简写为dir)机器(133)添加多一块网卡:

(因为之前已经配置有了ens37)

blob.png

这个ens37的网卡是仅主机模式

blob.png

同时查看到这个网卡的子网ip网段是192.168.243.0

blob.png

(1)所以对这个ens37设置ip:

vim /etc/sysconfig/network-scripts/ifcfg-ens37

blob.png

修改完后重启网络服务:

systemctl  restart network

blob.png

(2)检测ip是否能ping通:(在window的终端下测试)

ping 192.168.243.144

blob.png


3.修改两台rs(真实服务器)网关(要和dir分发器的内网一致)

blob.png

vim /etc/sysconfig/network-scripts/ifcfg-ens33 

blob.png

!!当这两台机器rs的网关修改成dir内网的ip时则不能上网。

修改完后重启服务和查看网关

systemctl restart network

route -n

blob.png


       

4.三台机器上都执行执行 


 (1)systemctl stop firewalld; 

     systemc disable firewalld

(2)yum install -y iptables-services

 (3)systemctl start  iptables

 (4)iptables -F; 

 (5)service iptables save 

关闭selinux

vim /etc/selinux/config

blob.png

(如果在使用yum下载的时候发现很慢,则先吧rpel改了名字再下载,需要用到rpel

再把名字改回来

blob.png

mv /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo1

)


            

       开始 NAT模式搭建

1.只要在分发器dir上安装ipvsadm  (实现lvs功能的重要工具)

 yum install -y ipvsadm

blob.png

2.在dir上编写脚本,vim /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

# 注意区分网卡名字,我的两个网卡分别为ens33和ens37(根据自己的网卡名设定)

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

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

# director 设置nat防火墙

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.136.0/24  -j MASQUERADE  //实现让同网段的内网实现上网

# director设置ipvsadm

IPVSADM='/usr/sbin/ipvsadm'

$IPVSADM -C   //清空ipvsadm规则

$IPVSADM -A -t 192.168.243.144:80 -s lc -p 3  //添加一个规则,并指定调度算法为lc ,-p指定超时时间(单位秒,建议不加) 

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.134:80 -m -w 1 //-m:表示NAT模式;-i:ip Tunnel;-g:DR模式-w:表示权重

$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.135:80 -m -w 1  //-a:添加rs;-t:TCP

(-p的设置会是请求在指定的时间内请求在同一台rs上)
blob.png

写完脚本执行一下:

sh /usr/local/sbin/lvs_nat.sh

(执行脚本任何输出表示正确)


       NAT模式效果测试

 blob.png

1. 两台rs上都安装nginx,并开启服务


2.设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结

A:对rs1机器操作

> /usr/share/nginx/html/index.html (清空文件内容)

vim /usr/share/nginx/html/index.html

blob.png

B:对rs2机器操作:

> /usr/share/nginx/html/index.html (清空文件内容)

vim /usr/share/nginx/html/index.html

blob.png

3. 浏览器里访问192.168.243.144,多访问几次看结果差异

浏览器中输入公网ip

blob.png

使用curl测试:curl 192.168.243.144 

blob.png

(可看出请求均衡在两台rs上)

使用命令 ipvadm -ln 可以看到相应的规则

blob.png


      DR模式搭建

(在生产环境中,使用较多的是DR模式,但是使用公网ip资源大。

在生产中也可以搭建一个内网,使用一个公网ip,映射到公网的VIP上,从而减少公网资金支出

)


  准备工作

blob.png


把上面实验的两台rs的网关修改回来

blob.png


DR模式搭建 

blob.png

1.dir上编写脚本 vim /usr/local/sbin/lvs_dr.sh //内容如下

#! /bin/bash

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

ipv=/usr/sbin/ipvsadm

vip=192.168.136.200

rs1=192.168.136.134

rs2=192.168.136.135

#注意这里的网卡名字

ifdown ens33

ifup ens33

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

route add -host $vip dev ens33:2

$ipv -C

$ipv -A -t $vip:80 -s wrr

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

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


blob.png


执行脚本:sh /usr/local/sbin/lvs_dr.sh

blob.png

(这个提示是正常的。因为我们执行了ifdown 和ifup)


2.两台rs上也编写脚本 vim /usr/local/sbin/lvs_rs.sh//内容如下

#/bin/bash

vip=192.168.136.200

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

ifdown lo

ifup lo

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

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


blob.png

两台rs都执行脚本: sh /usr/local/sbin/lvs_rs.sh


    检测VIP 

    ip addr

blob.png



3.测试:

blob.png

测试最好是用另外一台不同ip网段的虚拟机测试最好。

(当我们的访问量很大时,自然起到均衡的作用。)



        keepalived+ lvs

(在LVS架构中,NAT和DR模式,当后端的RS宕机时,调度器依然会把请求转发到宕机的RS上。使用keepalived可以解决此问题,keepalived能实现高可用和负载均衡)

blob.png

blob.png

一般的情况下,使用这个keepalived做负载均衡,首先就是要做高可用再做负载均衡

所以最少要准备四台机器:两台做keepalived,两台作为真实机器

(本次实验用三台机器

dir(安装keepalived)136.133

 rs1 136.134

 rs2 133.135

 vip 133.200



步骤

(在实验之前,我们甚至是不需要使用ipvsadm 即可ipvsadm -c 卸载)

1. 编辑keepalived配置文件: 

vim /etc/keepalived/keepalived.conf  (先把之前内容清空)

/内容请到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 获取

内容:

vrrp_instance VI_1 {

    #备用服务器上为 BACKUP

    state MASTER

    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下

    interface ens33

    virtual_router_id 51

    #备用服务器上为90

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass aminglinux

    }

    virtual_ipaddress {      #虚拟ip:VIP

        192.168.136.200

    }

}

virtual_server 192.168.136.200 80 {  #端口根据具体监控的端口确定

    #(每隔10秒查询realserver状态)

    delay_loop 10

    #(lvs 算法)

    lb_algo wlc

    #(DR模式)

    lb_kind DR

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

    persistence_timeout 60

    #(用TCP协议检查realserver状态)

    protocol TCP

    real_server 192.168.136.134 80 {

        #(权重)

        weight 100

        TCP_CHECK {

        #(10秒无响应超时)

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.136.135 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}


添加完内容后: 启动keepalived服务

systemctl start keepalived 

blob.png

2.其他两台真实机器rs的nginx服务要启动起来

systemctl start nginx 

同时也要把之前的vip清空掉:systemctl restart network


3.使用 ipvsadm -ln :可以查看到设定的VIP和两台rs机器

blob.png

此时我们尝试着把气筒一台或两台rs机器的nginx服务停止,可以发现

keepalived会把宕机的rs机器踢出,这样就可以保证到,当rs真实服务器

宕机后,请求不在发送到其上。

(1)停掉rs1机器后的效果:

blob.png


(2)把两台的rs机器都停了

blob.png


当我们把rs机器再次启动的时候,keepalived会自动的把负载的机器添加回来


!!!!使用keepalived+LVS DR需要注意的事项.

(1)两台rs上,依然要执行/usr/local/sbin/lvs_rs.sh脚本

 两台rs上也编写脚本 vim /usr/local/sbin/lvs_rs.sh//内容如下

#/bin/bash

vip=192.168.136.200

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

ifdown lo

ifup lo

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up //命令行下添加ip。临时添加,重启失去


route add -host $vip lo:0

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

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

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

 分别在dir上和两个rs上执行这些脚本


(2)在dir分发器需执行

blob.png

执行:echo 1 >/proc/sys/net/ipv4/ip_forward


浏览器测试:

blob.png

blob.png




猜你喜欢

转载自blog.51cto.com/13589255/2114615