什么是负载均衡
把之前发送到一台服务器上的请求分发到多个服务器上 进行协同工作
前言
配置负载均衡至少需要准备三台虚拟机 其中一台虚拟机作为主虚拟机配置负载均衡进行分配,剩下两个虚拟机里面配置启动一个springboot项目,正常情况下剩下的两台虚拟机除了ip地址以外其余完全一样,我这里对项目进行了一点小小的改变便于分辨
一. Nginx使用服务启动
配置nginx快速启动,这里跟本章内容没有关系,不需要可直接跳过从 二 开始
1.创建nginx.service文件
切换到/lib/systemd/system/目录
创建命令
vim nginx.service
2.添加如下内容
在新建的nginx.service里面添加如下内容
⚠️注意 下方路径不一定跟我一样 务必使用自己的路径
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/opt/nginx/nginxserver/sbin/nginx -c /opt/nginx/nginxserver/conf/nginx.conf ExecReload=/opt/nginx/nginxserver/sbin/nginx -s reload ExecStop=/opt/nginx/nginxserver/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
3. 命令
保存之后在控制台输入下方命令使配置生效
systemctl daemon-reload
之后使用之前的命令 找到nginx所在位置 先关闭nginx
nginx -s stop
然后使用配置完之后的命令启动
systemctl start nginx
查看状态
systemctl status nginx
4.常用命令
配置之后需要使文件生效
systemctl daemon-reload
退出并保存文件,执行systemctl enable nginx.service使nginx开机启动
#开机自启动
systemctl enable nginx.service
#停止开机自启动
systemctl disable nginx.service
#查询当前状态
systemctl status nginx.service
#启动服务
systemctl start nginx.service
#重新启动服务
systemctl restart nginx.service
#停止服务
systemctl stop nginx.service
#重新加载配置
systemctl reload nginx.service
二. 克隆虚拟机
首先准备工作,准备至少三台虚拟机,一个配置好的虚拟机,剩下两个建立副本修改ip
1.克隆虚拟机
1) 关闭虚拟机ContOS 7 001
2) 右键虚拟机——>管理——>克隆——>下一步——>下一步——>创建完整的克隆——>修改虚拟机的名称和安装路径——>完成
2.修改ip地址
因为配置负载均衡需要使用三台服务器,所以服务器的ip不能重复,下面开始更改ip
命令:
⚠️注意 复制或者看着输入的时候 vim /etc/sysconfig/network-scripts/ifcfg-ens到这里按tab键因为后面这两个XX你或许跟我会不太一样
vim /etc/sysconfig/network-scripts/ifcfg-ensXX
进来之后更改这个IPADDR即可然后重启虚拟机就更改完毕了
重新连接之后查看ip会发现更改成功就行了
3.克隆第二个虚拟机
同上⬆️⬆️
三. 配置
这里就是我所有的虚拟机,下面会在69这个虚拟机的nginx.conf配置文件里面将70 96配置到里面,在70和96里面分别运行两个项目,正常情况这两个项目是一样的,便于分辨我对这两个的数据库进行了一些修改
1.配置70 96 虚拟机
70 96 这两个虚拟机不需要进行任何的配置 只需要将打包好的jar包上传进来之后运行进行访问测试即可
我这里是用的是这两个打包好的springboot项目(自行准备或者私我问我要)
2.启动测试 70 96 虚拟机
3.对69服务器进行负载均衡配置
配置方向代理
4.访问
第一次访问
刷新页面之后
这样就配置完成了
四. 负载均衡策略
1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
如:现在我有两个后台服务器 默认的规则轮询是先访问到的是服务器一后访问的是服务器二,再访问就还是服务器一......
upstream eduserver{
server 192.168.190.129:8082;
server 192.168.190.129:8083;
}
2.加权轮询weight
weight 代表权重,可在配置的server后面加个weight=number,默认为 1,权重越高被分配的客户端越多
访问到35 的概率是70%
访问到36 的概率是30%
3.ip_hash
ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
根据访问的ip地址 算出来hash
根据hash 分配服务器
以后每次访问的时候都值指向第一个访问的那个服务器
4.least_hash
最少连接数,哪一个服务器连接最少就分发给哪个服务器
upstream myserver {
least_conn;
server 208.208.128.122:8082;
server 208.208.128.122:8083;
}
5.url_hash
按访问的url的hash结果分配请求,是每个url定向到同一后端服务器上。
upstream myserver {
url_hash;
server 208.208.128.122:8082;
server 208.208.128.122:8083;
}
6.fair(第三方)
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {
server 208.208.128.122:8082;
server 208.208.128.122:8083;
fair;
}
区别
-
调度算法在设置upstream中配置,例如在此大括号里面写入ip_hash表示使用ip_hash的方式分配
-
轮询只是简单实现请求的顺序转发,并没有考虑不同服务器的性能差异;
-
加权轮询设置了初始时服务器的权重,但是没有考虑运行过程中的服务器状态;
-
IP Hash保证同一个客户端请求转发到同一个后台服务器实现了session保存,然而当某一后台服务器发生故障时,某些客户端将访问失败;
-
最少连接数只是考虑了后端服务器的连接数情况,并没有完全考虑服务器的整体性能。