大并发架构
负载均衡
简单理解:负载均衡是反向代理的衍生品,当真实服务器有多台时,可以合理分配负载。
也可认为:反向代理是负载均衡的一种,当真实的服务器只有一台时就是反向代理。
负载均衡解决方案:
- 硬件方案:F5、A10、Radware、NetScaler,性能强进,价格偏高
- 软件方案:LVS、Nginx、HAProxy,性能不错,开源免费
搭建步骤:
- 简单约定(硬件配置表),都需要安装nginx
名称 | IP | 作用 |
---|---|---|
LB01 | 10.36.137.86 | 负载均衡服务器(主) |
LB02 | 负载均衡服务器(备) | |
W01 | 10.30.137.9 | 提供服务的真实服务器 |
W02 | 10.30.137.4 | 提供服务的真实服务器 |
2. 负载均衡主服务器配置(LB01)
upstream lb01 { #默认轮询
server 10.36.137.9;
server 10.36.137.4 down;
server 10.36.137.6;
server 10.36.137.15 backup; 作为备用负载,其它服务器都忙碌时
}
upstream lb02 { #加权轮询
server 10.36.137.9 weight=10;
server 10.36.137.4 weight=1;
server 10.36.137.6 weight=5;
server 10.36.137.15 weight=4;
}
upstream lb03 { #IP哈希
ip_hash; #对ip采用hash算法,保证每次访问的都是同一服务器
#优点:能够保证用户的身份信息,解决session共享问题
#缺点:若来自某个IP的请求特别多,服务器压力会比较大,容易造成负载不均的情况
server 10.36.137.9;
server 10.36.137.4;
server 10.36.137.6;
server 10.36.137.15;
}
upstream lb_image {
server 10.36.137.19;
server 10.36.137.14;
server 10.36.137.16;
server 10.36.137.115;
}
#也可使用第三方的负载均衡算法,如:fire、url_hash
server {
listen 80;
server_name www.fuzai.com fuzai.com;
location / {
proxy_pass http://lb01; #指定连接池
proxy_set_header Host $host; #传递主机信息
proxy_set_header X-Real-IP $remote_addr; #传递用户IP
}
location ~*\.(jpg|jpeg|png|gif)$ {
proxy_pass http://lb_image; #指定连接池
proxy_set_header Host $host; #传递主机信息
proxy_set_header X-Real-IP $remote_addr; #传递用户IP
}
}
在所有的真实服务上搭建一模一样的项目(测试时可以显示不一样的内容以作区分)
双活技术(keepalived)
作用:主要用来保证负载均衡服务器的高可用,进行节点健康检查。
配置:
配置两台一模一样的负载均衡服务器,一主一备
两台负载均衡服务器同时安装keepalived:
yum install -y keepalived
备份keepalived配置文件:
/etc/keepalived/keepalived.
主服务器配置
! Configuration File for keepalived #全局定义 global_defs { notification_email { 12345678@qq.com #出现异常时,发送邮件给哪些邮箱 } notification_email_from admin@mxspider.com #使用哪个邮箱发送邮件 smtp_server smtp.qq.com #邮箱服务器 smtp_connect_timeout 30 #连接超时 router_id LB01 #路由IP,要保证主和备不同 } vrrp_instance VI_1 { state MASTER #主负载均衡服务器 interface eth0 #网卡名称 virtual_router_id 51 #虚拟路由ID,在本配置文件中唯一即可 priority 150 #权重,主应该大于备 advert_int 1 #心跳同步间隔时间 authentication { #认证 auth_type PASS #认证方式:密码 auth_pass 1111 #密码内容:1111 } virtual_ipaddress { #虚拟的IP地址 10.36.137.222 } }
备用负载均衡服务器配置
! Configuration File for keepalived #全局定义 global_defs { notification_email { 12345678@qq.com #出现异常时,发送邮件给哪些邮箱 } notification_email_from admin@mxspider.com #使用哪个邮箱发送邮件 smtp_server smtp.qq.com #邮箱服务器 smtp_connect_timeout 30 #连接超时 router_id LB02 #路由IP,要保证主和备不同 } vrrp_instance VI_1 { state BACKUP #备负载均衡服务器 interface eth0 #网卡名称 virtual_router_id 51 #虚拟路由ID,在本配置文件中唯一即可 priority 100 #权重,主应该大于备 advert_int 1 #心跳同步间隔时间 authentication { #认证 auth_type PASS #认证方式:密码 auth_pass 1111 #密码内容:1111 } virtual_ipaddress { #虚拟的IP地址 10.36.137.222 } }
两台(主和备)负载均衡服务器都要启动keepalived服务:
service keepalived start
测试步骤
- 需要域名解析到虚拟的IP地址
- 直接访问虚拟的IP地址或者域名即可
- 可以将主负载均衡服务器的keepalived关闭,看看备用的是否立即提供服务
- 再次将主负载均衡服务器的keepalived启动,看看备用的是否立即停止服务
- 可以使用命令查看:ip addr