lvs-nat实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs-nat实现相关的知识,希望对你有一定的参考价值。

ipvs:内核中的协议栈上实现;

ipvs实现工具:

    ipvsadm:用户空间的集群服务管理工具;

实现ipvs功能的:ipvs,以及ipvs上的规则;

四层交换或四层路由;


一个ipvs主机(director)可以同时定义多个cluster service;

一个ipvs服务至少应该有一个rs;


编辑内核的三种模式:

    编进内核,编成模块,互编译;

一般针对于性能来说,ipvs是不能编译成模块的,


(1)查看当前系统是否支持ipvs:因为ipvs本身就是内核中的功能,通过一些驱动完成;

grep -i -A 10 ‘IPVS‘ /boot/config-3.10.0-327.el7.x86_64

    可以查看ipvs支持的那些调度方法,以及ipvs支持协议;        

(2)安装ipvsadm

yum install -y ipvsadm

(3)启动ipvsadm.service(类似于iptables,但这不是一个服务,启动它的主要是为了装在保存在内核中的规则)

[[email protected] yum.repos.d]# rpm -ql ipvsadm/etc/sysconfig/ipvsadm-config    #配置文件/usr/lib/systemd/system/ipvsadm.service    #开启ipvsadm服务;/usr/sbin/ipvsadm    #ipvsadm主程序/usr/sbin/ipvsadm-restore    #重载配置到内核中;/usr/sbin/ipvsadm-save    #保存规则的/usr/share/doc/ipvsadm-1.27/usr/share/doc/ipvsadm-1.27/README/usr/share/man/man8/ipvsadm-restore.8.gz/usr/share/man/man8/ipvsadm-save.8.gz/usr/share/man/man8/ipvsadm.8.gz

(4)ipvsadm命令的用法:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [-b sched-flags]

ipvsadm -D -t|u|f service-address

ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

ipvsadm -d -t|u|f service-address -r server-address

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]    #清空或置零

ipvsadm --set tcp tcpfin udp

ipvsadm --start-daemon state [--mcast-interface interface]

[--syncid syncid]

ipvsadm --stop-daemon state

ipvsadm -h

管理集群服务:增、改,删,查

    (1)ipvsadm -A|E -t|u|f service-address [-s scheduler]  [-p [timeout]]

-A:增,append,add

[[email protected] yum.repos.d]# ipvsadm -A -t 192.168.1.109:80 -s rr[[email protected] yum.repos.d]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.1.109:80 rr

-E:修改,edit

    

-t:tcp 

-u:udp

-f:firewall mark

    (2)service-address:

  -t, tcp, vip:port 

  -u, udp, vip:port

  -f, fwm, mark,即防火墙标记;

    (3)-s scheduler:指明其调度方法,默认为wlc;

    (4)ipvsadm -D -t|u|f service-address

          -D:删除

管理集群上的RS

    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-a:增加

[[email protected] yum.repos.d]# ipvsadm -a -t 192.168.1.109:80 -r 192.168.1.111 -m -w 1[[email protected] yum.repos.d]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.1.109:80 rr  -> 192.168.1.111:80             Masq    1      0          0

-e:更改

    -e只能修改其属性信息,类似于重新编写要改动的信息,但是地址信息是无法修改的,

    但是对于rs的地址是不能进行修改的,因此需要先删除后添加;

-r server-address

RS的地址;

rip[:port]

-g, gateway, dr,相当于网关,默认

-i, ipip,tunnel 隧道模型 

-m, masquerade, nat,地址伪装;

-w weight

查看:

ipvsadm -L|l [options]

-n, --numeric:以数字格式显示IP和PORT,默认的是反解端口和主机名到服务端;

ipvsadm -Ln    #注意其与iptables不同;参数的顺序不能写错;

--exact:精确值(不做单位换算);

-c, --connection:显示当前IPVS连接;

--stats:统计数据;

[[email protected] ~]# ipvsadm -Ln --rateIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS  -> RemoteAddress:PortTCP  192.168.1.109:80                    0        0        0        0        0  -> 192.168.1.111:80                    0        0        0        0        0

    CPS:每秒连接数;InPPS:input pockets per,每秒的入栈报文数;OutPPS:每秒出栈报文数;InBPS:每秒入栈bytes,OutBPS:每秒出栈bytes;

--rate:速率;

清空:

-C:清空;

保存和重载

    保存:

        ipvsadm -S > /PATH/TO/SOME_RULE_FILE

        ipvsadm-save > /PATH/TO/SOME_RULE_FILE

    重载:

        ipvsadm -R <  /PATH/TO/SOME_RULE_FILE

        ipvsadm-restore < /PATH/TO/SOME_RULE_FILE

清空计数器

    ipvsadm -Z [-t|u|f service-address]

对于不同版本的系统,载入规则也是不同的:

    centos6:查看其配置文件;

    centos7:查看其unit file-->ipvsadm-service

[[email protected] ~]# cat /usr/lib/systemd/system/ipvsadm.service[Unit]Description=Initialise the Linux Virtual ServerAfter=syslog.target network.target [Service]Type=oneshotExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"    #开启ipvsadm时在该文件中读取ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"    #执行stop时,先保存在该文件中,然后清空ExecStop=/sbin/ipvsadm -CRemainAfterExit=yes [Install]WantedBy=multi-user.target

实现开机自动加载ipvs规则

(1)首先可以把ipvs规则手动更新到/etc/sysconfig/ipvasdm

(2)关闭服务,

(3)chkconfig enabled ipvsadm

设计要点:

(1) DIP与RIP要在同一IP网络,RIP的网关要指向DIP;最好实现director两块网卡在物理上是隔离的

(2) 支持端口映射;

(3) 是否用到共享存储取决业务需求;

实验环境准备

  • 创建一个director,两块网卡,一个桥接,一个因主机模式;

  • 创建两个真实服务器,rs1&rs2;

lvs-nat模型实现:

(1)实验环境准备:

序号简称ip
1cip
2vip172.18.100.6/24
3dip192.168.10.254/24
4rs1192.168.10.11/24
5rs2192.168.10.12/24
6外主机192.168.10.22/24

(2)iptables -F清除iptables规则;

(3)确保网关间核心转发功能永久有效,编辑/etc/sysctl.conf

[[email protected] ~]# vim /etc/sysctl.conf [[email protected] ~]# cat /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[[email protected] ~]# sysctl -pnet.ipv4.ip_forward = 1[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward1

(4)在rs1中开启web(http)服务,提供一个资源页面(/var/www/html/index.html);启动服务,并且验证(养成习惯)

(5)在真正的演示负载均衡中,rs1和rs2上面的资源应该是相同的,但是为了演示方便,在rs2上执行与(4)一样的步骤,但是提供的i资源页面不一样;

(6)在director上访问rs1,rs2测试是否能正常的访问;

[[email protected] ~]# curl http://192.168.10.11[[email protected] ~]# curl http://192.168.10.12

(7)为ipvs添加规则

ipvsadm -A -t 172.18.100.6:80 -s rripvsadm -a -t 172.18.100.6:80 -r 192.168.10.11:80 -m -w 1ipvsadm -a -t 172.18.100.6:80 -r 192.168.10.12:80 -m -w 2

(8)使用外主机验证lvs-net模型;不断请求director

curl http://172.18.100.6

(9)在director上查看活动连接与非活动连接数量(在rr中权重是什么作用)

[[email protected] ~]ipvsadm -Ln

修改规则属性,使用wrr(权重大的承载的连接数就越多)

ipvsadm -A -t 172.18.100.6:80 -s wrr

查看ipvs规则表

[[email protected] ~]ipvsadm -Ln

负载均衡集群设计时的要点

    (1) session保持

        session sticky (ip hash)

        session cluster

        session server

    (2) 数据共享

        共享存储:

            NAS:Network Attached Storage,文件服务器,访问接口是文件级别(NFS,samba)

                自建的samba性能很差,往往带宽成为关键,可是对于没有优化来说,性能依旧是提不上来,一般建议找一写专业的供应商;

            SAN:Storage Area Network,  访问接口是块级别;SCSI协议借助于其它网络技术(FC,以太网);

            DS:Distributed Storage(分布式存储),访问接口通常是文件级别,接口可是文件系统,也可以API;ceph:内核级分布式存储,已经收进系统内核,但是非常的复杂;

            是否使用共享存储,就是要看服务器是否支持写操作;

        数据同步:

            rsync+inotify

                rsync:远程同步能够将两个主机上的两个文件系统彼此之间做同步;有主从,单向的

            rsync详细使用见日记

    数据格式:

结构化数据:存储于SQL数据库中;

半结构化数据:xml, json,  存储于文件系统或NoSQL;

非结构化数据:文件系统,DS;


注意:(1)dip和rs1与rs2在同一网段中;其中dip是rs1和rs2的网关;

           (2)一个主机上建议不要有太多的网关;



本文出自 “Touch Dream” 博客,谢绝转载!

以上是关于lvs-nat实现的主要内容,如果未能解决你的问题,请参考以下文章

3-1 LVS-NAT集群

Cluster基础:ipvsadm命令用法部署LVS-NAT集群部署LVS-DR集群

集群及LVS简介LVS-NAT集群 LVS-DR集群

LVS-NAT LVS-DR

LVS-NAT模型

LVS集群类型之lvs-nat