E启学服务器负载均衡配置文档

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.  }