LVS集群讲解

目录

  • LVS介绍

  • LVS集群类型

  • LVS调度算法

  • ipvsadm/ipvs

  • LVS-NAT模型演练

  • LVS-DR模型演练

  • LVS定义多集群

  • FWM实现多集群统一调度

  • LVS持久连接 

    • 每端口持久

    • 每FWM持久

    • 每客户端持久

LVS介绍

一般来说,LVS采用三层结构:负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发的,由于其转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选,可想而知,这就需要在内核的模块来完成,而这样的过滤转发规则又是由管理员进行定义的,所以,LVS就是两段式的架构设计,在内核空间中工作的是”ipvs“,而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm“。这就很容易想到iptables而LVS正好工作在iptables的input链上。

LVS的组成

ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。 
注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能。

LVS集群类型中的术语

VIP:Director用来向客户端提供服务的IP地址,也是DNS解析的IP 
RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址 
DIP:Director用来和RIP进行交互的IP地址 
CIP:公网IP,客户端使用的IP

lvs集群的类型

lvs-nat:网络地址转换 NetworkAddress Translation,修改请求报文的目标IP 
lvs-dr:直接路由 Direct Routing,操纵封装新的MAC地址; 
lvs-tun:IP隧道 IP Tunneling,在原请求IP报文之外新加一个IP首部; 
lvs-fullnat:修改请求报文的源和目标IP;

lvs-nat

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发; 
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP; 
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈; 
(3)支持端口映射,可修改请求报文的目标PORT; 
(4)vs必须是Linux系统,rs可以是任意系统;

Q0I4_F]{T_S0B[Y`_RE8SBI.png

lvs-dr

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变; 
Director和各RS都得配置使用VIP; 
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director: 
    (a) 在前端网关做静态绑定; 
    (b) 在RS上使用arptables; 
    (c) 在RS上修改内核参数以限制arp通告及应答级别; 
        arp_announce 
        arp_ignore 
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director; 
(3) RS跟Director要在同一个物理网络; 
(4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client; 
(5) 不支持端口映射;

}VX8O%@S~[EZZWYT(MY7$U1.png

lvs-tun

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS; 
(1) DIP, VIP, RIP都应该是公网地址; 
(2) RS的网关不能,也不可能指向DIP; 
(3) 请求报文要经由Director,但响应不能经由Director; 
(4) 不支持端口映射; 
(5) RS的OS得支持隧道功能;

lvs-fullnat

通过同时修改请求报文的源IP地址和目标IP地址进行转发; 
    CIP –> DIP 
    VIP –> RIP 


(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP; 
(2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client; 
(3) 请求和响应报文都经由Director; 
(4) 支持端口映射;

注意:此类型默认不支持;

lvs调度算法

静态方法:仅根据算法本身进行调度;

(1) RR:roundrobin,轮询; 
    轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。 

 
(2) WRR:Weighted RR,加权轮询; 
    由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。 

 
(3) SH:Source Hashing; 
    实现session sticy,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定; 
简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。 

 
(4) DH:Destination Hashing; 
    目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS; 
将同样的请求发送给同一个server,一般用户于缓存服务器说,简单的说,LB集群后面又加了一层,在LB与real server之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

动态方法:主要根据每RS当前的负载状态及调度算法进行调度;

(1) LC:leash-connection 最少连接 
    最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。 
简单算法:active*256+inactive (谁的小,挑谁)

(2) WLC:加权最少连接 
    加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。

简单算法:(active*256+inactive)/weight(谁的小,挑谁)

(3) SED:Shortest Expection Delay,最少期望延迟 
    不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。

基于wlc算法,简单算法:(active+1)*256/weight (谁的小选谁)

(4) nq:never queue 永不排队 
    在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。

(5) LBLC:Locality-Based LC,基于局部性的最少连接 
    基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

(6) LBLCR:LBLC with Replication,基于局部性的带复制功能的最少连接 
    基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

ipvsadm/ipvs

(1)管理集群服务

ipvsadm -A|E|D -t|u|f service-address [-s scheduler] [-p [timeout]] 
    -A添加 –E 修改 –D删除 

 
    service-address: 
        -t:tcp协议的集群 service-address后面必须写成ip:port 
        -u:udp协议的集群 service-address后面必须写成ip:port 
        -f:fwm防火墙的标记 service-address后面必须写成marknumber 

 
    -s:指定调试算法

    -p:保持时长

(2)管理集群中的RS

ipvsadm -a|e|d -t|u|f service-address -r server-address [-g|i|m] [-w weight] 
    -a添加 -e修改 –d删除 

 
    service-address:实现定义好的某集群服务 
        -t|u|f: 
            -t: TCP协议的端口,VIP:TCP_PORT 
            -u: TCP协议的端口,VIP:UDP_PORT 
            -f:firewall MARK,是一个数字; 

 
    server-address:某rs的地址在nat模型中可使用ip:port实现端口映射 
        rip[:port] 

 
    [-g|i|m] 
        -g: gateway, dr类型 
        -i: ipip, tun类型 
        -m: masquerade, nat类型 

 
    -w weight:权重;

(3)查看

ipvsadm -L | ipvsadm -l …. 
    -n 显示主机地址和端口为数字格式 
    -c 显示多少个客户连接进来 
    –stats 显示进出站数据 
    –rate 显示速率 
    –timeout 显示每一个tcp tcpfin udp 的超时时间值 
    –deamon 显示进程信息 
    –sort 显示排序规则默认是升序的

(4)管理规则

清空所有ipvs规则 
    ipvsadm -C 

 
保存定义的规则:建议保存至/etc/sysconfig/ipvsadm
    ipvsadm -S = ipvsadm-save 
    ipvsadm -S > /PATH/TO/SOMEFILE 

    systemctl stop ipvsadm.service #CentOS 7

    service ipvsadm stop  #CentOS 6

 
载入当前规则 
    ipvsadm -R = ipvsadm-restore 
    ipvsadm -R < /PATH/TO/SOMEFILE

    systemctl restart ipvsadm.service #CentOS 7

    service ipvsadm restart  #CentOS 6

LVS-NAT模式演练

拓扑如下:

C75FV799A2F2Q)265A9UDHX.png

在两台RS上配置web服务

FO}%44XV1O637WU407WFZ]P.png(B}G2{_X@)P}_S(UTU%9V`W.png

lvs主机上的操作

安装ipvsadm
[root@lvs ~]# yum -y install ipvsadm  #安装ipvsadm命令,如果已安装可省略此步骤
开启内核转发
[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  #开启转发功能
[root@lvs ~]# cat /proc/sys/net/ipv4/ip_forward   #验证是否开启
1
配置lvs-nat模型
[root@lvs ~]# ipvsadm -A -t 100.100.100.1:80 -s rr
[root@lvs ~]# ipvsadm -a -t 100.100.100.1:80 -r 10.1.68.1 -m -w 1
[root@lvs ~]# ipvsadm -a -t 100.100.100.1:80 -r 10.1.68.2 -m -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  100.100.100.1:80 rr
 -> 10.1.68.1:80                 Masq    1      0          0        
 -> 10.1.68.2:80                 Masq    2      0          0        
[root@lvs ~]#
保存lvs规则
[root@lvs ~]# ipvsadm-save 
-A -t 100.100.100.1:http -s rr
-a -t 100.100.100.1:http -r 10.1.68.1:http -m -w 1
-a -t 100.100.100.1:http -r 10.1.68.2:http -m -w 2

验证

通过VIP访问

ATH[W{5G(9NP}PK`5RY~P]W.png

再次刷新可调度至RS2

JANR6~[Q)5P$O(LAM48JU37.png

LVS-DR模型演练

拓扑如下:

@U9GU4$Z{T_`CVHUK1X_KO9.png

在两台RS上配置web服务

FO}%44XV1O637WU407WFZ]P.png(B}G2{_X@)P}_S(UTU%9V`W.png

关闭arp响应

RS1
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
RS2
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

说明

dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种: 
    (1) 在前端网关做静态绑定; 
    (2) 在各RS使用arptables; 
    (3) 在各RS修改内核参数,来限制arp响应和通告的级别; 
        限制响应级别:arp_ignore 
            0:默认值,表示可使用本地任意接口上配置的任意地址进行响应; 
            1: 仅在请求的目标IP配置在本地主机的接收到请求报文接口上时,才给予响应; 
        限制通告级别:arp_announce 
            0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告; 
            1:尽量避免向非直接连接网络进行通告; 
            2:必须避免向非本网络通告;

配置VIP

RS1配置
[root@RS1 ~]# ifconfig lo:0 10.1.100.100 broadcast 10.1.100.100 netmask 255.255.255.255 up
[root@RS1 ~]# route add -host 10.1.100.100 lo:0
RS2配置
[root@RS2 ~]# ifconfig lo:0 10.1.100.100 broadcast 10.1.100.100 netmask 255.255.255.255 up
[root@RS2 ~]# route add -host 10.1.100.100 lo:0
LVS主机上的配置
[root@lvs ~]# iptables -F   #清空防火墙规则
[root@lvs ~]# ipvsadm -A -t 10.1.100.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:80 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:80 -r 10.1.68.2 -g -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.100.100:80 rr
 -> 10.1.68.1:80                 Route   1      0          0        
 -> 10.1.68.2:80                 Route   2      0          0        
[root@lvs ~]#
保存规则
[root@lvs ~]# ipvsadm-save 
-A -t 10.1.100.100:http -s rr
-a -t 10.1.100.100:http -r 10.1.68.1:http -g -w 1
-a -t 10.1.100.100:http -r 10.1.68.2:http -g -w 2
[root@lvs ~]#

测试

通过VIP访问

WT~EV]B7I}B~8~VQA]S3H}U.png

再次刷新可调度至RS2主机上

ZG}`WU5B@)0C}C7Q1DA1HOC.png

LVS定义多集群

我们在原有的DR模型基础上再来配置一个mysql集群

配置mysql

RS1配置
[root@RS1 ~]# mysql -uroot -pmageedu
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+

| Database           |
+--------------------+

| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'10.1.%.%' IDENTIFIED BY 'testpass';    #授权一个用户 用于测试
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;   #刷新授权
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE rs1;    #在RS1上创建一个数据库,用于测试
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+

| Database           |
+--------------------+

| information_schema |
| mysql              |
| rs1                |
+--------------------+
3 rows in set (0.00 sec)

mysql>
RS2配置
[root@RS2 ~]# mysql -uroot -pmageedu
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+

| Database           |
+--------------------+

| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'10.1.%.%' IDENTIFIED BY 'testpass';    #授权一个用户,用于测试
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;    #刷新授权
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE rs2;      #在RS2上创建一个数据库,用于测试使用
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+

| Database           |
+--------------------+

| information_schema |
| mysql              |
| rs2                |
+--------------------+
3 rows in set (0.00 sec)

mysql>

LVS主机上的配置

[root@lvs ~]# ipvsadm -A -t 10.1.100.100:3306 -s rr
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:3306 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:3306 -r 10.1.68.2 -g -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.100.100:80 rr
 -> 10.1.68.1:80                 Route   1      0          0        
 -> 10.1.68.2:80                 Route   2      0          0        
TCP  10.1.100.100:3306 rr
 -> 10.1.68.1:3306               Route   1      0          0        
 -> 10.1.68.2:3306               Route   2      0          0        
[root@lvs ~]#

测试

此时我们已经定义了http与mysql两个集群,接下来做访问测试

81LHBU_)EY[2LZA5QW2V_N5.png

FWM实现多集群统一调度

借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;

lvs主机配置

在此之前我们已经配置好的RS1和RS2上的http和mysql服务 

[root@lvs ~]# ipvsadm -C
[root@lvs ~]# iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,3306 -j MARK --set-mark 11
[root@lvs ~]# iptables -t mangle -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 551 packets, 44107 bytes)
pkts bytes target     prot opt in     out     source               destination        
  0  5916 MARK      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,3306 MARK set 0xb
[root@lvs ~]# ipvsadm -A -f 11 -s rr
[root@lvs ~]# ipvsadm -a -f 11 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -f 11 -r 10.1.68.2 -g -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
FWM 11 rr
 -> 10.1.68.1:0                  Route  1      0          0        
 -> 10.1.68.2:0                  Route  2      0          0        
[root@lvs ~]#

测试

ZA@)_~)%]3M]Z_2OQP16J$G.png

lvs持久连接

持久连接模板:实现无论使用任何算法,在一段时间内,实现将来自同一个地址的请求始终发往同一个RS;

port Affinity

每端口持久:每集群服务单独定义,并定义其持久性; 
每防火墙标记持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity; 
每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,而且可使用持久连接进行绑定;

每端口持久配置

lvs主机配置

配置http集群服务
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 10.1.100.100:80 -s rr -p 60
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:80 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:80 -r 10.1.68.2 -g -w 2

配置mysql集群服务
[root@lvs ~]# ipvsadm -A -t 10.1.100.100:3306 -s rr -p 60
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:3306 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:3306 -r 10.1.68.2 -g -w 2

[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.100.100:80 rr persistent 60
 -> 10.1.68.1:80                 Route   1      0          0        
 -> 10.1.68.2:80                 Route   2      0          0        
TCP  10.1.100.100:3306 rr persistent 60
 -> 10.1.68.1:3306               Route   1      0          0        
 -> 10.1.68.2:3306               Route   2      0          0        
[root@lvs ~]#

测试

R_DAH1XV3ME`K7Q8RV5615R.png

每FWM持久配置

lvs主机配置

[root@lvs ~]# ipvsadm -C
[root@lvs ~]# iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,3306 -j MARK --set-mark 11
[root@lvs ~]# iptables -t mangle -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 49 packets, 4200 bytes)
pkts bytes target     prot opt in     out     source               destination        
   0     0 MARK      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,3306 MARK set 0xb
[root@lvs ~]# ipvsadm -A -f 11 -s rr -p 60
[root@lvs ~]# ipvsadm -a -f 11 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -f 11 -r 10.1.68.2 -g -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
FWM 11 rr persistent 60
 -> 10.1.68.1:0                  Route  1      0          0        
 -> 10.1.68.2:0                  Route  2      0          0        
[root@lvs ~]#

测试

}G06AV4MTUVGAIHOL2YJJB3.png

每客户端持久

lvs主机配置

[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 10.1.100.100:0 -s rr -p 60
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:0 -r 10.1.68.1 -g -w 1
[root@lvs ~]# ipvsadm -a -t 10.1.100.100:0 -r 10.1.68.2 -g -w 2
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.100.100:0 rr persistent 60
 -> 10.1.68.1:0                  Route   1      0          0        
 -> 10.1.68.2:0                  Route   2      0          0        
[root@lvs ~]#

测试

B$)9~B7]{C`UJEKD`H$]LZP.png

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

(0)
zhai796898zhai796898
上一篇 2016-11-07
下一篇 2016-11-07

相关推荐

  • Kernel——linux的核心

    Linux Kernel: CentOS 启动流程:POST –> BootLoader(BIOS,MBR) –>Kernel(initrd) –> rootfs –> switch_root –> /sbin/init     …

    Linux干货 2016-09-11
  • 实时获取MySQL的TPS、QPS(输出到屏幕)

    这个脚本挺好用的,例如我们在主库执行了一个大事务,结果导致从库的show slave status\G 一直卡在 system lock状态,我们用下面这个脚本就能知道到底是hang住了,还是只是执行缓慢(反应在脚本执行结果里面就是qps\tps是不停变动的)。 当然,从库一直处于system lock 状态,一般是因为我们从库也设置双1导致,只要…

    Linux干货 2017-05-07
  • read,locate ,find 的总结及相关联系

    read 变量名 read 变量名1 [变量名2] < 文件名不支持管道read 变量名1 [变量名2] <<< “值1 [值2] …”使用read来把输入值分配给一个或者多个shell变量     -p 指定要显示的提示     # read -p…

    Linux干货 2017-08-12
  • day5总结笔记

    本文内容: 索引节点 硬链接与软链接 重定向 用户组 useradd命令 索引节点: 索引节点包含了一个表,包含了有关文件的元数据,包含:     文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数)      该文件的大小和不同的时间戳。&n…

    系统运维 2016-08-08
  • 命令行历史和调用命令参数

    history显示当前终端的历史记录 !! 重复执行上一条命令 !-n 重复执行倒数第n条命令 !n 重复执行第n条命令 ctrl+p 等于向上方向键,翻出上一条命令。 ctrl+n 等于向下方向键,翻出下一条命令。 ctrl+j 等于enter 执行当前命令 !:0 执行前一条命令(去除参数) !string 重复前一个以“string”开头的命令(只限于…

    2017-07-14
  • Keepalive+Nginx高可用配置(主从)

    Keepalived高可用集群 一、Keepalived介绍 Keepalived软件主要通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。keepalived除…

    Linux干货 2016-12-30