闲来无事,搭建一个负载均衡集群,至于负载均衡集群搭建过程,找时间写下。这次主要写集群之间的文件同步,以及线上测试环境的搭建。

笔者看过很多公司都没有线上测试环境,真是崩溃了,不造怎么确保线上线下环境一致的。

笔者此次使用三台服务器:

192.168.138.3   web服务器

192.168.138.4   web服务器

192.168.138.10  web服务器+线上测试环境+源站

其中3 4 服务器作为集群中的web服务器,对外开放,是负载均衡集群的部分。

其中10 服务器不对外开放,代码发布到该服务器,在该服务器上进行测试,完成后程序由该服务器同步到其他集群服务器上,同时网站后台以及自动脚本位于该服务器上。(如果为了安全期间,大家可以对该服务器进行配置,只允许你们公司内部网络访问,在家时通过VPN连接内部网络,这样就可以确保后台安全)

本文主要是大家rsync服务,至于IP配置,web服务器搭建,大家可以看我之前的文章。

这里我们为了开发方便,在10服务器上制定一个规则,即只要rsync.txt存在我们就开始同步,这样只要开发上传该文件同步就开始,同步完成后自动删除该文件。

第一步:笔者这里安装的是centos6.4 已经默认安装了rsync 所以笔者就不再进行安装,未安装的可以自行安装,过程相对简单

第二步:安装inotify inotify-tools

笔者这里centos6.4已经默认安装了inotify , 如果要查看是否安装可以使用如下命令

ll /proc/sys/fs/inotify

如果列出如下三项,则证明已经安装

-rw-r--r-- 1 root root 0 2月 1 13:59 max_queued_events
-rw-r--r-- 1 root root 0 2月 1 13:59 max_user_instances
-rw-r--r-- 1 root root 0 2月 1 13:59 max_user_watches

没有安装的读者可以自行安装,然后我们需要安装inotify-tools工具

tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools
make && make install

第三步:对客户端 服务端进行配置

讲之前一定要搞清楚 10是客户端  3 4 是否服务端  这个不要搞倒了   是10的文件同步到3 4 上面

首先对 3 4 进行配置,这里笔者贴出自己的配置文件   /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections =
strict mode = no
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /usr/data/rsync/rsyncd.log
[laiwojia-data]
path = /usr/website/html/www.laiwojia.la/data/
comment = web4 files
ignore errors
read only = no
write noly = no
hosts allow = 192.168.138.10
hosts deny = *
list = false
uid = root
gid = root
auth users = laiwojia
secrets file = /usr/local/rsync/conf/server.pass [laiwojia]
path = /usr/website/html/www.laiwojia.la/
comment = web4 files
ignore errors
read only = no
write noly = no
hosts allow = 192.168.138.10
hosts deny = *
list = false
uid = root
gid = root
auth users = laiwojia
secrets file = /usr/local/rsync/conf/server.pass

我们这里配置了两个模块 'laiwojia-data'和'laiwojia' ,其中'laiwojia-dada'只要发生变化就要同步的(想想大家把后台放在10上面,那么这个data里面的文件就是后台生成的持久化文件,后台配置,然后整个集群通用),而'laiwojia'了这个模块是发布系统所用的模块,需要在站点下有'rsync.txt'文件时才同步。(由此我们可以看出,'data'中的文件不能通过发布系统发布)

看了上面的配置,大家就明白,'/usr/website/html/www.laiwojia.la/data/'这个目录必须存在, '/usr/local/rsync/conf/server.pass'这个秘密文件也必须存在

秘密文件中的内容为

laiwojia:123abc+-

记住3 4 作为服务端 密码文件要有前缀 有的淫写成 '123abc+-' 后面就会不通过

然后我们对10进行配置,这里笔者贴出配置文件

uid = nobody
gid = nobody
use chroot = no
max connections =
strict mode = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /usr/data/rsync/rsyncd.log

然后还要建立一个秘密文件'/usr/local/rsync/conf/server.pass' 由于10是客户端,因此秘密没有前缀

123abc+-

第四步:编写shell脚本

首先是改变就同步的shell脚本,我们命名为 'inotify-ha-rsync.sh' 内容为

#!/bin/bash
host3=192.168.138.3
host4=192.168.138.4 src=/usr/website/html/www.laiwojia.la/data/
dst3=laiwojia-data
dst4=laiwojia-data
user=laiwojia /usr/local/inotify-tools/bin/inotifywait\
-mrq --timefmt '%d/%m/%y'\
--format '%T %w%f%e'\
-e modify,delete,create,attrib $src\
|while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/conf/server.pass $src $user@$host3::$dst3
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/conf/server.pass $src $user@$host4::$dst4
echo "${files} was rsyncd" >>/tmp/rsync.log >&
done

OK,我们来测试下

在'/usr/website/html/www.laiwojia.la/data/' 目录下建立test.php 并改写其内容,我们看看结果(事先要运行这个shell)

vim test.php

#以下是内容
<?php
this is a test
hello tom!

看看运行结果

然后看看3 和 4 机器上是否有test.php  发现两个中都有test.php 文件,好了我们看看内容

cat test.php

<?php
this is a test
hello tom

OK,这个实时同步的算是完成了

剩下我们要看看考虑到线上测试部署的,首先我们还是要建立一个shell脚本,命名为ha-rsync.sh,内如如下

!/bin/bash
host3=192.168.138.4
host4=192.168.138.3 src=/usr/website/html/www.laiwojia.la/
excludedir=$src"data/" $src"rsync.txt"
dst3=laiwojia
dst4=laiwojia
user=laiwojia
rsync_file=${src}"rsync.txt" if [ -f "$rsync_file" ]
then
/usr/bin/rsync -vzrtopg --delete --progress --exclude=$excludedir --password-file=/usr/local/rsync/conf/server.pass $src $user@$host3::$dst3
/usr/bin/rsync -vzrtopg --delete --progress --exclude=$excludedir --password-file=/usr/local/rsync/conf/server.pass $src $user@$host4::$dst4
fi
rm -rf $src"rsync.txt"

好我们来测试下

touch rsync.txt
touch test.html

然后运行脚本,到各个服务器上看看,是不是都有了。这样的话,如果你把代码发到10上,没有rsync.txt就不会同步,那么这是测试可以进行线上测试,等测试好了,开发就上传一个rsync.txt 然后就开始同步了

当然了,这里还可以搞得更复杂,比如安全起见,一些配置文件不要让它同步以免某天你发错了把本地的给发上去了,还可以指定那些目录不同步,等等,这些都可以实现,只不过shell写的复杂一点而已

rsync实现负载均衡集群文件同步,搭建线上测试部署环境的更多相关文章

  1. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  2. 实现基于LVS负载均衡集群的电商网站架构

    背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...

  3. LVS负载均衡集群服务搭建详解(一)

    LVS概述 1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的负载均 ...

  4. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  5. LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

    LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一 ...

  6. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

  7. LB负载均衡集群及NAT模式配置

    一.LB(load balance)负载均衡集群 负载均衡集群常用的有: 1.软件实现的 nginx(工作在OSI第七层应用层) lvs+keepalived(工作在OSI第四层传输层) 2.硬件实现 ...

  8. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  9. linux+nginx+tomcat负载均衡,实现session同步

    linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...

随机推荐

  1. Sqlite学习笔记(一)&&编译安装

    Sqlite简介 sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中. sqlite动态库非常小,最新的3.8.11版本也只有 ...

  2. php配置php-fpm启动参数及配置详解

    约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm ...

  3. 编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。

    package com.hanqi.test; public class Clock { int hh; int mm; int ss; String time; Clock(int h,int m, ...

  4. linux下mysql开启远程访问权限及防火墙开放3306端口

    默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限. 主流的有两种方法,改表法和授权法. 相对而言,改表法比较容易一点,个人也是比 ...

  5. QT学习第1天

    QT学习第一天  坚持住!! 一 Qt概述 1.Qt发展历史 (1)1991年诞生(Haavard Nord/Eirik Chambe-Eng), (2)1994年创立Troll Tech(奇趣科技) ...

  6. 关于C语言中的位域

    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可.为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称 ...

  7. 搭建PHP官方框架zend framework 2(LINUX)

    在五花八门的语言里,PHP作为我第一个觉得欣赏的理由,就是它的简单和快捷,因为它封装了许多的常用函数.PHP作为网站中一种算作比较流行的语言,也产生各种优秀的框架.我所接触过的有zend framew ...

  8. AC日记——二叉树最大宽度和高度 1501 codevs

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description   给出一个二叉树,输出它的最大宽 ...

  9. QC学习一:Windows环境中Quality Center 9.0安装详解

    一.安装前准备 1.安装环境:windows XP.SQL Server2005 2.准备安装文件:Quality Center 9.0 (qc10以上,包括qc10,qc只支持安装在服务器操作系统上 ...

  10. 嵌入式Linux驱动学习之路(三)u-boot配置分析

    u-boot配置流程分析 执行make tiny4412_config后,将会对u-boot进行一些列的配置,以便于后面的编译. 打开顶层目录下的Makefile,查找对于的规则tiny4412_co ...