vsftp+rsync+notify+nginx

简介

vsftp 用作文件存储服务器

rsync+notify 用作文件实时同步工具,(rsync—文件同步工具,notify—监控文件变化)

      Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件

nginx用作灾备工具

      使用backup功能:backup参数 ,backup 不能和ip_hash一起使用,backup 参数是指当所有非备机都宕机或者不可用的情况下,就只能使用带backup标准的备机

vsftp

安装

#yum  install  vsftpd
#systemctl  enable  vsftpd
#systemctl  start  vsftpd

修改配置文件

/etc/vsftpd/vsftpd.conf

anonymous_enable=NO            ###关闭匿名用户登录

listen=YES

listen_ipv6=NO

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

max_clients=1000

max_per_ip=1000

use_localtime=YES

reverse_lookup_enable=NO

#需要代理转发ftp请求加入以下配置

pasv_enable=YES                                   ###开启被动模式

pasv_min_port=10000                            ###被动模式端口(起始端口)主备两台分别设置不同端口

pasv_max_port=10009                           ###被动模式端口(末至端口)主备两台分别设置不同端口

pasv_address=192.168.12.8                   ###proxy代理IP(nginx主机 IP)

添加本地用户用作 ftp 登录

指定 ftp-user 的uid 1009

#useradd -u 1009 -g root -d /filesec/ftp-user  ftp-user

修改密码

#echo "ftp-user:Hdlh@123"|chpasswd

      “ftp-user:Hdlh@123”:”用户名:密码”

#echo "Hdlh@123"|passwd --stdin "ftp-user"

      “Hdlh@123”:密码

      “ftp-user”:用户名

rsync+notify

单向同步(rsync):主服务器启动rsyncd后台程序,由备份服务器执行同步命令

实时同步(rsync+inotify):备份服务器启动rsyncd后台程序,由主服务器执行inotify脚本实时检测本地目录,再执行同步命令。

双向同步:两台服务器都安装rsync+inotify;两台服务器创建认证文件(secrets file = /etc/rsyncd.passwd),两台备份服务器创建单独密码文件(--password-file=/hdfs/project/rsync/rsyncd.passwd)

rsync

安装
#yum install -y rsync

配置文件

配置文件不能包含 # 注释

(主文件端

/etc/rsyncd.conf

uid = ftp-user                 #设置运行rsync 进程的用户

gid = root

use chroot = no            #使用默认根目录

max connections = 200        #最大连接数

#pid file = /var/run/rsyncd.pid        #CentOS7中yum安装 不需指定pid file 否则报错

lock file = /hdfs/project/rsync/rsyncd.lock       #指定支持 max connections 参数的锁文件

log file = /hdfs/project/rsync/rsyncd.log         #此文件定义完成后 系统会自动创建

transfer logging = yes             #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中

timeout = 180   #通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。

ignore nonreadable = yes           #同步时跳过没有权限的目录

dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2          #传输时不压缩的文件

 [ftp]                          #此名字即客户端使用rsync来同步的路径

path = /hdfs/project/ftp                #实际需要同步的路径

ignore errors = yes     #指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题

read only = no         #表示可以pull

#write only = no         #表示不可以push

hosts allow = 192.168.2.102        #客户端同步的地址多个 , 隔开

hosts deny = *   #指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

list = false     #该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。

#uid = ftp-user       #获取文件的身份

#gid = root

auth users = ftp-user  #客户端获取文件的身份 此用户并不是本机中确实存在的用户

secrets file = /etc/rsyncd.passwd   #用来认证客户端的秘钥文件 格式 USERNAME:PASSWD 此文件权限一定改为600,且属主必须与运行rsync的用户一致。(需自行创建)

创建认证用户及密码文件

(对应配置文件中的参数 secrets file)

#vim  /etc/rsyncd.passwd
      ftp-user:Hdlh@123

#chmod  600  /etc/rsyncd.passwd

启动并后台运行

#rsync --daemon

#systemctl start rsyncd
#systemctl enable rsyncd

备份服务器配置

安装
#yum  install  rsync  -y
认证用户及密码文件

(用来认证主服务器主机密码)

(只需要补充密码字段即可)

#echo  “${passwd}”  >> /hdfs/project/rsync/rsyncd.passwd

对应主服务器用户ftp-user的密码

修改权限
#chmod  600  /hdfs/project/rsync/rsyncd.passwd
文件传输
#rsync -avz --progress --password-file=/hdfs/project/rsync/rsyncd.passwd ftp-user@192.168.2.122::ftp /rsync/

命令参数详解

  -v, –verbose 详细模式输出

  -z, –compress 对备份的文件在传输时进行压缩处理

  -r, –recursive 对子目录以递归模式处理

  -t, –times 保持文件时间信息

  -o, –owner 保持文件属主信息

  -p, –perms 保持文件权限

  -g, –group 保持文件属组信息

  –-progress 显示传输进度

  --delete 删除客户端多余文件

       --password-file=/etc/rsyncd.passwd  ftp-user@192.168.2.122::test

       password-file=/etc/rsyncd.passwd:用来登录主服务器主机密码

       ftp-user:登录主机用户

       192.168.2.122:主服务器主机 IP

       ftp:主服务器配置文件中的模块名称

       /rsync/:备份服务器本地存储目录

notify

主服务器

查看服务器内核是否支持 inotify

#ll /proc/sys/fs/inotify/

max_user_watches                #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances               #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events             #设置inotify实例事件(event)队列可容纳的事件数量

Inotify 可以监视的文件系统事件包括:

access,即文件被访问

modify,文件被 write

attrib,文件属性被修改,如 chmod、chown、touch 等

close_write,可写文件被 close

close_nowrite,不可写文件被 close

open,文件被 open

moved_from,文件被移走,如 mv

moved_to,文件被移来,如 mv、cp

create,创建新文件

delete,文件被删除,如 rm

delete_self,自删除,即一个可执行文件在执行时删除自己

move_self,自移动,即一个可执行文件在执行时移动自己

unmount,宿主文件系统被 umount

close,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

move,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

安装
#rpm -ivh inotify-tools-3.14-9.el7.x86_64.rpm

脚本

/hdfs/project/rsync/inotify.sh

host=192.168.2.102                                  #备份服务器
src=/hdfs/project/ftp/                              #主文件端的目录,后面一定加上 / ,只同步目录下的所有递归,不加 / ,会同步整个目录,
des=ftp                                                      #主服务器rsyncd.conf配置参数
password=/etc/rsyncd.passwd                 #主服务器登录验证密码
user=ftp-user                                           #用户
inotifywait=/usr/bin/inotifywait               #命令
log=/hdfs/project/rsync/inotify.log         #日志文件


$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files;do

    rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des

    echo "${files} was rsynced" >> ${log} 2>&1

done


#--delete参数:表示rsync同步前,暴力删除目标目录中的所有文件,然后再执行同步操作。
#--delete-before参数:表示rsync同步前,会先对目标目录进行一次扫描检索,删除目标目录中对比源目录多出来的文件,在执行同步

启动脚本

#nohup bash inotify.sh &

#nohup command & :后台运行,关掉终端程序不会停止,还会继续运行

设置开机自启

/etc/rc.d/rc.local

nohup /bin/bash /hdfs/project/rsync/inotify.sh

Nginx

依赖

#yum  install  make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel pcre

安装

#./configure --prefix=/hdfs/project/nginx --user=ftp-user --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_realip_module --with-stream --with-stream_realip_module

#make  && make install

配置文件

user  ftp-user;

worker_processes  1;

error_log  logs/error.log;

pid        nginx.pid;

worker_rlimit_nofile  51200;

events {

    use epoll;

    worker_connections  10240;

}

#http {

#    include       mime.types;

#    include       /hdfs/project/nginx/conf/conf.d/*.conf;

#    default_type  application/octet-stream;

#

#    log_format  real_ip  '$remote_addr - $remote_user [$time_local] "$request" '

#                 '$status $body_bytes_sent "$http_referer" '

#                 '"$http_user_agent" "$http_x_forwarded_for"';

#

#    #access_log  logs/access.log  main;

#

#    server_tokens   off;

#    sendfile        on;

#    tcp_nopush     on;

#    tcp_nodelay    on;

#

#    client_max_body_size  500M;

#    client_header_buffer_size  128K;

#    large_client_header_buffers  4  32k;

#

#    keepalive_timeout  300;

#    send_timeout   60;

#

#    gzip  on;

#}

stream  {

    log_format proxy '$proxy_protocol_addr $remote_addr [$time_local] '

                 '$protocol $status $bytes_sent $bytes_received '

                 '$session_time "$upstream_addr" '

                '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    upstream  vsftp{

        server  192.168.2.122:21 weight=99  max_fails=3  fail_timeout=30s;

#        server  192.168.2.102:21 weight=99;

        server  192.168.2.102:21  backup;

    }

#max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复

#backup参数 ,backup 不能和ip_hash一起使用,backup 参数是指当所有非备机都宕机或者不可用的情况下,就只能使用带backup标准的备机

    server {

        listen       21;

        access_log  logs/access-test.log proxy;

        proxy_pass  vsftp;

#        proxy_protocol on;

}

#以下为被动模式端口的转发

#注意端口的一一对应关系(vsftpd.conf配置)

    server {

        listen       192.168.12.8:10000;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10000;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10001;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10001;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10002;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10002;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10003;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10003;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10004;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10004;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10005;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10005;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10006;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10006;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10007;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10007;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10008;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10008;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10009;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.122:10009;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10010;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10010;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10011;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10011;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10012;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10012;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10013;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10013;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10014;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10014;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10015;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10015;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10016;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10016;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10017;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10017;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10018;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10018;

#        proxy_protocol on;

    }

    server {

        listen       192.168.12.8:10019;

        access_log  logs/access-test.log proxy;

        proxy_pass  192.168.2.102:10019;

#        proxy_protocol on;

    }

}

环境变量

#vim  /etc/profile.d/nginx.sh
    export  NGINX_HOME=/tools/nginx
    export  PATH=$NGINX_HOME/sbin:$PATH


#chmod  +x /etc/profile.d/nginx.sh
#source /etc/profile.d/nginx.sh

启动

#nginx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值