项目实战2—实现基于LVS负载均衡集群的电商网站架构
负载均衡集群企业级应用实战-LVS

实现基于LVS负载均衡集群的电商网站架构
背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html
LVS详解和相关代码段含义详见 http://www.cnblogs.com/along21/p/7784394.html
实现基于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
在RS02 上vim ../test.html
real server 2
② 打开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负载均衡集群的电商网站架构
背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- LVS之2---基于LVS负载均衡集群架构
LVS之2---基于LVS负载均衡集群架构实现 目录 LVS之2---基于LVS负载均衡集群架构实现 ipvsadm software package Options 常用命令 保存及重载规则 内存映 ...
- LVS负载均衡集群服务搭建详解(二)
lvs-nat模型构建 1.lvs-nat模型示意图 本次构建的lvs-nat模型的示意图如下,其中所有的服务器和测试客户端均使用VMware虚拟机模拟,所使用的CentOS 7 VS内核都支持ipv ...
- LVS负载均衡集群服务搭建详解(一)
LVS概述 1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的负载均 ...
- LVS负载均衡集群
回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...
- Linux 笔记 - 第十八章 Linux 集群之(二)LVS 负载均衡集群
一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.上一篇已经讲解了 HA 高可用集群,此节讲解负载均衡集群. 负载均衡集群(Load Balance Cluseter,简称 ...
- LVS负载均衡集群--DR模式部署
目录: 一.LVS-DR数据包流向分析 二.DR 模式的特点 三.LVS-DR中的ARP问题 四.DR模式 LVS负载均衡群集部署 一.LVS-DR数据包流向分析 1.为方便进行原理分析,将clien ...
- LVS负载均衡集群--NAT模式部署
目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...
随机推荐
- 第四范式涂威威:AutoML技术现状与未来展望
以下内容是对AutoML技术现状与未来展望讲座的总结. 1.机器学习定义 <西瓜书>中的直观定义是:利用经验来改善系统的性能.(这里的经验一般是指数据) Mitchell在<Mach ...
- java模板设计模式
1.概述 模板设计模式定义:定义一个操作中的算法骨架,将步骤延迟到子类中. 模板设计模式是一种行为设计模式,一般是准备一个抽象类,将部分逻辑以具体方法或者具体的构造函数实现,然后声明一些抽象方法,这样 ...
- Python开发——15.协程与I/O模型
一.协程(Coroutine) 1.知识背景 协程又称微线程,是一种用户态的轻量级线程.子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完 ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 多线程.Thread.Sleep方法
多线程执行中,调用Thread.Sleep()方法 分情况: 1. 单核的情况下 是把当前正在工作的主线程停止(也就是从把线程变成非工作线程). 其他需要工作的线程来争夺CPU这个闲下来的核.谁争夺到 ...
- thinkphp添加数据 add()方法
thinkphpz内置的add()方法用于向数据库表添加数据,相当于SQL中的INSERT INTO 行为添加数据 add 方法是 CURD(Create,Update,Read,Delete / 创 ...
- Django+easyui 快速开发
Django的使用我们可以查看上一篇博客,今天我们要在Django中使用easyui快速开发,在我们安装好Django, 我们可以道改地址那一下easyui 官方API文档(http://downlo ...
- 10.1牛客J题
https://www.nowcoder.com/acm/contest/201/J Description: 给你一行括号,定义了括号合格的形式,然后Q次询问,问你这个区间内括号是否合格 Solut ...
- java maven web 项目启动之后,访问所有页面为空白,不是404!!!
自己解决了大半天,后面通过解决spring单元测试的时候,发现单元测试可以用了,项目启动也可以访问页面了,具体原因不太清楚 可能原因: (1)pom.xml 依赖有重复的地方 (2)不排除与公司内网有 ...
- spring boot 入门及示例
需要环境:eclipse4.7.3 + jdk1.8 +maven3.6.1 + tomcat(web需要) spring boot官网介绍:https://spring.io/guides/gs/s ...