文档章节

LVS DR模式搭建、 keepalived + LVS

Linux_Anna
 Linux_Anna
发布于 2017/09/06 16:27
字数 2708
阅读 25
收藏 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
博文 159
码字总数 162982
作品 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
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
04/11
0
0
高可用简介及简单实现方案

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

从运维开始
2017/10/25
0
0
centos6.2,64位系统搭建LVS+Keepalived(DR模式)

最近公司网站访问又见瓶颈,为了缓解压力,决定用LVS+Keepalived来实现负载均衡.在前面的文章中已经写过了用NAT模式来实现负载均衡 http://duyunlong.blog.51cto.com/1054716/716138,而今天...

duyunlong
2013/01/15
0
0
LVS DR模式负载均衡搭建、keepalived高可用+LVS负载均衡配合

LVS DR模式搭建 准备: dir(调度器):192.168.188.2 rs1:192.168.188.3 rs2:192.168.188.6 vip:192.168.188.200 安装ipvsadm dir设置 rs1设置 rs2设置 keepalived+LVS LVS缺点: 当使用...

若白衣
04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
1
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部