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

相关推荐

  • 安全与加密、申请CA证书

    本章内容 v  1、安全机制  2、对称加密  3、不对称加密 4、散列算法  5、PKI 和CA v 在互联网数据传输的过程的,数据的安全私密性是及其重要的,所以就有数据的加密和解密的过程。 数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它…

    Linux干货 2016-12-04
  • 网络班第七周 作业

    1、创建一个10G分区,并格式为ext4文件系统 (1) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳 创建了一个20G的SCSI硬盘 fdisk /dev/sdb 创建ext4文件系统 ~]# mke2fs -…

    2017-09-16
  • 文件系统

            文件系统表现为单个统一的层次结构:从目录/开始并通过若干数量的子目录继续向下扩展,/也叫做根目录。这种单一的层次系统和 Windows 的不一样,后者的分区有专门的名字空间。        &n…

    Linux干货 2016-02-28
  • 第二周课堂练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。         ls     ls命令用来显示目标列表,在Linux中是使用率较高的命令。      -a:显示…

    Linux干货 2016-09-15
  • 正则表达式以及Linux文本搜索工具grep

    一正则表达式 regual Expression  简称REGEXP 定义:由一类特殊字符以及文本字所编写的模式,其中有些字符不表示其字面意义,而用于统配和统配功能 分类:     基本正则表达式:BRE 贪婪模式(尽可能长地去匹配符合模式的内容     扩展表达式:E…

    Linux干货 2016-08-07
  • 马哥教育网络班22期+第1周课程练习 忍者乱太郎喻成

    1.计算机组成:  根据冯诺依曼的计算机结构分为四大块:控制器,运算器, 存储器,输入输出设备 控制器:对其他的组件进行控制 运算器:用于处理计算工作,不控制输入和输出 储存器:用于暂时或长期存储数据 输入输出:与外界进行交互 个人延伸: 我的理解这是一个在计算机研发之前的一个理论假象, 相对现在真实的计算机体系,这个分类会比较模糊。 运算器:cp…

    Linux干货 2016-08-15