rsync+sersync实现两台web服务器的实时同步

  • 一.环境准备
    • 主服务器:
    • 从服务器:
  • 二.分别安装配置rsync,并测试手动免密备份
    • 这里大概讲一下rsync的工作方式和原理
    • 从服务器(备份端):
    • 主服务器(数据端)
  • 三.sersync的安装和配置
    • 主web端(数据端)
    • 从web服务器(备份端)
  • 附件--编辑监控脚本
    • 主服务器(数据端)

一.环境准备

服务器web为主要网站服务器,ip为192.168.8.141

[root@web ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:9f:3d:8c brd ff:ff:ff:ff:ff:ffinet 192.168.8.141/24 brd 192.168.8.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::64db:1934:758e:9922/64 scope link noprefixroute valid_lft forever preferred_lft forever

服务器web-bak为备份网站服务器,ip为192.168.8.142

[root@web-bak ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:12:08:9b brd ff:ff:ff:ff:ff:ffinet 192.168.8.142/24 brd 192.168.8.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::a3f3:eac0:1517:cf2/64 scope link noprefixroute valid_lft forever preferred_lft foreverinet6 fe80::64db:1934:758e:9922/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever

分别安装apache,并测试正常

主服务器:

[root@web ~]# yum -y install httpd
[root@web ~]# yum -y install net-tools
[root@web ~]# echo "this is main" > /var/www/html/index.html
[root@web ~]# systemctl restart httpd
[root@web ~]# curl 192.168.8.141
this is main

从服务器:

[root@web-bak ~]# yum -y install httpd
[root@web-bak ~]# yum -y install net-tools
[root@web-bak ~]# echo "this is backup" > /var/www/html/index.html
[root@web-bak ~]# systemctl restart httpd
[root@web-bak ~]# curl 192.168.8.142
this is backup

二.分别安装配置rsync,并测试手动免密备份

这里大概讲一下rsync的工作方式和原理

rsync是一个开源的文件同步软件,主要工作在linux,但是有跨windows平台的cwrsync.
主要同步方式为两种:
推,顾名思义,是作为数据产生端主动把需要同步的数据推送给备份端,这种方式主要用于和sersync搭配,实现实时自动同步数据,比如主从web服务器(本文主讲)
拉,一般是指数据备份端去拉,数据产生端数据,一般用于,周期性的同步(通过任务计划),数据同步即时性要求不是很高的场景

从服务器(备份端):

[root@web-bak ~]# yum -y install rsync
[root@web-bak ~]# useradd -M -s /sbin/nologin/ rsync           #创建一个不能登陆,没有家目录的本地用户rsync,用于运行rsync进程
[root@web-bak ~]# chown rsync:rsync -R /var/www/html           #将备份目录,也是从web服务器的web目录的属主和属组改为rsync,此步不做,同步会报错
[root@web-bak ~]# vim /etc/rsyncd.conf
[root@web-bak ~]# cat /etc/rsyncd.conf
uid = rsync                                    #启动rsync进程的属主
gid = rsync                                    #启动rsync进程的属组
address = 192.168.8.142                        #监听IP,如果是多IP主机,则只能通过该IP访问
port = 9873                                    #监听端口,建议改高位端口,以免被占用,默认为873
hosts allow = 192.168.8.0/24               #允许同步的网段
use chroot = yes                           #用户不能切出指定的备份目录
max connections = 5                            #最大连接数
pid file = /var/run/rsyncd.pid             #指定存储进程号的文件
lock file = /var/run/rsyncd.lock           #指定锁定进程的文件
log file = /var/log/rsyncd.log             #指定日志存放文件
motd file = /etc/rsyncd.motd               #指定数据同步时的欢迎消息
list = yes                                 #是否允许查看模块信息
[web-bak]                                   #模块名,同步时需要和此处对应
path = /var/www/html                       #指定同步时存储到本地的路径
comment = web-bak                          #备注信息,自定义
read only = false                          #关闭只读
auth only = backuper                       #指定能同步的虚拟账户为backuper(非系统用户)
secrets file = /etc/rsyncd.passwd          #指定存储虚拟用户及其密码的文件
[root@web-bak ~]# echo "backuper:123" > /etc/rsyncd.passwd        #创建同步时的用户名和密码
[root@web-bak ~]# chmod 600 /etc/rsyncd.passwd                 #设定密码文件权限,只能设置600 或 700
[root@web-bak ~]# echo "it's backuping" > /etc/rsyncd.motd       #自定义同步时的欢迎消息
[root@web-bak ~]# rsync --daemon --config=/etc/rsyncd.conf        #--daemon为后台启动
# pkill -9 rsync && rm -rf /var/run/rsyncd.pid                  #此命令为关闭软件,如果不跟后面删除PID文件,下次启动会报错PID文件已存
[root@web-bak ~]# netstat -anput |grep rsync                   #查看是否运行正常,监听端接口信息
tcp        0      0 192.168.8.142:9873      0.0.0.0:*               LISTEN      3798/rsync

至此备份端已经配置启动完成,如果有防火墙和selinux,记得开对应的端口,这里就不多讲

主服务器(数据端)

[root@web ~]# yum -y install rsync
[root@web ~]# ls /var/www/html                                 #查看确认需要备份的目录
index.html
[root@web ~]# echo "123" > /etc/rsyncd.passwd                 #创建并写入,备份时需要的用户密码文件
[root@web ~]# chmod 600 /etc/rsyncd.passwd                     #给用户密码文件赋权
[root@web ~]# rsync -rlvz --delete /var/www/html/ backuper@192.168.8.142::web-bak --password-file=/etc/rsyncd.passwd --port 9873
it's backupingsending incremental file list
index.htmlsent 108 bytes  received 41 bytes  298.00 bytes/sec
total size is 13  speedup is 0.09

至此,主从服务器之间的免密传输已经完成

三.sersync的安装和配置

这是serync的64位下载地址,其他版本请自行搜索

主web端(数据端)

[root@web ~]# tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
[root@web ~]# mv GNU-Linux-x86/ /opt/sersync
[root@web ~]# cd /opt/sersync/
[root@web sersync]# cp confxml.xml confxml_web1.xml                        #根据模板创建配置文件,如果是多web的服务器,就要创建多个配置文件
[root@web sersync]# vim confxml_web1.xml                               #修改24~32行对应参数
...24         <localpath watch="/var/www/html">25             <remote ip="192.168.8.142" name="web-bak"/>26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->28         </localpath>29         <rsync>30             <commonParams params="-rluz"/>31             <auth start="true" users="backuper" passwordfile="/etc/rsyncd.passwd"/>32             <userDefinedPort start="true" port="9873"/><!-- port=874 -->
...
[root@web sersync]# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml_web1.xml  #运行sersync程序
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d  run as a daemon
option: -r  rsync all the local files to the remote servers before the sersync work
option: -o  config xml name:  /opt/sersync/confxml_web1.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is backuper
passwordfile is     /etc/rsyncd.passwd
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /var/www/html && rsync -rluz -R --delete ./  --port=9873 backuper@192.168.8.142::web-bak --password-file=/etc/rsyncd.passwd >/dev/null 2>&1
run the sersync:
watch path is: /var/www/html
[root@web sersync]# ps aux |grep sersync
root       3805  0.0  0.0  92324   716 ?        Ssl  18:56   0:00 /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml_web1.xml
root       3822  0.0  0.0 112704   960 pts/0    R+   18:57   0:00 grep --color=auto sersync
[root@web sersync]# touch /var/www/html/test.txt               #创建一个测试文件,看从web服务器是否同步过去

从web服务器(备份端)

[root@web-bak ~]# ls /var/www/html/                             #看到已经同步过来
index.html  test.txt

至此,sersync+rsync实时同步已经搭建完成

附件–编辑监控脚本

为了保证serysnc的随时运行,可以写一个监控sersync运行的脚本,利用任务计划,周期性的检查

主服务器(数据端)

[root@web ~]# vim check_sersync.sh
[root@web ~]# cat check_sersync.sh
#!/bin/bash
SERYNC="/opt/sersync/sersync2"
CONFFILE1="/opt/sersync/confxml_web1.xml"
STATUS=$(ps aux|grep 'confxml_web1.xml'|grep -v 'grep'|wc -l)          #备注一下,如果多目录需要备份的话,则需要通过筛选配置文件的方式,不要通过进程名称筛选
if [ $STATUS -eq 0 ];then$SERSYNC -d -r -o $CONFFILE
elseexit 0;

再提供一个多目录备份的脚本供大家参考

SERYNC="/opt/sersync/sersync2"
CONFFILE1="/opt/sersync/confxml_web1.xml"
CONFFILE2="/opt/sersync/confxml_web2.xml"
STATUS1=$(ps aux|grep 'confxml_web1.xml'|grep -v 'grep'|wc -l)
STATUS2=$(ps aux|grep 'confxml_web2.xml'|grep -v 'grep'|wc -l)
if [ $STATUS1 -eq 0 ];then$SERSYNC -d -r -o $CONFFILE1
elif [ $STATUS2 -eq 0  ];then$SERSYNC -d -r -o $CONFFILE2
elseexit 0;

将脚本写入计划任务
该任务计划意思是每小时的第一分钟运行一次脚本

[root@web ~]# echo "1 * * * * /usr/bin/sh /root/check_sersync.sh" > /var/spool/cron/root
[root@web ~]# crontab -l
1 * * * * /usr/bin/sh /root/check_sersync.sh

rsync+sersync实现两台web服务器的实时同步相关推荐

  1. 如何在多台web服务器上共享session?

    比如:现在有三台php服务器,且实现了负载均衡,如何让这三台web服务器共享session数据? session数据默认是以文件的形式保存在web服务器的磁盘上,一般都是用户登录成功的时候,保存ses ...

  2. 实验:基于keepalived实现两台realserver服务器中的nginx和php-fpm服务互为主从

    基于keepalived实现两台realserver服务器中的nginx和php-fpm服务互为主从 思路:利用两个VIP,一个定位nginx,一个定位php-fpm 步骤: 1.准备两台基于LNMP ...

  3. 两台服务器虚拟成一个ip,两台相同服务器ip怎么配置

    两台相同服务器ip怎么配置 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 排查 ...

  4. 多台web服务器之间共享session

    常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...

  5. 虚拟盘可以挂载多个服务器吗,两台云服务器挂载一个云硬盘吗

    两台云服务器挂载一个云硬盘吗 内容精选 换一换 共享云硬盘是一种支持多个云服务器并发读写访问的数据块级存储设备,具备多挂载点.高并发性.高性能.高可靠性等特点.主要应用于需要支持集群.HA(High ...

  6. ifle网页服务器,把iPad变成一台Web服务器.pdf

    把iPad变成一台Web服务器.pdf 数码生活 jI-川◇一凶il 一台Webgl夏务器 Store中眼花缭乱的应用几乎涵盖了所有用户的需求.不过.由于苹 如今,iPad被越来越多的人接受.App ...

  7. svn两台服务器同步文件,两台svn服务器定时同步

    两台svn服务器定时同步 内容精选 换一换 同一区域.不同可用区的两台裸金属服务器,如果在同一VPC,则内网互通,在同一VPC且同一子网时进行二层通信,在同一VPC不同子网时进行三层通信.通信时,两台 ...

  8. 两万字讲全数据实时同步方案

    kettle 插入更新 数据增量_两万字讲全数据实时同步方案(附代码及架构图)(建议收藏)..._陌念念的博客-CSDN博客 一.早期关系型数据库之间的数据同步 二.大数据时代下的数据同步 三.总结 ...

  9. Forbidden Attack:7万台web服务器陷入被攻击的险境

    一些受VISA HTTPS保护的站点,因为存在漏洞容易受到Forbidden攻击,有将近70,000台服务器处于危险之中. 一种被称为"Forbidden攻击"的新攻击技术揭露许多 ...

最新文章

  1. Docker核心技术之容器与镜像深入了解
  2. exp oracle所有数据库命令,oracle数据库exp命令
  3. SAP系统未清账和已清账的区分
  4. 我的世界服务器刷怪笼怎么修改,我的世界改造刷怪笼的方法,有三种方法介绍...
  5. 我的Go语言学习之旅七:创建一个GUI窗体
  6. 程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
  7. Redis的6种数据类型
  8. java 安卓权限_java – Android运行时权限 – 如何实现
  9. 浅谈C中的malloc和free\\感谢lj_860603,工作了,没时间验证了,觉得挺好的,转载了...
  10. 用编程语言和计算机沟通
  11. Hdu 1301 Jungle Roads (最小生成树)
  12. QT D:\搜狗输入法\SogouInput\Components\ 13:53:42: 程序异常结束。 13:53:42: T
  13. 解决:应用程序无法启动,因为应用程序的并行配置不正确
  14. qt信号发送间隔短而槽耗时多_Qt 信号和槽机制详解
  15. 超级节点的困境,社区治理的尴尬 |链捕手
  16. 【历史上的今天】7 月 10 日:iOS App Store 问世;台积电创始人出生;苹果手机越狱的起源
  17. 量化开发必掌握的30个知识点【什么是分笔逐笔数据】?
  18. 五分钟GO、KEGG和COG注释和富集分析
  19. 分分钟上手 VS Code
  20. 0-VMware Horizon 2203 虚拟桌面-目录大纲

热门文章

  1. TI 中 acos()函数 存在 bug
  2. 水果店经常让客户排队买水果,单店月入百万的顶尖商业模式揭秘!
  3. Sepolicy学习(一)
  4. iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?
  5. pro6 surface 进入安全_借来同事的Surface Pro6办公体验-大家都小瞧了Win10系统且操作逻辑竟然和苹果……...
  6. 小程序插件使用- 抽奖助手
  7. QQ自动化发情话给女朋友小程序
  8. Python-3.6 安装pycrypto 2.6
  9. 计算机病毒(Virus)是谁发明的?
  10. 【实验1:RT-Thread环境搭建+IIC光线传感器实验】