虚拟机CentOS搭建LVS-DR负载均衡
编辑:狂族晨曦 来源:系统运维,经验杂笔 日期:2016-07-30 阅读: 4,308 次 10 条评论 » 百度已收录
先森工作三个星期了,从最初的基础命令学习,到基础环境搭建,再到现在的高可用负载均衡集群搭建,都通通过了一遍,下周也要开始接触现网服务器了。在这三周,做的东西都越来越难,越来越麻烦,LVS就是其中之一。
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。章文嵩博士曾是阿里巴巴副总裁、技术总监等,现任滴滴出行副总裁。LVS有三种负载均衡模式,分别是LVS-DR、LVS-TUN、LVS-NAT。让先森郁闷的是,先森用虚拟机除了LVS-DR模式,LVS-TUN和LVS-NAT先森都没有搭建成功。
LVS体系结构
首先需要普及一下LVS的体系结构。
LVS体系结构图
使用LVS架设的服务器集群系统有三个部分组成:
最前端的负载均衡层,用Load Balancer表示。Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
中间的服务器群组层,用Server Array表示。Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
最底端的数据共享存储层,用Shared Storage表示。Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS三种模式区别:
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1 //-a增加一个real server -m NAT模式 -g dr模式 -t tun模式 -w权重
NAT模式:realserver不需要公网ip,director负责接受请求和返回请求。
DR模式/TUN模式:每个realserver都需要有公网ip,返回请求不需要经过director,director只负责分发接受的请求。
DR模式和TUN模式区别:TUN模式realserver和dr通信使用隧道(修改了ip包头),DR模式不使用隧道(修改MAC地址)。
LVS-DR模式搭建
搭建成功后,其实你会发现LVS-DR是非常简单的。
每个realserver都需要有公网ip,返回请求不需要经过director,director只负责分发接受的请求。
搭建环境
先森是用虚拟机搭建的,准备了三个安装了CentOS的虚拟机。
系统版本:CentOS 6.8
外部IP地址 | 内部IP地址 | 角色 |
192.168.2.27/24 | 10.10.10.99/24 | LVS调度器(虚拟机) |
192.168.2.66/24 |
10.10.10.100/24 | RS1(虚拟机) |
192.168.2.44/24 | 10.10.10.101/24 | RS2(虚拟机) |
192.168.2.233/24 | 无 | 客户机(自己电脑) |
本次搭建的拓扑图如下,图中的192.168.2.51实为192.168.2.27:
LVS-DR拓扑图
调度器服务器要安装ipvsadm,两台真实服务器要运行Apache或者Nginx等web服务器。
Director上需要安装ipvsadm:
yum install -y ipvsadm
两个real server 上都安装apache:
yum install -y httpd
DR 负载均衡器配置
ipvsadm有自己的命令,但是一般都是用shell脚本把需要做的设置写出来,然后运行shell来完成设置。
首先进入一个存放shell脚本的目录,这个目录自行选择。先森选择将shell脚本放置/usr/local/bin目录下。
cd /usr/local/bin
用vim直接打开一个不存在的shell文件,保存的时候会自动创建好。
vim lvs_dr.sh
打开后添加如下内容:
#!/bin/sh VIP=192.168.2.27 # 均衡器外网IP DIP=10.10.10.99 # 均衡器内网IP RIP1=10.10.10.100 # 真实服务器的内网IP RIP2=10.10.10.101 . /etc/rc.d/init.d/functions case "$1" in start) echo "start LVS of DirectorServer" #Set the Virtual IP Address /sbin/ifconfig eth0:1 $DIP netmask 255.255.255.0 up # 给均衡器添加一个内容IP /sbin/route add -host $DIP dev eth0:1 # 给内网IP添加路由 #Clear IPVS Table /sbin/ipvsadm -C # 手工清空原来表内容 #Set Lvs /sbin/ipvsadm -A -t $VIP:80 -s rr # -A添加地址,-t指定VIP TCP端口,-s指定调度算法:rr轮询算法 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g # -a指定真实服务器, -t lvs上VIP,-r真实服务器ip及端口,-g先择DR模式(-m为NAT模式) /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run Lvs /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" /sbin/ipvsadm -C /sbin/ifconfig eth0:1 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
保存并退出:
:wq
给lvs_dr.sh添加可执行权限:
chmod +x lvs_dr.sh
RS 真实服务器配置
两台real server也需要添加一个shell脚本,脚本的内容大致相同。
还是进入一个保存脚本的目录:
cd /usr/local/bin
编辑本不存在的shell脚本:
vim lvs_dr_rs.sh
在脚本内加入如下内容:
#!/bin/bash VIP=192.168.2.27 # 均衡器的VIP地址 RIP=10.10.10.100 # 要给本地服务器设置的内网地址 LOCAL_Name=50bang BROADCAST=192.168.2.255 #vip's broadcast . /etc/rc.d/init.d/functions case "$1" in start) echo "reparing for Real Server" 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 ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up #为什么要绑定VIP呢?因为DR模式原理是LVS调度器修改mac地址为真实服务器地址,报文的目的IP还是VIP没修改,,网卡只会把目的MAC和目的IP都是自己的报文上送CPU,所以真实服务器上必须>配置VIP! #为什么使用lo口呢?因为lo口为本地环回口,防止本地局域网IP地址冲突! ifconfig eth0:1 $RIP netmask 255.255.255.0 up # 为本地服务器设置一个内网IP /sbin/route add -host $VIP dev lo:0 ;; stop) ifconfig lo:0 down ifconfig eth0:1 down echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "close LVS Real Server" ;; *) echo "Usage: lvs {start|stop}" exit 1 esac
退出保存:
:wq
依旧添加可执行权限:
chmod +x lvs_dr_rs.sh
运行脚本
DR 负载均衡器:
./lvs_dr.sh start
DR运行脚本
RS 真实服务器:
./lvs_dr_rs.sh start
RS运行脚本
检查网卡:
ifconfig
DR均衡器的网卡信息
RS服务器的网卡信息
查看ipvs设置
ipvsadm -ln
测试
运行RS服务器上的Apache或Nginx、Tomcat等任何web服务器,记得开启防火墙iptables的端口。
为了方便测试,可以把Apache的默认页面内容改为“web1”和“web2”:
echo "web1" >/var/www/html/index.html
然后在电脑上浏览器访问设置的VIP地址,即192.168.2.27,不停刷新查看效果。如果配置成功则会看到页面在“web1”和“web2”上轮流切换。
第一次打开
刷新一次
如此,就是先LVS-DR的负载均衡。
实际上,LVS-DR还经常和Keepalived搭配起来实现高可用+负载均衡。这个先森也实现了,真的是非常简单呢,后面会继续分享。
历史上的今天:
转载请注明出处来自https://www.capjsj.cn/lvs_dr.html
博主分享的精准到位,本人受益匪浅,非常感谢!欢迎朋友回访交流!
恭喜先森正式工作,工作之余还写工作笔记。真是好工人。
好教程!等用到了在来偷走!
可惜了,我又看不懂!
确实不错的性能
你这可以啊、非常佩服研究项目的人、;大牛
围观一下,手短
过来支持一下~
在哪里上班啊。。。