图片服务器同步实例

10.245.6.5410.245.6.53从1  
10.245.6.52 从2
想实时同步54/eshop/eshopres/目录下的文件或目录
1、检测分发服务器系统是否满足需求,要求内核大于2.3
uname -r #查看系统内核
ll /proc/sys/fs/inotify/

如图则满足需求。
2、在分发服务器下载最新版并编译安装
54需要安装:
inotify-tools-3.14.tar.gz
cd  #回到用户目录
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  #下载最新版
tar zxvf inotify-tools-3.14.tar.gz  #解压到当前目录
cd inotify-tools-3.14 #进入目录
./configure --prefix=/alidata/server/inotify/ #编译配置,这里是指定位置(你的文件目录)
make #编译
make install #安装
make clean #从源文件夹清除二进制对象等
cd /alidata/server/inotify/bin
./inotifywait --help  #查看是否安装完成一般有错误上面几个步骤会有提示
./inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib /alidata/tmp/ #m是开启监测,r递归目录,/alidata/tmp监测的目录
touch /alidata/tmp/test1 #新开个tty创建个文件会有如下图输出<br><br>
#为方便使用可以选择设置
#设置系统环境变量,添加软连接
#echo "PATH=$PATH:/alidata/server/inotify/bin" >>/etc/profile.d/inotify.sh
#source /etc/profile.d/inotify.sh #使设置立即生效
#echo "/alidata/server/inotify/lib" >/etc/ld.so.conf.d/inotify.conf && ldconfig
#ln -s /alidata/server/inotify/include /usr/include/inotify

 正式配置:
#!/bin/bash
SRCDIR=/eshop/eshopres/
USER=backup
DESTDIR=eshopres
excludedir=/usr/local/inotify/exclude.list
rsyncpass=/eshop/rsync/rsyncd.passwd
dstip="10.245.6.53 10.245.6.52"
dstip1=10.245.6.53
dstip2=10.245.6.52

datelog=`date -d today +"%Y-%m-%d"`
dirpath = \\eshop\\rsync\\
filelogName=${dirpath}sync${datelog}.log
echo ${filelogName}
echo "the file name is $filelogName"
if [ ! -f $filelogName ];then
touch $filelogName
echo ${filelogName}' create ok.'
else
echo file exist
fi

/alidata/server/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read file

do
for ip in $dstip
do
/eshop/rsync/bin/rsync -avH --port=873 --progress --delete-before --exclude-from=$excludedir $SRCDIR $USER@$ip::$DESTDIR --password-file=$rsyncpass
#echo " ${file} was rsynced " >> /eshop/rsync/rsync.log 2>&1

#/eshop/rsync/bin/rsync -avH --port=873 --progress --delete-before --exclude-from=$excludedir $SRCDIR $USER@$dstip1::$DESTDIR --password-file=$rsyncpass &
#/eshop/rsync/bin/rsync -avH --port=873 --progress --delete-before --exclude-from=$excludedir $SRCDIR $USER@$dstip2::$DESTDIR --password-file=$rsyncpass
#echo " ${file} was rsynced " >> /eshop/rsync/rsync.log 2>&1
echo " ${file} was rsynced " >> $filelogName 2>&1
done
done

至此已经可以检测到分发服务器文件改动了。
在对一个大磁盘进行inotify监听时,爆出如下错误:
Failed to watch /mnt/;
upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches’.
cat一下这个文件,默认值是8192,
echo 8192000 > /proc/sys/fs/inotify/max_user_watches
即可~

3、编译安装rsync到内容分发服务器在这里充当客户端的角色
rsync-3.1.3.tar.gz
wget https://download.samba.org/pub/rsync/src/rs
tar zxvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
 ./configure  --prefix=/alidata/server/rsync
 ./configure --prefix=/eshop/rsync
make
make install
 接下来就是文件同步,检测到文件变动后主动向目标服务器推送,详情后面说。
4、编译安装rsync到目标服务器并启用服务
添加主配置文件:
vim /etc/rsyncd.conf
uid = root
gid = root
port = 873
use chroot = no
hosts allow = *
max connections = 3
motd file = /alidata/passwd/rsync/rsyncd.motd #问候语
pid file = /alidata/server/rsync/rsyncd.pid
lock file = /alidata/server/rsync/rsync.lock
log file = /alidata/log/rsync/rsyncd.log
transfer logging = yes #传输日志
ignore errors #忽略错误
 
[netho]
path = /alidata/tmp/rsynctest #同步路径
auth users = netho  #使用用户必须是服务器真实用户
secrets file = /alidata/passwd/rsync/rsyncd.pass #用户认证文件
list = no
read only = no #只读
建立认证文件,我使用的是apache的认证工具生成的密码复杂一点嘛(嫌麻烦直接手动输入echo woshimima >/alidata/passwd/rsync/rsyncd.pass)
mkdir -p /alidata/passwd/rsycn
htpasswd -cb /alidata/passwd/rsync/rsyncd.pass netho Netho123456789<br>chmod 600 /alidata/passwd/rsync/rsyncd.pass    #为什么要这一步呢?和strict modes =yes/no有关系么,没时间实验了,擦
设定rsyncd.motd 文件;
vim /alidata/passwd/rsync/rsyncd.motd
复制以下代码
++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the  rsync services!
         2018------2099
++++++++++++++++++++++++++++++++++++++++++++++
正式配置:
uid = ftp
gid = ftp
use chroot = no
max connections = 36000
strict modes = yes
hosts allow = 10.245.6.0/24 #配置主机ip可以空格,允许多个
hosts deny = 0.0.0.0/32
port = 873
pid file = /eshop/rsync/rsyncd.pid
lock file = /eshop/rsync/rsync.lock
log file = /eshop/rsync/rsyncd.log
[eshop]
#test为模块名称后续同步会用到
path = /home/test
ignore errors
#read only = false #此目录需要读写全部权限
read only = no
list = false
auth users = backup
secrets file = /eshop/rsync/rsyncd.passwd
ignore errors = no
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.

启动rsync服务:
cd /eshop/rsync/bin
./rsync  --daemon --config=/eshop/rsync/rsyncd.conf &
打开指定端口
 ufw allow 873/tcp
测试链接
ps -ef |grep rsync #进程
netstat -anop | grep rsync #端口信息
./rsync -rdt rsync://127.0.0.1:873/ #看到下图我们设置的欢迎信息(mot)说明启动成功服务正常

 
为了方便我们使用脚本来管理将其加入service
touch /etc/init.d/rsyncd
chmod +x /etc/init.d/rsyncd
vim /etc/init.d/rsyncd
复制以下代码 :
#!/bin/bash
# description: rsync server
# processname: rsyncd
status1=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
pidfile="/alidata/server/rsync/rsyncd.pid"
rsync="/alidata/server/rsync/bin/rsync"
start_rsync="${rsync} --daemon --config=/etc/rsyncd.conf"
function rsyncstart() {
    if [ "${status1}X" == "X" ];then
        ${start_rsync}   
        status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')    
        if [  "${status2}X" != "X"  ];then     
            echo "rsync service start.......OK"         
        fi
    else
        echo "rsync service is running !"   
    fi
}
  
function rsyncstop() {
  
    if [ "${status1}X" != "X" ];then
        kill -9 $(cat $pidfile)
        rm -f $pidfile
        status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')
        if [ "${statusw2}X" == "X" ];then
            echo "rsync service stop.......OK"
        fi
    else
        echo "rsync service is not running !"   
    fi
}
  
  
function rsyncstatus() {
    if [ "${status1}X" != "X" ];then
        echo "rsync service is running !"  
    else
        echo "rsync service is not running !" 
    fi
}
  
function rsyncrestart() {
    if [ "${status1}X" == "X" ];then
          echo "rsync service is not running..."
          rsyncstart
      else
          rsyncstop
          rsync --daemon --config=/usr/local/server/rsync/etc/rsyncd.conf
          status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep')         
        if [  "${status2}X" != "X"  ];then             
            echo "rsync service start.......OK"      
        else
            echo "rsync service is not running !"
        fi
    fi 
} 
  
case "$1" in
  
        "start")
               rsyncstart
                ;;
  
        "stop")
               rsyncstop
                ;;
  
        "status")
               rsyncstatus
               ;;
  
        "restart")
               rsyncrestart
               ;;
  
        *)
          echo
                echo  "Usage: $0 start|stop|restart|status"
          echo
esac
exit 0

设置开机启动
echo "/etc/init.d/rsyncd start" >>/etc/rc.local

5、目标服务器配好以后,在内容分发服务器上编写监控文件变化启动同步的脚本rstnc-inotify.sh
53、52需要安装
rsync-3.1.3.tar.gz
wget https://download.samba.org/pub/rsync/src/rs
tar zxvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
 ./configure  --prefix=/alidata/server/rsync
make
make install

chmod +x ./rsync-inotify.sh #赋予执行权限
./rsync-inotify.sh & #后台执行<br>
echo  "/alidata/netho/rsync-inotify.sh &">>/etc/rc.local
为防止脚本出现问题设置定时方案
crontab -e * */2 * * * rsync -avz --password-file=你的路径 /同步路径/ user@ip::方括号里的名称

正式配置:
uid = root
gid = root
use chroot = no
max connections = 200
strict modes = yes
hosts allow = 10.245.6.54/24 #配置主机ip可以空格,允许多个
#hosts deny = 0.0.0.0/32 #禁止IP,可设置多个,用英文逗号隔开
port = 873
motd file = /eshop/rsync/rsyncd.motd
pid file = /eshop/rsync/rsyncd.pid
lock file = /eshop/rsync/rsync.lock
log file = /eshop/rsync/rsyncd.log
[eshopres] #eshop为模块名称后续同步会用到
path = /eshop/eshopres
comment=eshopres #模块名称与[eshop]自定义名称相同
ignore errors
#read only = false #此目录需要读写全部权限
read only = no
list = yes
auth users = backup
secrets file = /eshop/rsync/rsyncd.passwd
ignore errors = no
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.


开放端口的方法:
方法一:命令行方式
               1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
               2.保存:/etc/rc.d/init.d/iptables save
               3.重启服务:/etc/init.d/iptables restart
               4.查看端口是否开放:/sbin/iptables -L -n
    
 方法二:直接编辑/etc/sysconfig/iptables文件
               1.编辑/etc/sysconfig/iptables文件:vi /etc/sysconfig/iptables
                   加入内容并保存:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
               2.重启服务:/etc/init.d/iptables restart
               3.查看端口是否开放:/sbin/iptables -L -n
但是我用方法一一直保存不上,查阅网上发现直接修改文件不需要iptables save,重启下iptables 重新加载下配置。iptables save 是将当前的iptables写入到/etc/sysconfig/iptables。我不save直接restart也不行,所以还是方法二吧

查询端口是否有进程守护用如下命令grep对应端口,如80为端口号
例:netstat -nalp|grep 80

 

posted @ 2019-02-18 17:21  wangwiz  阅读(583)  评论(0)    收藏  举报