lvs笔记之nat&dr模型简单实现

lvs笔记之nat&dr模型简单实现

lvs笔记之nat&dr模型简单实现

lvs 集群 实现 负载均衡 nat


ipvsadm使用说明

    -A: 添加一个集群服务
    -t: tcp
    -u: udp
    -f: firewall mark,
        通常用于将两个或以上的服务绑定为一个服务进行处理时使用
        例如httpd和https
        iptables mongo表一起使用

        service-address:
    -t IP:port
    -u ip:port
    -f firewall_mark

    -s 调度方法,默认为wlc
    -p timeout: persistent connection, 持久连接
    -E 修改定义过的集群服务
    -D -t|u|f service-address:删除指定的集群服务
RS相关:  
    -a:向指定的Cluster services中添加RS
    -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
    -r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
LVS类型:
    -g: Gateway模式,就是DR模型(默认)
    -i: ipip模式,TUN模型
    -m: masquerade地址伪装自动完成后半段的原地址转换,NAT
指定RS权重:
    -w # 省略权重为1
    -e: 修改指定的RS属性
    -d -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
    -C :清空集群服务配置
保存规则:
    ipvsadm-save 
    ipvsadm -S
载入指定的规则:
     ipvsadm-restore
     ipvsadm -R
查看ipvs规则:
    -L [options]
    -n: 数字格式显示IP地址
    -c: 显示连接数相关信息
    --stats: 显示统计数据
    --rate: 速率
    --exact:显示统计数据的精确值
    --timeout: 超时时间
     -Z: 计数器清零;

lvs-nat的简单实现

实验拓扑如下图:
lvs_nat.jpg-26.8kB

如图所示lvs-nat实现对后端2台real server(搭建apache httpd服务)进行负载均衡。

step1:

    1、按照拓扑所示配置好IP地址
    2、director需要准备两块网卡(一块公网网卡配置vip,一块内网网卡配置dip)
    3、后端两台real server准备一块网卡(内网网卡)配置rip,注意网关需要指向dip

step2各节点网络设置如下:

以下是director上的配置:

[root@localhost ~]# 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
       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:37:63:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.146/24 brd 192.168.2.255 scope global dynamic eno16777736
       valid_lft 4229sec preferred_lft 4229sec
    inet6 fe80::20c:29ff:fe37:6302/64 scope link 
       valid_lft forever preferred_lft forever
3: eno33554984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:37:63:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.253.153/24 brd 192.168.253.255 scope global eno33554984
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe37:630c/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.2.146
NETMASK=255.255.255.0
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="ee2e45b1-4b9c-41cb-8507-de93e3827896"
DEVICE="eno16777736"
ONBOOT="yes"
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984 
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.253.153
NETMASK=255.255.255.0
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="eno33554984"
DEVICE="eno33554984"
ONBOOT="yes"

以下是rs1、和rs2的配置:
QQ图片20161211224831.png-32.3kB
QQ图片20161211225106.png-32.4kB

注意real server的网关要指向dip


step3在real server上进行如下操作:

以下是real server1上进行的操作:
# yum install httpd -y &> /dev/null && echo success || echo failure    #RS1安装httpd
success #安装成功
#route add default gw 192.168.253.153  #设置默认网关为Director的DIP
# echo "<h1>This is Real Server 1 </h1>" > /var/www/html/index.html   #添加测试网页
#systemctl start httpd #启动httpd服务

以下是real server2上进行的操作:
# yum install httpd -y &> /dev/null && echo success || echo failure    #RS1安装httpd
success #安装成功
#route add default gw 192.168.253.153  #设置默认网关为Director的DIP
# echo "<h1>This is Real Server 2 </h1>" > /var/www/html/index.html #添加测试网页
#systemctl start httpd #启动httpd服务

step4在director上进行操作:

# yum install ipvsadm -y   #安装ipvsadm
[root@localhost ~]#  curl 192.168.253.169   #测试rs是否可以服务
<h1>This is Real Server 1 </h1>
[root@localhost ~]#  curl 192.168.253.168  #测试rs是否可以服务
<h1>This is Real Server 2 </h1>
[root@localhost ~]#  vim /etc/sysctl.conf   #编辑内核文件开启内核路由转发

# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1  #添加该项设置
[root@localhost ~]# sysctl -p  #对刚才的修改进行立即生效
net.ipv4.ip_forward = 1  #可见已经生效
[root@localhost ~]#  cat /proc/sys/net/ipv4/ip_forward  #查看是否开启路由转发功能
1  #开启
[root@localhost ~]# ipvsadm -A -t 192.168.2.146:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.2.146:80 -r 192.168.253.169 -m
[root@localhost ~]# ipvsadm -a -t 192.168.2.146:80 -r 192.168.253.168 -m
[root@localhost ~]#  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.146:80 rr
  -> 192.168.253.168:80           Masq    1      0          0         
  -> 192.168.253.169:80           Masq    1      0          0 
[root@localhost ~]#  curl http://192.168.2.146
<h1>This is Real Server 2 </h1>
[root@localhost ~]#  curl http://192.168.2.146
<h1>This is Real Server 1 </h1>

测试:
QQ图片20161209151052.png-15.9kB
QQ图片20161209151059.png-23.5kB

踩过的坑1

在实验过程中遇到了浏览器访问vip失败,但是director上curlvip却可以的情况后来排查发现real server开启了两块网卡(一块外网,一块内网,浏览器可以通过外网ip访问real server上的web服务),当我只启用了内网网卡时,浏览器成功访问vip。
 因此当你实验失败时请从以下两点排查:
       1、real server是否启用了多块网卡,如果是请禁用多余的 只启用内网网卡。并且把网关指向dip
       2 关闭iptables和selinux(或者设置合适的规则)

lvs-dr实现

实验拓扑如下:
lvs_dr拓扑.jpg-98.4kB

后端两台real server搭建httpd服务(默认已搭建完成并启动),各节点iptables和selinux均已关闭

step1在director上执行如下操作:

#ifconfig eno16777736:0 192.168.2.11/32 broadcast 192.168.2.11 up
#route add -host 192.168.2.11 dev eno16777736:0

step2在real server1上执行如下操作:

#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/eno16777736/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce
#添加如上内核参数,注意要在director节点添加ipvs规则前做此步操作
#ifconfig lo:0 192.168.2.11/32 broadcast 192.168.2.11 up
#route add -host 192.168.2.11 dev lo:0
#echo "<h1>This is Real Server 1 </h1>" > /var/www/html/index.html

step3在real server2上执行如下操作:

#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/eno16777736/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce
#添加如上内核参数,注意要在director节点添加ipvs规则前做此步操作
#ifconfig lo:0 192.168.2.11/32 broadcast 192.168.2.11 up
#route add -host 192.168.2.11 dev lo:0
#echo "<h1>This is Real Server 2 </h1>" > /var/www/html/index.html

step4在director节点执行如下操作:

  #ipvsadm -A -t 192.168.2.11:80 -s rr
 #ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.117 -g
 #ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.135 -g

测试:
 QQ图片20161212213930.png-30.4kB
 QQ图片20161212213938.png-40.2kB

以上lvs-dr模型简单实现到此为止

总结

lvs特点是模型工作原理比较复杂,但是其服务配置却非常简单,lvs集群的配置难点主要集中在对模型的理解上,对网络的配置及排错上。
     这仅仅只是lvs的简单实现后期会与其他集群服务配合进行更复杂的拓扑。

原创文章,作者:Net17_desperado,如若转载,请注明出处:http://www.178linux.com/65441

(0)
Net17_desperadoNet17_desperado
上一篇 2017-01-03 10:39
下一篇 2017-01-03 11:05

相关推荐

  • vim小结

    1. 简介 Vim(Vi[Improved])编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的Vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立、修改文本文件。进入Vim编辑程序,可以在终端输入下面的命令: $vim [filename] 其中filename是要编辑器的文件的路径名。如果文件不存在,它将…

    Linux干货 2016-08-12
  • N25 – Week 5 blog

    1. 显示当前系统上root, fedora或user1用户的默认shell [root@dhcp-10-129-6-166 ~]# grep -E "root|fedora|user1" /etc/passwd | grep -o "[^…

    Linux干货 2016-12-27
  • 无插件Vim编程技巧

    相信大家看过《简明Vim教程》也玩了《Vim大冒险》的游戏了,相信大家对Vim都有一个好的入门了。我在这里把我日常用Vim编程的一些技巧列出来给大家看看,希望对大家有用,另外,也是一个抛砖引玉的过程,也希望大家把你们的技巧跟贴一下,我会更新到这篇文章中。另外,这篇文章里的这些技巧全都是vim原生态的,不需要你安装什么插件。我的Vim的版本是7.2。 浏览代码…

    Linux干货 2015-04-01
  • 第四周 文件操作

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@localhost ~]# cp -a /etc/skel /home/tuser1 [root@localhost ~]# chmod -R go= /home/tuser1 [root@localhost ~]…

    Linux干货 2017-12-24
  • varnish详解

      第一章    http缓存的基础概念 1、程序运行时具有局部性特征 时间局部性缓存的数据往往被打有时间缀,具有定期失效的特征,过期后会从源服务器检验请求验证是否需要重新拉取数据,某数据被访问后,该数据往往会再次在短时间内被访问到。 空间局部性被访问数据的周边数据被访问的概率会比其它常规数据访问大很多,所以这些访问数…

    Linux干货 2016-11-15
  • ansible

    Ansible 1、  特性: 模块化:调用特定的模块,完成特定任务; 基于Python语言实现部署简单:agentless; 支持自定义模块; 支持playbook;编排任务; ansible自身并不实现任何管理任务,它的所有管理任务,统统都使用模块完成;             &nb…

    Linux干货 2016-11-11