天天看点

rsync+sersync实现两台web服务器的实时同步一.环境准备二.分别安装配置rsync,并测试手动免密备份三.sersync的安装和配置附件–编辑监控脚本

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

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

一.环境准备

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

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:9f:3d:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.141/24 brd 192.168.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::64db:1934:758e:9922/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

           

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

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:12:08:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.142/24 brd 192.168.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::a3f3:eac0:1517:cf2/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::64db:1934:758e:9922/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

           

分别安装apache,并测试正常

主服务器:

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

从服务器:

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

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

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

rsync是一个开源的文件同步软件,主要工作在linux,但是有跨windows平台的cwrsync.

主要同步方式为推和拉两种:

推,顾名思义,是作为数据产生端主动把需要同步的数据推送给备份端,这种方式主要用于和sersync搭配,实现实时自动同步数据,比如主从web服务器(本文主讲)

拉,一般是指数据备份端去拉,数据产生端数据,一般用于,周期性的同步(通过任务计划),数据同步即时性要求不是很高的场景

从服务器(备份端):

[[email protected] ~]# yum -y install rsync
[[email protected] ~]# useradd -M -s /sbin/nologin/ rsync			#创建一个不能登陆,没有家目录的本地用户rsync,用于运行rsync进程
[[email protected] ~]# chown rsync:rsync -R /var/www/html			#将备份目录,也是从web服务器的web目录的属主和属组改为rsync,此步不做,同步会报错
[[email protected] ~]# vim /etc/rsyncd.conf
[[email protected] ~]# 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			#指定存储虚拟用户及其密码的文件
[[email protected] ~]# echo "backuper:123" > /etc/rsyncd.passwd     	#创建同步时的用户名和密码
[[email protected] ~]# chmod 600 /etc/rsyncd.passwd					#设定密码文件权限,只能设置600 或 700
[[email protected] ~]# echo "it's backuping" > /etc/rsyncd.motd     	#自定义同步时的欢迎消息
[[email protected] ~]# rsync --daemon --config=/etc/rsyncd.conf		#--daemon为后台启动
# pkill -9 rsync && rm -rf /var/run/rsyncd.pid					#此命令为关闭软件,如果不跟后面删除PID文件,下次启动会报错PID文件已存
[[email protected] ~]# netstat -anput |grep rsync					#查看是否运行正常,监听端接口信息
tcp        0      0 192.168.8.142:9873      0.0.0.0:*               LISTEN      3798/rsync
           

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

主服务器(数据端)

[[email protected] ~]# yum -y install rsync
[[email protected] ~]# ls /var/www/html									#查看确认需要备份的目录
index.html
[[email protected] ~]# echo "123" > /etc/rsyncd.passwd				    #创建并写入,备份时需要的用户密码文件
[[email protected] ~]# chmod 600 /etc/rsyncd.passwd						#给用户密码文件赋权
[[email protected] ~]# rsync -rlvz --delete /var/www/html/ [email protected]::web-bak --password-file=/etc/rsyncd.passwd --port 9873
it's backuping

sending incremental file list
index.html

sent 108 bytes  received 41 bytes  298.00 bytes/sec
total size is 13  speedup is 0.09
           

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

三.sersync的安装和配置

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

主web端(数据端)

[[email protected] ~]# tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz 
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
[[email protected] ~]# mv GNU-Linux-x86/ /opt/sersync
[[email protected] ~]# cd /opt/sersync/
[[email protected] sersync]# cp confxml.xml confxml_web1.xml						#根据模板创建配置文件,如果是多web的服务器,就要创建多个配置文件
[[email protected] 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 -->
...
[[email protected] 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 [email protected]::web-bak --password-file=/etc/rsyncd.passwd >/dev/null 2>&1 
run the sersync: 
watch path is: /var/www/html
[[email protected] 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
[[email protected] sersync]# touch /var/www/html/test.txt				#创建一个测试文件,看从web服务器是否同步过去
           

从web服务器(备份端)

[[email protected] ~]# ls /var/www/html/								#看到已经同步过来
index.html  test.txt
           

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

附件–编辑监控脚本

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

主服务器(数据端)

[[email protected] ~]# vim check_sersync.sh
[[email protected] ~]# 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
else
	exit 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
else
        exit 0;
           

将脚本写入计划任务

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

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

继续阅读