PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡

作为一个PHP菜鸟,最近闲着没事,就想搭建一个Nginx试试,因为重来没有搭过,特此记录一下,也希望能为新入门的兄弟们提供一点帮助,可能有一些说错的地方,大家可以帮我纠正,谢谢.
参考博客:https://blog.csdn.net/oljuydfcg/article/details/91639416?spm=1001.2014.3001.5506 rsync的配置是参考了这位大神博主的,大家可以看一下

第一步

准备服务器,这里我使用了两台服务器来进行简单的测试,主服务器端我们称为服务器A,客户端我们称为服务器B,我们把想要对用户访问的站点部署到A上,列如xxx.com站点部署好我们对应的项目 证书等等

在服务器B上添加相同的站点即项目即可

Nginx配置

回到服务器A,打开站点设置,这里我没有更改服务器的主Nginx配置文件,只更改我们自己这个站点的Nginx配置文件加如一下配置

upstream fuzhai {server 服务器BIP:端口 weight=2;server127.0.0.1:8301;
}

在fuzhai这个里输入 自己其他的服务器IP地址加上端口即可 weight是权重 不设置的话默认是1 比如第一个访问2次 第二个就会访问一次
在server里添加

location / {proxy_pass http://fuzhai;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

这里是当访问我服务器A站点时这里会走到fuzhai里,好转发到其他的服务器上.这里我可能说的不太明白,大家可以查找一下nginx反向代理了解一下,下面是我配置好的截图

切记这里的端口一定要开放,以防后期测试的时候访问失败
服务器B上我没有进行什么配置,只是我的测试项目用的是tp6,设置了一下伪静态,和访问目录则可.

测试是否配置成功

在两个服务器上的项目中分别创建两个相同的接口进行访问
上图为本机接口

上图为服务器B接口
可以看到项目可以正常访问

需要注意的地方

1.Nginx的分配策略这里我没有演示,使用的是默认的轮询,就是一次一回,其余的大家可以自行测试.
2.如果大家的后台项目是session存储用户信息的哈,需要注意配置完成后可以第一次登录完后台,在刷新切换到了新的站点,从而登录失效,这个解决方案我没有测试,有人说可以设置ip_hash来设置使用户固定访问指定的站点,也可以把session存储到redis中达到会话共享,这个我没有实现过,大家用到的话可以做一个参考.
3.文件上传,可能大家有的是用本地存储,那么这样就可能会刷新页面图片失效,我推荐大家使用一个第三方的存储服务器,都使用这一个就不会出现问题了,可以自己搭建,要是方便的话可以使用阿里云OSS,腾讯云Cos,七牛等等第三方,对接还是很方便的.
4.代码同步,这个真是难死我了,因为我只是浅懂一点点的linux,这里我查到的是用rsync来达到代码同步,我就去学了一下,大家要是有别的方法可以留言告诉我一下 我去试试,下面就是用rsync+shell脚本来实现的代码同步.

rsync+shell代码同步

介绍一下rsync是什么吧
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。

1.可以使用宝塔自带终端,或其余软件,这里只要能链接服务器敲命令即可.
2.在两台服务器A和服务器B输入命令安装rsync,注意两个服务器的rsync版本同步以防出现错误

# rpm -qa|grep rsync   #检查是否安装过rsync,whereis rsync也可以
# yum install rsync       #如果未安装,使用yum安装rsync
# rsync -version #查看版本
#  yum remove rsync #卸载rsync 这个是防止需要重新安装时候使用,不是必须敲哈

3.回到服务器A配置rsync的配置文件rsyncd.conf,这个配置文件我默认就是有的没有就自行创建即可默认位置为 /etc/rsyncd.conf

 # vi  /etc/rsyncd.conf #编辑配置文件

输入以下内容,大家直接粘贴我的也行,有需要别的参数的可以在查询加入,我这只是我的常用

uid = test_tongbu #指定rsync进程以什么用户身份来运行 默认有nobody
gid = test_tongbu #指定rsync进程以什么用户组身份来运行 默认有nobody
hosts allow = * #可以访问的服务器 我是默认全部
use chroot = no #是否锁定用户在自己家目录中
max connections = 100  #指定可以进行同时链接的用户的最大数量
pid file = /var/run/rsyncd.pid #指定rsync进程的pid文件的路径和名称
lock file = /var/run/rsyncd.lock  #指定rsync进程的锁文件路径和名称
log file = /var/log/rsyncd.log #rsync的日志文件路径和名称
timeout = 900 #指定空闲超时时间
[www] #模块名称,其余服务器想传文件时候用到
path = /www/web #同步的文件路径
read only = false #只读
auth users = root #这个是为其他服务器访问时候创建的虚拟用户,不是系统用户切记
secrets file = /etc/rsyncd.password  #指定保存虚拟用户 的用户名 密码的文件
[mod1] #另一个模块
path = /www/web
read only = false
auth users = root
secrets file = /etc/rsyncd.password

上面就是我的配置文件和参数的大致意思,大家要是粘贴的话注意注释文字最好不要粘贴到文件中,我这里只是方便大家理解的用处,下面是我的配置截图

4.创建虚拟用户的密码文件 注意密码文件权限必须是600

 # vi  /etc/rsyncd.password # chmod 600  /etc/rsyncd.password

格式为
用户名:密码

5.运行rsync

# rsync --daemon  #运行rsync(守护进程模式)

默认端口是873,注意端口开放,我的是去开放了,怕不好使,linux我也不太熟悉.
6.这里注意服务器重启后可能rsync没有运行可以写入配置文件 让其自动重启

 # vi /etc/rc.local# /usr/bin/rsync --daemon --config=/ect/rsyncd.conf   #开机自动运行

7.服务器B配置,这里服务器B只需要创建一个密码文件和写入自动重启即可
创建密码文件 注意密码文件权限必须是600

 # vi  /etc/rsyncd.password # chmod 600  /etc/rsyncd.password


密码对应服务器A设置的密码即可无需用户名

写入自动重启

# vi /etc/rc.local
# /usr/bin/rsync --daemon  #开机自动运行

8.测试,在服务器A的目录下创建一个1.txt回到服务器B上使用命令手动同步一下,看看是否好使

服务器A下没有文件

服务器b下也没有文件

服务器A下创建1.txt
服务器B使用命令拉取文件,可以看见文件拉取成功并且已经同步了这里来注意说一下这个命令的意思

# rsync -vzrtopg --progress root@192.168.1.1::www /www/web --password-file=/etc/rsyncd.password
-v表示verbose详细显示
-z表示压缩
-r表示recursive递归
-t表示保持原文件创建时间
-o表示保持原文件属主
-p表示保持原文件的参数
-g表示保持原文件的所属组
-a存档模式
--progress :显示进度条
root:这个root不是你的系统用户 而是服务器A www 模块下的虚拟用户名称切记不要搞混
192.168.1.1:服务器A的IP 切换你自己的
www:服务器A中rsync配置文件中的模块名称
/www/web:本地要同步的目录
--password-file=/etc/rsyncd.password :本地密码文件位置就可以不用重复输入密码了

9.这里可以看见基本上已经配置成功了,把命令加到shell脚本中定时执行即可,这里说一下几种执行方案和查询别人的执行方案 其实都是定时执行脚本,大家根据喜好就行
1.创建shell脚本

# vi /www/sh/tongbu.sh
#!/bin/bashstep=1for (( i = 0; i < 60; i=(i+step) )); do
$(rsync -vzrtopg --progress root@192.168.1.1::www /www/wwwroot/a.test2.zjm0305.top/tp --password-file=/etc/rsyncd.password)sleep $step
doneexit 0

粘贴进去即可
2.宝塔用户可以在宝塔面板的计划任务模块创建一个shell脚本 定时的去执行这个文件


命令内容 sh /www/sh/tongbu.sh > /dev/null 2>&1
设置一下执行时间,如果很快就一执行的话 需要把脚本里循环次数调小 或者不用循环直接跑命令
3.看了一下别人的 不使用宝塔的用户可以然后在目标服务器 crontab 定时执行

crontab -e
* * * * * sh /root/rsyncd.sh > /dev/null 2>&1 #加进去即可

这样就可以每秒执行文件了,看了大神还是可以用一个专门放代码的服务器,然后需要同步代码的服务器 监听 代码服务器 这样每次我们往代码 服务器传代码 负载均衡所有的服务器代码 都是同步更新的 这个我真是没会,我在找找研究研究,找到了在补充吧

到这里也就差不多了,因为本人也是第一次弄,真的是没有经验,而且也只是自己的测试项目,没上线,可能上线会遇到其他的问题,大家到时候可以留言一起解决解决,如果发现我哪里说的做的不对的,大家指正我看见了第一时间修改,防止误人子弟啊

PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡相关推荐

  1. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了"蔷薇Nina"的"Nginx 相关介绍(Nginx是什么?能干嘛?)"一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前 ...

  2. tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡

    首先:配置tomcat集群 nginx+ tomcat7 1 安装jdk (可以选择6或者7都可以) 此处不用多说. 2 下载nginx-1.2.5 (下载附件) 3 下载 memcached(下载附 ...

  3. NGINX配置基于Node.js服务的负载均衡服务器

    NGINX配置基于Node.js服务的负载均衡服务器 本部署指南说明了如何使用NGINX开源和NGINX Plus在Node.js应用程序服务器池之间平衡HTTP和HTTPS通信.本指南中的详细说明适 ...

  4. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  5. Nginx以及通过Nginx实现tomcat集群配置与负载均衡

    Nginx简介 启动,停止,和重新加载配置文件命令 Nginx功能 正向代理和反向代理的区别 反向代理 负载均衡 1.RR(默认) 2.权重 3.ip_hash 4.fair(第三方) 5.url_h ...

  6. nginx+tomcat实现Windows系统下的负载均衡搭建教程

    下面小编就为大家分享一篇nginx+tomcat实现Windows系统下的负载均衡搭建教程,具有很好的参考价值,希望对大家有所帮助 刚入行没多久就听过'负载均衡'的大名,到现在因为工作接触的少,所以没 ...

  7. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  8. Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...

    Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...

  9. nginx和tomcat实现反向代理、负载均衡和session共享

    这类的文章非常多,nginx和tomcat实现反向代理.负载均衡实现非常easy,能够參照http://blog.csdn.net/liuzhigang1237/article/details/888 ...

最新文章

  1. 实施自动化测试的六个目标和意义
  2. SAP Analytics Cloud exception aggregation type设置成LAST的效果
  3. hive简介以及安装配置
  4. linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
  5. 穷人靠力,富人借力!看完你将明白一切!
  6. 关于线程池ThreadPoolExecutor使用总结
  7. 图书馆的uml概念类图怎么画_设计模式:UML?设计原则?
  8. 力扣报错“AddressSanitizer: heap-buffer-overflow on address...”的解决办法
  9. SCOM2007R2上监控TMG之部署Agent
  10. 带中文说明书OSLO Light 6.2-ISO 1CD光学软件
  11. 汇编语言程序设计实验——字符统计
  12. 饭店点餐系统之数据库表结构
  13. (附源码)ssm失物招领系统 毕业设计 182317
  14. 从经济学角度解读人工智能
  15. java xsd校验xml文件
  16. kubectl常用命令 和 配置
  17. 十一种通用滤波算法(转)
  18. 一篇带你了解让你的眼睛写代码!Opencv实时眼球追踪,解脱的你双手!
  19. autocad2008中文版
  20. 基于Python+Django+MYSQL的ERP管理系统的设计与实现

热门文章

  1. 进入微信后提示用浏览器打开
  2. 海量高性能列式数据库HiStore技术架构解析
  3. 使用iTOP进行CMDB资产管理
  4. video标签不能自动播放的原因
  5. 时间、延迟及延缓操作
  6. 分布式事务解决方案——TCC
  7. 数据泄露的类型以及如何防止它们
  8. 33岁转行计算机行业,关于转行:我是个程序员今年33岁还在写代码不想干这行该做些什么好...
  9. 3.操作系统——CPU的实模式、保护模式和长模式
  10. 计算机图形学是研究真实,计算机图形学论文真实感制图技术在图形学中的应用...