LVS的简介和配置

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

2:LVS-DR模式
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
Director和各RS都配置有VIP
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables-A IN -d $VIP -j DROP
arptables-A OUT -s $VIP -j mangle –mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
arp_announce
arp_ignore
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向 DIP,以确保响应报文不会经由Director
(3) RS和Director要在同一个物理网络
(4) 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
(5) 不支持端口映射(端口不能修败)
(6) RS可使用大多数OS系统

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

4

种lvs负载 均衡技术优缺点下表:

clipboard2

命令 :
ipvsadm命令
管理集群服务:增、改、删
增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删除:
ipvsadm-D -t|u|fservice-address
service-address:
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT
-u: UCP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-A –add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C –clear 清除内核虚拟服务器表中的所有记录。
-R –restore 恢复虚拟服务器规则
-S –save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a –add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list 显示内核虚拟服务器表
-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)
–set tcp tcpfin udp 设置连接超时值
–start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
VRRP 功能。
–stop-daemon 停止同步守护进程
-h –help 显示帮助信息
其他的选项:
-t –tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u –udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f –fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s –scheduler scheduler 使用的调度算法,有这样几个选项
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p –persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M –netmask netmask persistent granularity mask
-r –real-server server-address 真实的服务器[Real-Server:port]
-g –gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i –ipip 指定LVS 的工作模式为隧道模式
-m –masquerading 指定LVS 的工作模式为NAT 模式
-w –weight weight 真实服务器的权值
–mcast-interface interface 指定组播的同步接口
-c –connection 显示LVS 目前的连接 如:ipvsadm -L -c
–timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout
–daemon 显示同步守护进程状态
–stats 显示统计信息
–rate 显示速率信息
–sort 对虚拟服务器和真实服务器排序输出
–numeric -n 输出IP 地址和端口的数字形式

5、配置ipvsadm服务
      备注:以下步骤分别按照LVS的三种包转发方式进行配置
     实验环境如下:
     lvsserver            192.168.1.49(eht0)     vip: 192.168.1.40 8.8.8.8(nat模式下)
     serverA             192.168.1.46(eth0)
     serverB             192.168.1.47(eth0)
      
1、vs/nat模式下各服务器的配置
lvsserver配置如下:
ifconfig eht0 192.168.1.49 netmsk 255.255.255.0 
ifconfig eht1 8.8.8.8 netmask 255.255.255.0
(注:由于nat模式需要两块真实网卡,所以又额外加了一块网卡  ,此网卡的IP地址同时也是VIP的地址)
vi ipvsadm.sh (创建脚本文件)
————————————————————————————————————————————————————-
#!/bin/bash
echo 1 > /porc/sys/net/ipv4/ip_forward   (开启路由功能)
ipvsadm -C      (清除之前的转换表)
ipvsadm -At 8.8.8.8:80 -s rr   (指定带有调度算法转换的服务器)
ipvsadm -at 8.8.8.8:80 -r 192.168.1.46:80 -m  (增加一台真实服务器,-m是nat模式,-g是直接路由(dr )模式,-i是tun模式)
ipvaadm -at 8.8.8.8:80 -r 192.168.1.47:80 -m

#chmod u+x ipvsadm.sh  (增加可执行权限)

——————————————————————————————————————————————————————
serverA配置如下:
ifconfig eth0 192.168.1.46 netmask 255.255.255.0
route add default gw 192.168.1.49
(注:此网关是lvsserver的eth0的IP地址)
service httpd start    (开启测试用的web服务)
echo ‘192.168.1.46’ > /var/www/html/index.html     (制作测试用的html网页)
——————————————————————————————————————————————————————-
serverB配置如下:
ifconfig eth0 192.168.1.47 netmask 255.255.255.0
route add default gw 192.168.1.49
(注:此网关是lvsserver的eth0的IP地址)
service httpd start    (开启测试用的web服务器
echo ‘192.168.1.47’ > /var/www/html/index.html     (制作测试用的html网页)

——————————————————————————————————————————————————————–
2、vs/tun模式下各服务器的配置 
lvsserver配置如下:
ifconfig eht0 192.168.1.49 netmsk 255.255.255.0
(注:tun 模式下只需要一块物理网卡,可将eth1网卡禁用)
ifconfig tunl0 192.168.1.40 netmask 255.255.255.255 up
(注:tunlo接口配置的地址为vip地址)     
route add -host 192.168.1.40 dev tunlo    
vi ipvsadm.sh (创建脚本文件)
——————————————————————————————————————————————————————-         
#!/bin/bash
ipvsadm -C      (清除之前的转换表)
ipvsadm -At 192.168.1.40:80 -s rr   (指定带有调度算法转换的服务器)
ipvsadm -at 192.168.1.40:80 -r 192.168.1.46:80 -i  (增加一台真实服务器,-m是nat模式,-g是直接路由(dr )模式,-i是tun模式)
ipvaadm -at 192.168.1.40:80 -r 192.168.1.47:80 -i

#chmod u+x ipvsadm.sh  (增加可执行权限)    
#./ipvsadm.sh
———————————————————————————————————————————————————————–                  
serverA配置如下:
ifconfig eth0 192.168.1.46 netmask 255.255.255.0
ifconfig tunl0 192.168.1.40 netmask 255.255.255.255 up  
route add -host 192.168.1.40 dev tunlo     
vi arp.sh (创建脚本文件)   

#!/bin/bash
echo “1” > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce
———————————————————————————————————————————————————————–
serverB配置同severA一样
———————————————————————————————————————————————————————–
3、vs/dr模式下各服务器的配置 
lvsserver配置如下:
ifconfig eth0 192.168.1.49 netmsk 255.255.255.0
(注:dr 模式下只需要一块物理网卡,可将eth1网卡禁用)
ifconfig eth0:0 192.168.1.40 netmask 255.255.255.255 up
(注:eth0:0接口配置的地址为vip地址)     
route add -host 192.168.1.40 dev eth0:0
vi ipvsadm.sh (创建脚本文件)
———————————————————————————————————————————————————————-
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward   (开启路由功能)
ipvsadm -C      (清除之前的转换表)
ipvsadm -At 192.168.1.40:80 -s rr   (指定带有调度算法转换的服务器)
ipvsadm -at 192.168.1.40:80 -r 192.168.1.46:80 -g (增加一台真实服务器,-m是nat模式,-g是直接路由(dr )模式,-i是tun模式)
ipvaadm -at 192.168.1.40:80 -r 192.168.1.47:80 -g

#chmod u+x ipvsadm.sh  (增加可执行权限) 
./ipvsadm.sh
———————————————————————————————————————————————————————–  
serverA配置如下:
 ifconfig eth0 192.168.1.46 netmask 255.255.255.0
ifconfig lo:0 192.168.1.40 netmask 255.255.255.255 up  (在lo接口上增加vip地址)
 route add -host 192.168.1.40 dev lo:0 (增加到环回接口的路由)
 vi arp.sh (创建脚本文件)   

#!/bin/bash
echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce     
#chmod u+x arp.sh  (增加可执行权限) 
#./arp.sh 
———————————————————————————————————————————————————————–    
serverB配置和serverA一样
———————————————————————————————————————————————————————–
  测试:1、显示LVS 目前的连接 
             如:ipvsadm -L -c    ipvsadm -L –stats

2、将46和47的WEB服务启用。直接输入vip的地址不停的刷新你将会看到不同页面的切换

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88031

(1)
oranixoranix
上一篇 2017-10-23
下一篇 2017-10-23

相关推荐

  • mysql-proxy 读写分离

    1. 简介     mysql-proxy 是官方为此的一个测试,项目, 可以完成读写分离。但是项目目前还不是很成熟,这里仅作测试。  2. mysql-proxy安装部署 # wget http://downloads.mysql.com/archives/get/file/mysql-…

    Linux干货 2015-12-21
  • 日志分析工具Awstats实战之Apache篇-多站点日志分析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1318052 前面两篇都在讲述如何去部署nginx下的awstats日志分析工具,现在终于轮到apache。作为老牌的网页服务器,awstats对apache…

    Linux干货 2016-08-15
  • linux用户与用户组

    一.用户 用户是能够获取系统资源的权限的集合. 二.linux用户组的分类: a.管理员root  :具有使用系统所有权限的用户,其UID为0. b.Centos 6普通用户:即一般用户,其使用系统的权限受限,其UID为500-60000之间Centos7UID为1000-60000之间。 c.Centos 6系统用户:保障系统运行的用户,一般不提…

    Linux干货 2016-10-24
  • 面授20-1班 0805课间练习与课后作业

    课间练习 第一阶段 新学的命令文本命令cat tac rev more less head tail cut paste wc sort dif patch 1 、找出ifconfig 命令结果中本机的所有IPv4 地址 [root@IP70-CentOS7 ~]# >>ifconfig | tr&nbsp…

    Linux干货 2016-08-07
  • 系统管理之网络管理

    今天给大家分享一些网络方面的知识,,这块的知识很重要哦,都是涉及网络最底层的链路和协议,是我们学习大型服务的基础,和前提.希望大家努力理解这方面的内容,今天的内容大概有这几方面: 1.计算机网络概念 2.计算机网络体系结构 3.物理层 4.数据链路层 5.网络层 6.IP地址及子网 7.传输层 8.应用层 计算机网络概念 计算机网络是个发展中的概念和技术,具…

    Linux干货 2016-09-05
  • 计算1000以内的总质数个数

    #include <stdio.h> int main() { int micro[500]; // 质数保存素组 int number = 0; // 质数个数 micro[number++] = 2; // micro[0]=2 micro[number++] = 3; // micro[1]=3, number=2 unsigned lon…

    Linux干货 2017-03-22