文档章节

LVS DR模式搭建、 keepalived + LVS

Linux_Anna
 Linux_Anna
发布于 2017/09/06 16:27
字数 2708
阅读 28
收藏 1

18.11 LVS DR模式搭建

1.1 DR模式搭建 --准备工作

  • 准备三台机器  只需要一个网卡和一个IP
    第1台分发器IP:192.168.2.179
    第2台Real Server IP:192.168.2.180
    第3台Real Server IP:192.168.2.181
  • 原本在NAT模式192.168.2.179是作为一个内网IP
    现在在DR模式192.168.2.179是作为一个公网IP

1.2  把两台Real Server 网关更改回原来

[root@root-02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR=192.168.2.180
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=119.29.29.29

[root@root-02 ~]# systemctl restart network


[root@root-03 ~]#  vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.181
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=119.29.29.29

[root@root-03 ~]# systemctl restart network

 注:在做NAT模式的时候GATEWAY 设置为192.168.2.179,现在改回原来的192.168.2.1


1.3 在分发器写一个执行脚本

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.2.190
rs1=192.168.2.180
rs2=192.168.2.181
#注意这里的网卡名字,设置虚拟网卡,绑定VIP
ifdown eno16777736
ifup eno16777736
ifconfig eno16777736:1 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eno16777736:1
$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



注: -g -- DR模式
    
    -r -- 跟rs的IP  

    ps 若不加-r 选项会提示错误 :
    unexpected argument 192.168.2.180:80
    unexpected argument 192.168.2.181:80


1.4 两台Real Server 都需要写一个执行脚本

#rs1 上
[root@root-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#! /bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.0 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


#rs2 上
[root@root-03 ~]# vim /usr/local/sbin/lvs_rs.sh

#!/bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev 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


特别提示:
        这两台机器在写完脚本后,在执行的时候都提示无法载入文件
        但是是成功的,使用route -n 命令查看,是有VIP的路由. 
        并且使用ip add 也可以看到lo 网卡是绑定VIP的.
        再者也可以去分发器那台机器上使用ip add 是否有VIP的IP号.

[root@root-03 ~]# sh /usr/local/sbin/lvs_rs.sh
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
[root@root-03 ~]# echo $?
0
[root@root-03 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.2.190   0.0.0.0         255.255.255.255 UH    0      0        0 lo


[root@root-03 ~]# ip add
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
       valid_lft forever preferred_lft forever
    inet 192.168.2.190/32 brd 192.168.2.190 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:67:89:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.180/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe67:899e/64 scope link 
       valid_lft forever preferred_lft forever


1.5 测试访问

说明:在网页上测试访问,第一次访问会在rs1上,第二次访问会在rs2 ,以此类推...均衡轮询


 

18.12 keepalived + LVS 

1. 介绍keepalived +LVS

1.2 接下来介绍keepalived是如何实现负载均衡的功能,keepalived内置了LVS的功能,是如何内置的? 是如何实现的,还需不需要安装ipvsadm呢?

现在来分析一下为什么需要keepalived,把keepalived加入到LVS当中来,,目的是什么呢?
 有两个原因:第一个原因是LVS有个很关键的角色--directory(分发器),如果这个分发器down 机了,那所有的访问都将会被终止,因为所有的入口都在这个分发器上,所以说我们可以把这个分发器做一个高可用,把keepalived 用在分发器上就很完美,并且keepalived还有负载均衡的作用.
  第二个原因是 在使用LVS的时候,没有其他额外的操作的话,把rs2 的Nginx服务停掉,在去网页上访问的时候, 当访问到down 机的 rs2上就会出问题, 还是一样会把请求转发这台rs2上,那么rs2 都已经down机了,肯定是无法提供服务的. keepalived 出现就是为了解决这个问题,即使说rs2 已经down机了,rs1还可以保证服务正常提供. keepalived 可以检测到后面的某台rs 已经down 机,就不会继续把请求转发到这台down 机的rs上. 
现在分发器上可以不需要安装ipvsadm,若已经安装甚至可以卸载掉

# 第2个原因 的演示
[root@root-03 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@root-03 ~]# ipvsadm -ln
-bash: ipvsadm: 未找到命令
[root@root-03 ~]# ps aux | grep nginx
root       3060  0.0  0.0 112660   964 pts/0    S+   15:30   0:00 grep --color=auto nginx



[root@root-01 ~]# 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.2.190:80 wrr
  -> 192.168.2.180:80             Route   1      2          2         
  -> 192.168.2.181:80             Route   1      0          4  


1.2 编辑keepalived的配置文件

说明:把keepalived.conf 全部清空,然后到这个网址复制内容粘贴进去                   

复制内容的网址:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf

[root@root-01 ~]# vim /etc/keepalived/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 {
        192.168.2.190
    }
}
virtual_server 192.168.2.190 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.2.180 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.2.181 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}


1.3 清空ipvsadm 之前的规则

[root@root-01 ~]# ipvsadm -C


1.4 启动keepalived 服务

[root@root-01 ~]# systemctl start keepalived
[root@root-01 ~]# ps aux |grep keepalived
root       3515  0.0  0.1 111700  1312 ?        Ss   16:06   0:00 /usr/sbin/keepalived -D
root       3516  0.0  0.3 120556  3124 ?        S    16:06   0:00 /usr/sbin/keepalived -D
root       3517  0.0  0.2 120428  2404 ?        S    16:06   0:00 /usr/sbin/keepalived -D
root       3522  0.0  0.0 112660   964 pts/0    S+   16:06   0:00 grep --color=auto keepalived


#启动keepalived之后就可以查看到这些规则
[root@root-01 ~]# 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.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0         
  -> 192.168.2.181:80             Route   100    0          0   

# 若把其中一台rs 停掉,再使用 ipvsadm -ln 命令查看,那么就只有一台rs,说明keepalived会把down 掉的rs 剔除掉.

[root@root-03 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@root-03 ~]# ps aux |grep nginx 
root       3126  0.0  0.0 112660   960 pts/0    S+   16:16   0:00 grep --color=auto nginx


[root@root-01 ~]# 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.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0     


1.5 需要注意的是:两台rs上 的/usr/local/sbin/lvs_rs.sh 脚本一样要是执行的.

#rs1 上
[root@root-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#! /bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.0 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


#rs2 上
[root@root-03 ~]# vim /usr/local/sbin/lvs_rs.sh

#!/bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev 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


特别提示:
        这两台机器在写完脚本后,在执行的时候都提示无法载入文件
        但是是成功的,使用ipvsadm 命令查看,是有VIP的路由. 
        并且使用ip add 也可以看到分发器上是绑定了 VIP的.
 

[root@root-03 ~]# sh /usr/local/sbin/lvs_rs.sh
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'

[root@root-01 ~]# 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.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0    


[root@root-01 ~]# ip add
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
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:0f:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.179/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.2.190/32 brd 192.168.2.190 scope global eno16777736:1
       valid_lft forever preferred_lft forever
    inet 192.168.2.100/24 brd 192.168.2.255 scope global secondary eno16777736:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:f93/64 scope link 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:0f:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.18.128/24 brd 192.168.18.255 scope global dynamic ens37
       valid_lft 1447sec preferred_lft 1447sec
    inet6 fe80::20c:29ff:fea0:f9d/64 scope link 
       valid_lft forever preferred_lft forever

 

1.6 测试访问

说明:在网页上测试访问,第一次访问会在rs1上,第二次访问会在rs2 ,以此类推...均衡轮询

© 著作权归作者所有

共有 人打赏支持
Linux_Anna
粉丝 8
博文 175
码字总数 173566
作品 0
广州
运维
私信 提问
LVS DR模式搭建-keepalived 加 LVS DR

LVS DR模式搭建: 生产环境多用DR模式。 一.准备: 分发器(dir): 192.168.133.130 rs1:192.168.133.132 rs2:192.168.133.133 vip(虚拟IP):192.168.133.200 二.DR模式搭建: 1.分发器...

ZHENG-JY
09/09
0
0
LVS DR模式搭建 和 keepalived + LVS

7月5日任务 18.11 LVS DR模式搭建 18.12 keepalived + LVS 扩展: haproxy+keepalived http://blog.csdn.net/xrt95050/article/details/40926255 nginx、lvs、haproxy比较 http://www.csdn.......

lyy549745
07/05
0
0
高可用简介及简单实现方案

前面介绍了lvs集群架构的搭建,提到了单点故障问题,一旦Director服务器出现问题不可用,lvs集群将整体崩溃,集群所提供的服务将顺利下线。高可用的想法是一旦中间某台服务器丧失提供服务的能...

从运维开始
2017/10/25
0
0
2018-4-11 16周1次课 LVS DR模式搭建、keepalived + LVS

18.11 LVS DR模式搭建 IPtunnel模式用到的不多,不再多赘述 1,准备工作 三台机器 分发器,也叫调度器(简写dir):192.168.65.128 rs1:192.168.65.129 rs2:192.168.65.130 vip:192.168.6...

alexis7gunner
10/30
0
0
DR模式LVS搭建、keepalived+LVS

DR模式LVS搭建 准备 三台机器,需要三台机器的公网IP,并且需要一个VIP。 调度器IP:192.168.42.128 服务器rs1 IP:192.168.42.129 服务器rs2 IP:192.168.42.130 VIP:192.168.42.200 在调度...

黄昏残影
09/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0
深入理解Plasma(四):Plasma Cash

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍在 Plasma 框架下的项目 Plasma Cash。 深入理解Plasma(1):...

HiBlock
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部