关于Nginx负载均衡目录同步问题

近期外包接单,做了一个简单的系统,本以为如此简单一个Tomcat就足以满足,结果客户要求需要两台服务器负载均衡,之前负载均衡都是由专门的人负责,第一次自己实现Nginx,走了不少弯路。

由于项目组有附件上传的功能,没有专门的文件服务器,将附件都存放在了ROOT底下,负载均衡后发现经常找不到图片,明显是因为两台服务器资源不同步的问题造成的,于是开始研究服务器目录同步,使用Rsync+Sersync实现目录同步,具体步骤:

1:制定两台服务器中的一台为主服务器(安装软件rsync+sersync,但是不需要启动rsync),另一台为从服务器(安装软件rsync,需要启动rsync)

2:从服务器安装完rsync需要对/etc/rsyncd.conf 进行配置:

uid = root                                  #拥有目录权限用户

gid = root                                  #拥有目录权限的组

use chroot = no                         #内网使用可以不用配置

max connections = 200              #最大连接数  

timeout = 300                               #超时时间

pid file = /var/run/rsyncd.pid              #启动进程写入此PID文件

lock file = /var/run/rsyncd.lock            #lock文件来配合最大连接数参数

log file = /var/log/rsyncd.log               #日志文件

ignore errors = yes                         #忽略I/O错误

read only = false                           #允许读写      

list = false                                #不列出列表

hosts allow = 192.168.1.0/24                #允许网段

hosts deny = *                              #拒绝其他网段

auth users = users                          #认证用户

secrets file = /opt/app/rsyncd/auth.pass    #密码文件

[web]                                       #同步目录

path = /backup/web

设置 /opt/app/rsyncd/auth.pass文件格式为user:password

给 /opt/app/rsyncd/auth.pass添加600权限 chmod 600  /opt/app/rsyncd/auth.pass

启动rsync  rsnyc --daemon

3:主服务器部署

主服务器安装完sersync后需要配置confxml.xml,在sersync的安装目录下

<sersync>

        <localpath watch="/backup/web"> <!--本机同步目录-->

    <remote ip="192.168.1.201" name="web"/>    <!--从服务器IP及模块名称,需要与从服务器/etc/rsyncd.conf配置的模块名完全一致-->

    <!--<remote ip="192.168.8.39" name="tongbu"/>-->

    <!--<remote ip="192.168.8.40" name="tongbu"/>-->

    </localpath>

     <rsync>

     <commonParams params="-artuz"/>

    <auth start="true" users="users" passwordfile="/opt/app/sersyncd/auth.pass"/>

            <!--认证用户及认证从服务器密码文件目录,/opt/app/sersyncd/auth.pass(600权限) 里面只需要设定密码,users 要与从服务器设定的用户一致-->

       <userDefinedPort start="false" port="874"/><!-- port=874 端口需要与从服务器rsync设定的一致,如从服务器设定端口8080此处的端口也需要修改成8080  start="true" -->

       <timeout start="false" time="100"/><!-- timeout=100 -->

        <ssh start="false"/>

        </rsync>

<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>

<!--default every 60mins execute once-->

<crontab start="false" schedule="600"><!--600mins-->

 <crontabfilter start="false">

   <exclude expression="*.php"></exclude>

  <exclude expression="info/*"></exclude>

            </crontabfilter>

        </crontab>

        <plugin start="false" name="command"/>

    </sersync>

启动sersync :/opt/soft/sersync/sersync/sersync2 -d -r -o /opt/soft/sersync/sersync/confxml.xml


由于只能由主服务器同步到从服务器,因此当负载均衡到从服务器时,附件无法被同步到主服务器,访问图片依然存在404错误,因此需要对Nginx进行配置,通过动静分离的方式,将所有静态图片访问的请求都指向从服务器,因此解决上传图片找达不到问题。

location ~ .*\.(gif|jpg|jpeg|png|flv|mp3)$ { #静态

          proxy_pass http://192.168.1.12:80/;

        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。