2018-08-27
E启学服务器负载均衡配置文档
网校系统,E启学网校系统,网校系统开发,网校平台搭建,在线教育平台
一、负载均衡介绍
有关负载均衡的介绍,这里不做阐述,请直接点击下面的链接查看
https://baike.baidu.com/item/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1
二、部署方案
负载均衡部署方案目前有两种方式。
使用传统的负载均衡方式
特别注意
①. 使用此方式部署的负载均衡,目前只支持 nginx 运行环境
②. 请最少使用两台服务器(最好使用三台,其中一台做负载均衡转发服务器,另外两台做后端处理)
配置实例
此处实例以使用两台服务器,且使用 IP 访问配置为例,因使用域名配置大致一致且相对简单, 这里不列举说明
配置步骤如下:
① 配置程序处理
a) 配置第一台服务器(SERVER_A)的程序处理端口(此处开启 8001 端口做程序处理,原因下面说明)
![]()
b) 配置第二台服务器(SERVER_B)的程序处理端口(为了便于理解,此处也开启 8001 端口处理程序),配置文件同 SERVER_A
② 配置负载均衡服务器
此处我们使用 SERVER_A 做负载均衡,即 SERVER_A 处理了两件事情(程序处理和负载均衡转发)
a) 监听访问此服务器的IP配置如下
![]()
b) 配置负载均衡服务器的信息配置如下
![]()
③ 至此,我们的负载均衡配置已经完毕,重启两台服务器的 nginx 服务
④ 访问 SERVER_A 的 IP 即可预览效果
注意,我们在以上负载均衡配置中使用了 ip_hash 算法分配,因此,在一定时间内,某一台机器访问将都会被分配到同一服务器!! 在测试阶段,你可以注释 ip_hash 算法,启动 least_conn 算法来查看访问了哪台服务器.
⑤ 以上配置,请参见本文档中的 `配置实例文件`
使用阿里云负载均衡解决方案
使用阿里云的负载均衡解决方案,请参考阿里云提供的文档
https://help.aliyun.com/product/27537.html
配置解决文件同步问题
如果配置了负载均衡,紧接着就需要处理附件同步,session 访问等问题了,此处使用 NFS 来解决该问题.
① 安装相关服务(两台服务器均需要安装)
a) 在新版的 linux 系统中,大多数已经自带了 rpcbind 和 nfs-server,如果已经安装,跳过下面的安装步骤,
使用如下命令检测
rpm -qa nfs-utils rpcbind
如果返回了类似下面的信息,说明已经安装
rpcbind-0.2.0-12.el6.x86_64
nfs-utils-1.2.3-70.el6_8.2.x86_64
b) 安装两个服务,执行以下命令即可
yum install -y nfs-utils rpcbind
② 配置 nfs
假定数据都储存在SERVER_A 服务器
则编辑 SERVER_A 服务器上面的/etc/exports 文件,该文件为 NFS 程序的配置文件,默认为空, 其配置语法格式为:
NFS 共享目录 接收共享的服务器 IP(参数 1,参数 2,...) 接收共享的服务器 IP(参数 1,参数2,...) ...
![]()
例如:
最好将 anonuid 和 anongid 设置为 nginx 用户 ID 和所在组ID,这样可以避免同步的数据在nginx 下运行时无权限访问的问题. 更多的参考信息:
https://www.2cto.com/net/201610/557555.html
https://www.cnblogs.com/alonones/p/6105586.html
备注:需要将这两个服务加入自动启动服务中,同理挂载目录也是需要加入自动启动项中,这
样可以防止服务器在重启后,无法正常同步的问题
③. 配置 session 同步
在 php.ini 配置文件中配置 session 的保存目录,最好不用默认的目录,新建一个目录,只存放
session,然后利用 nfs 将 session 的目录共享给每一台程序处理服务器即可
三、配置实例文件
SERVER_A/SERVER_B 的配置参考文件
1.
server
2. {
3. listen 8001;# 开启 8001 端口监听
4. server_name _; # 匹配使用 IP 访问
5. index index.php index.html index.htm;# 配置默认的首页文件
6.
7.
8. location / {
9. root /home/wwwroot/testA;
10. index index.php;
11.
if (!-e $request_filename) {
12.
rewrite ^(.*)$ /index.php?s=/$1 last;
13.
break;
14.
}
15.
16. }
17. #error_page 404 /404.html;
18.
19. location /nginx_status
20. {
21. stub_status on;
22. access_log off;
23. }
24. location ~ .+\.php($|/) {
25. set $script $uri;
26. set $path_info "/";
27. if ($uri ~ "^(.+\.php)(/.+)") {
28. set $script $1;
29.
set $path_info $2;
30.
}
31.
fastcgi_pass unix:/tmp/php-cgi.sock;
32.
fastcgi_index index.php?IF_REWRITE=1;
33.
include fastcgi_params;
34.
fastcgi_param PATH_INFO $path_info;
35.
fastcgi_param SCRIPT_FILENAME $document_root/$script;
36.
fastcgi_param SCRIPT_NAME $script;
37.
}
38.
location ~ .*\.(js|css)?$
39.
{
40.
expires 12h;
41.
}
42.
43.
location ~ /\.
44.
{
45.
deny all;
46.
}
47.
access_log /home/wwwlogs/testA.log;# 日 志
48.
}
负载均衡转发配置参考文件
1. upstream backend {
2. ip_hash;# 使用此算法可以防止 session 出现问题,建议使用
3. #least_conn;# 根据连接数分配,不推荐使用,因为需要处理 session 的访问问题
4. server 10.0.0.2:8001;# 配置 SERVER_A 的 IP 以及端口
5. server 10.0.0.2:8001;# 配置 SERVER_B 的 IP 以及端口
6. }
7. server
8. {
9. listen 80;# 监听 80 端口
10. server_name _;# 监听 IP 访问
11. location / {
12. proxy_pass http://backend;# 转发到负载均衡配置
13. proxy_set_header X-Real-IP $remote_addr;# 添加真实访问 IP
14. proxy_set_header Host $host;# 添加访问的 host 变量
15.
16. }
17. }