项目实战2—LVS负载均衡
负载均衡集群企业级应用实战-LVS
实现基于LVS负载均衡集群的电商网站架构
随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
实现基于LVS负载均衡集群的电商网站架构
前景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
实验前准备:
1、ipvsadm
yum install ipvsadm -y #在LVS-server安装lvs管理软件
程序包:ipvsadm(LVS管理工具)
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
2、grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 查看内核是否支持IPVS
3、iptables -F && setenforing 清空防火墙策略,关闭selinux
实战一:LVS的NAT模式实现负载均衡
实战架构图:
1、环境准备:
机器名称 |
IP配置 |
服务角色 |
备注 |
lvs-server |
VIP:172.17.1.6 DIP:192.168.30.106 |
负载均衡器 |
开启路由功能 (VIP桥接、DIP仅主机) |
rs01 |
RIP:192.168.30.107 |
后端服务器 |
网关指向DIP(仅主机) |
rs02 |
RIP:192.168.30.7 |
后端服务器 |
网关指向DIP(仅主机) |
注意:确保rs 在一个网段,且只有一个网段
2、在directory 负载均衡器上
yum -y install ipvsadm
① 开启一个基于80端口的虚拟服务vip,调度方式为wrr
ipvsadm -A -t 172.17.1.6:80 -s wrr
② 配置web服务后端real server 为nat工作方式 权重为1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1
③ 修改内核配置,开启路由转发
vim /etc/sysctl.conf 该一行
net.ipv4.ip_forward = 1
sysctl -p 读一些,使其生效
3、在两台real server 上设置
① 开启实现准备好的web网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
② 把网关指向directory
route add default gw 192.168.30.106
4、自己的windows 做客户端,通过vip 172.17.1.6访问web服务,调度成功
实战二:LVS的DR 模式实现负载均衡
实战架构图:
1、环境准备
机器名称 |
IP配置 |
服务角色 |
lvs-server |
VIP:172.17.100.100 |
负载均衡器 |
rs01 |
RIP:172.17.1.7 |
后端服务器 |
rs02 |
RIP:172.17.22.22 |
后端服务器 |
注意:lvs-server 和rs 要在一个网段,rs只有一个网段
2、在lvs-server 上设置
① 配置VIP到本地网卡别名,广播只自己响应
ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
route add -host 172.17.100.100 dev eth0:0 给网卡别名指向网关
② ipvsadm 策略配置
开启一个基于80端口的虚拟服务,调度方式为wrr
ipvsadm -A -t 172.17.100.100:80 -s wrr
配置web服务后端real server 为DR工作方式 权重为1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1
3、real server 上配置
① 配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
② 使RS "闭嘴"
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
③ 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p 读一下,使其生效
4、开启实现准备好的web网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
5、效果验证
① 可分别在rs1和rs2建立2个不同内容,统一路径的test.html测试文件,测试负载均衡功能
在RS01 上vim ../test.html
real server 1
在RS01 上vim ../test.html
real server 1
② 打开http://172.17.1.6/ ,并在director上用ipvsadm -L -n观察访问连接
③ 用另外一台测试机,用ab压力测试工具,测试经过负载均衡后的服务器容量
实战三:实现80、443端口都可访问服务,且LVS实现持久连接
1、环境准备
机器名称 |
IP配置 |
服务角色 |
lvs-server |
VIP:172.17.100.100 |
负载均衡器 |
rs01 |
RIP:172.17.1.7 |
后端服务器 |
rs02 |
RIP:172.17.22.22 |
后端服务器 |
2、在vs 上设置:
① 在iptables 打上标记,把80端口标记为99
iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp --dport 80 -j MARK --set-mark 99
在iptables打上标记,把443端口标记为99
iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp --dport 443 -j MARK --set-mark 99
② 在lvs上建立基于99号标记的虚拟服务
ipvsadm -A -f 99 -s rr -p
设置后端服务地址,用DR模式
ipvsadm -a -f 99 -r 172.17.1.7 -g
ipvsadm -a -f 99 -r 172.17.22.22 -g
解析:-p 就是持久连接
3、在rs 准备好了的web服务,开启80、443端口
关于ssl 443加密的代码,具体实现下实验四
4、测试,自己windows 做客户端,访问 http://172.17.1.6/
访问 http://172.17.1.6/
实验四:实现ssl 加密
(1)一个物理服务器设置一个https
1、创建存放证书的目录
mkdir /etc/nginx/ssl
2、自签名证书
cd /etc/pki/tls/certs/
make nginx.crt
openssl rsa -in nginx.key -out nginx2.key 因为刚私钥被加密了,为了后边方便,解密
3、把证书和私钥cp 到nginx存放证书目录
cp nginx.crt nginx2.key /etc/nginx/ssl/
cd /etc/nginx/ssl/
mv nginx2.key nginx.key 把名字改回来
4、修改配置文件,加一段server
server {
listen 443 ssl;
server_name www.along.com;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
}
5、测试,网页打开 https://192.168.30.7/
windows 信任证书
(2)因为nginx 强大,可以实现多个虚拟主机基于不同的FQDN 实现ssl加密,httpd不能实现
一个物理服务器设置多个https
1、生成3个证书和私钥
make nginx.crt
make nginx2.crt
make nginx3.crt
2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密
cp nginx{1,2,3}* /etc/nginx/ssl/
openssl rsa -in nginx.key -out nginx.key
openssl rsa -in nginx2.key -out nginx2.key
openssl rsa -in nginx3.key -out nginx3.key
3、创建各自对应的访问网页
mkdir /app/website{1,2,3}
echo website1 > /app/website1/index.html
echo website1 > /app/website2/index.html
echo website1 > /app/website3/index.html
4、测试访问,成功
项目实战2—LVS负载均衡的更多相关文章
- 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)
课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...
- 项目实战4—haproxy 负载均衡和ACL控制
haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...
- 高负载集群实战之lvs负载均衡-技术流ken
lvs简介 LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器. 特点 跨平台:window,linux 作用 实现负载均衡 核心组件 ip_vs:linux的内核功能 ...
- 项目实战2—实现基于LVS负载均衡集群的电商网站架构
负载均衡集群企业级应用实战-LVS 实现基于LVS负载均衡集群的电商网站架构 背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响 ...
- 项目详解2—LVS负载均衡详解
一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...
- LVS负载均衡IP隧道模式原理介绍以及配置实战
LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...
- 实现基于LVS负载均衡集群的电商网站架构
背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...
- LVS负载均衡理论以及算法概要
一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.or ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
随机推荐
- jQuery插件:Ajax将Json数据自动绑定到Form表单
jQuery注册方法的两种常用方式: //jQuery静态方法注册 //调用方法$.a1() $.extend({ a1: function () { console.log("a1&quo ...
- Win CE 6.0 获取手持机GPS定位2----示例代码 (C#)
一.须知 1.手持机(PDA)必须有GPS模块,才能通过代码使用串口通信获取GPS相关信息 2.要清楚自己手持机(PDA)固定的GPS通信串口号,如我们公司的手持机获取GPS信息的串口为COM4 3. ...
- JavaScript 版数据结构与算法(四)集合
今天,我们要讲的是数据结构与算法中的集合. 集合简介 什么是集合?与栈.队列.链表这些顺序数据结构不同,集合是一种无序且唯一的数据结构.集合有什么用?在 Python 中,我经常使用集合来给数组去重: ...
- 有趣的flash例子
仓鼠 <object type="application/x-shockwave-flash" data="http://cdn.abowman.com/widge ...
- 分页查询不知你是否真正的懂和PHP的正则的应用和一些性能优化
一.不废话太多 直接进入例子. 1 问题: 有一张收藏表,里面存储的是用户和图书ID.数据量为1亿.现在要求分页获取所有用户ID(不重复),写下你的sql语句. 表结构大致如下: ...
- hiveQL求差集
hive sql求差集的方法 1.什么是差集 set1 - set2,即去掉set1中存在于set2中的数据. 2.hive中计算差集的方法,基本是使用左外链接. 直接上代码 select * fro ...
- C++的socket编程学习
前言 不得不承认作为一个前端开发,仍有一个后台开发的梦.从socket通信开始学习,在工作之余补充学习点相关知识,记录下学习的过程. 服务端 服务器代码如下,在设置listen之后,通过accept获 ...
- MXBridge - 插件式JS与OC交互框架
概述 MXBridge,提供一个插件式的JavaScript与Objective-C交互的框架,通过JavaScriptCore实现,插件式扩展Obejctive-C接口以供JavaScript调用. ...
- linux下开机不自动挂载指定分区
我的debian装好后,有保留windows,但是却不想在debian启动后桌面上,文件管理器中显示windows分区,留个记录在这里,需要的时候方便查看 使用mount 的 noauto参数: 创建 ...
- php 守护进程类
最近个人项目中需要后台运行任务,之前一直是用nouhp & + 重定向输出 来后台跑任务,后来觉得不好维护原始数据,同时可能也没有直接操作进程那么稳吧(没验证).废话少说,来看分析. 首先,我 ...