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
下一篇 2017-01-03

相关推荐

  • N25_第二周作业

    前言 我们这次使用HAProxy作为负载均衡调度器来实现后端httpd服务的负载均衡和动静分离,实现将来自用户的80端口的http请求转发只后端8080端口的server服务 HAProxy介绍 HAProxy的是一个免费的,非常快速和可靠的解决方案,提供高可用性,负载均衡和代理对TCP和HTTP的应用程序。它特别适用于非常高流量网站。多年来,它已成为标准的…

    Linux干货 2016-12-12
  • ThirdWeek_SecondDay

    Python学习笔记整理

    Linux干货 2017-10-09
  • 从Linux小白到大牛——与狼共舞的日子6

    马哥教育网络班21期+第6周课程练习 请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit …

    Linux干货 2016-10-31
  • linux上安全软件SElinux

    selinux简介 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的 实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的 任务中所需要文件。SELinux 默认安装在 Fedora 和 Red …

    系统运维 2016-09-19
  • Linux boot分区意外格式化或清除之后…

    boot分区在没有备份的情况下意外被清空,包括启动引导信息也没了。这时若Linux还在运行,那你是幸运的, 修复的方法: 1. cat  /etc/*release      #赶快先确定当前系统的具体版本。有ISO镜像赶快挂载上来.   &nbsp…

    Linux干货 2016-03-22
  • 源码包编译安装

    程序包编译安装:      Application-VERSION-release.src.rpm–> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装      源代码 –> 预处理 –> 编译 &#8…

    Linux干货 2016-08-23