• readhat8搭建SFTP双机高可用并配置Rsync数据实时同步


    环境准备:

    • 主机

    host-61-118 : 192.168.61.118

    host-61-119:192.168.61.119

    vip:192.168.61.220

    • 检测openssh版本,版本必须大于4.8.p1,否则需要升级openssh版本
    [root@host-61-118 ~]# ssh -V
    OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
    
    • 关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    
    • 关闭SELinux
    setenforce 0
    sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
    

    环境搭建

    1️⃣ 两台服务器配置配置SFTP:

    1. 创建SFTP组
    # groupadd sftp
    2. 创建sftp用户,用户名为sftp,密码为mysftp
    # useradd -g sftp -s /bin/false mysftp
    # echo 'mysftp'|passwd --stdin myssftp
    3. 创建sftp数据存储目录sftp,并将mysftp默认目录指到该目录下
    # mkdir /sftp/mysftp -pv
    # usermod -d /sftp/mysftp mysftp
    4. 配置sshd_config,严格按照如下配置,否则重启sshd后,sftp可登录,但ssh远程登陆失败现象!
    # cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    ......
    Subsystem       sftp    internal-sftp
    Match Group sftp
    ChrootDirectory /sftp/%u
    ForceCommand    internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    ......
    5. 设置chroot目录权限
    # chown root:sftp /sftp/mysftp
    # chmod 755 /sftp/mysftp
    6. 建立SFTP用户登录后可写入的数据目录
    # 按照上述配置,ssh重启后用户mysftp已可登录,但是使用chroot指定根目录后,根目录是无法写入的,所以要新建一个目录供mysftp上传文件。该目录的所有者为mysftp,所有组为sftp,所有者有写权限,所有组无写权限
    # mkdir /sftp/mysftp/upload
    # chown mysftp:sftp /sftp/mysftp/upload
    # chmod 755 /sftp/mysftp/upload
    7. 重启sshd服务
    systemctl restart sshd
    8. 验证SFTP环境
    [root@host-61-118 ~]# sftp mysftp@host-61-118
    The authenticity of host 'host-61-118 (192.168.61.118)' can't be established.
    ECDSA key fingerprint is SHA256:kOHc1UsswEh7edXbzH8bSa6fLkPNn9IxkOmTvV7YWdY.
    ECDSA key fingerprint is MD5:04:a1:33:24:b9:cc:fb:33:58:05:a5:bb:7f:8f:e1:e0.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'host-61-118' (ECDSA) to the list of known hosts.
    mysftp@host-61-118's password: 
    Connected to host-61-118.
    sftp> ls
    upload  
    sftp> cd upload/
    sftp> ls
    9. 如果ssh是非22端口,比如是6666端口,则连接命令:sftp -o port=6666 mysftp@host-61-118
    
    

    2️⃣ host-61-119搭建rsync服务端,用作备份存储服务器

    1. 安装rsync
    yum install -y rsync
    2. 修改rsync配置文件,
    # 注意:uid 填写的是root,gid填写的是sftp,是因为/sftp
    [root@host-61-119 ~]# grep -Ev "^$|#" /etc/rsyncd.conf 
    uid = root
    gid = sftp
    use chroot = no
    max connections = 200
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    ignore errors
    list = false
    read only = false
    transfer logging = yes
    log file = /top/rsyncd.log
    auth users = rsync_user
    secrets file = /etc/syncd.passwd
    hosts allow = 10.111.61.118/24
    hosts deny = 0.0.0.0/24
    timeout = 900
    [sftp_backup]
           path = /sftp/mysftp
    3. 创建用户认证文件
    echo 'rsync_user:my_rsync' >/etc/syncd.passwd
    4. 设置文件访问权限
    chmod 600 /etc/rsyncd.conf
    chmod 600 /etc/syncd.passwd
    5. 重启rsync服务,并配置开机自启
    systemctl restart rsyncd.service
    systemctl enable rsyncd.service
    

    3️⃣ host-61-118 搭建rsync客户端,并配置sersync数据实时同步

    1. 安装rsync
    yum install -y rsync
    2. 创建rsync认证所需的密码文件
    [root@host-61-118 ~]# cat /etc/rsync.passwd 
    my_rsync
    3. 设置密码文件为600权限权限
    chmod 600 /etc/rsync.passwd
    4. 下载sersync,并配置环境变量
    tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
    # sersync目录只有两个文件:一个是二进制程序文件,一个是xml格式的配置文件
    [root@host-61-118 /opt]# tree GNU-Linux-x86/
    GNU-Linux-x86/
    ├── confxml.xml
    └── sersync2
    mv GNU-Linux-x86/sersync2 /bin/
    mv GNU-Linux-x86/confxml.xml /etc/
    
    5. 修改sersync配置文件
    [root@host-61-118 /opt]# cat /etc/confxml.xml 
    
    
        
        
        
        
        
        
    	
    	
    	
    	
        
        
        
    	
    	
    	
    	
    	
    	
        	
    	
    	
        
        
        
            
    	
            
    	    
    	    
    	    
    	
    	
        	    
    	    
                
    	    
    	    
    	    
    	    
    	    
    	    
    	
    	
    	
    	
    	
    	    
    	    
    		
    		
    	    
    	
    	
        
    
        
    		
    	
    	    
    	    
    	
        
    
        
    	
    	    
    	
        
        
    	
    	    
    	    
    	    
    	
        
    
    5. 查看sersync2 -h帮助
    [root@host-61-118 /opt]# sersync2 -h
    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
    _______________________________________________________
    参数-d:启用守护进程模式
    参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
    c参数-n: 指定开启守护线程的数量,默认为10个
    参数-o:指定配置文件,默认使用confxml.xml文件
    参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
    参数-m:单独启用其他模块,使用 -m socket 开启socket模块
    参数-m:单独启用其他模块,使用 -m http 开启http模块
    不加-m参数,则默认执行同步程序
    ______________________________________________________
    6. 以后台方式启动同步
    sersync2 -dro /usr/local/sersync/confxml.xml
    #sersync支持多实例,也即监控多个目录时,只需分别配置不同配置文件,然后使用sersync2指定对应配置文件运行
    [root@host-61-118 /opt]# sersync2 -rd -o /etc/sersync.d/nginx.xml
    7. 配置sersync开机自启动
    echo '/bin/sersync2 -dro /etc/confxml.xml' >>/etc/rc.local
    chmod +x /etc/rc.local
    #这样,host-61-118机器的/sftp/mysftp目录下的文件就会自动实时同步到host-61-119机器的/sftp/mysftp目录下
    # 注意:这是单向实时同步!如果要想做双向实时同步!那就需要在host-61-119机器上再启动一个sersync(同时,host-61-118也要做个rsyncd.conf文件)
    

    4️⃣ SFTP​结合keepalived做双机高可用

    1. 两台机器同时安装keepalived
    yum install -y keepalived
    # host-61-118 keepalived.conf 配置文件
    ! Configuration File for keepalived
    global_defs {
        router_id LVS_DEVEL
    }
    
    vrrp_script check_sshd {
        script "/etc/keepalived/check_sshd.sh" 
        interval 2 
        weight -5 
        fall 3  
        rise 2 
    }
    vrrp_instance VI_1 {
        state MASTER
        interface ens192
        mcast_src_ip 192.168.61.118
        virtual_router_id 220
        priority 100
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 1220
        }
        virtual_ipaddress {
            192.168.61.220/24
        }
        track_script {
           check_sshd
        }
    }
    # host-61-119 keepalived.conf 配置文件
    ! Configuration File for keepalived
    global_defs {
        router_id LVS_DEVEL
    }
    
    vrrp_script check_sshd {
        script "/etc/keepalived/check_sshd.sh" 
        interval 2 
        weight -5 
        fall 3  
        rise 2 
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface ens192
        mcast_src_ip 192.168.61.119
        virtual_router_id 220
        priority 70
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 1220
        }
        virtual_ipaddress {
            192.168.61.220/24
        }
        track_script {
           check_sshd
        }
    }
    2. 配置check_sshd.ssh检测脚本
    #!/bin/bash
    source /etc/profile
    if [ "$(/bin/systemctl is-active sshd)" != "active" ];then
      /bin/systemctl restart sshd
      sleep 5
      if [ "$(/bin/systemctl is-active sshd)" != "active" ];then
         /bin/systemctl restart keepalived 
      fi
    fi
    3. 启动keepalived,并配置开机自启动
    systemctl start keepalived.service
    systemctl enable keepalived.service
    4. 高可用测试:
    -> 先关闭host-61-118机器的Keepalived服务,发现vip资源就会自动漂到host-61-119机器上继续提供服务。
       当host-61-118机器的Keepalived服务恢复后,vip资源就会自动抢占回来。
    -> 关闭host-61-118机器的ssh服务,通过脚本会自动启动ssh服务,当启动失败后,会强制重启Keepalived服务,从而实现vip资源的漂移!
    

    5️⃣ ​测试实时同步

    [root@host-61-119 /opt]# sftp mysftp@host-61-220
    mysftp@host-61-220's password: 
    Connected to host-61-220.
    sftp> ls
    upload  
    sftp> cd upload/
    sftp> put MegaCli.tar.gz
    Uploading MegaCli.tar.gz to /upload/MegaCli.tar.gz
    MegaCli.tar.gz                                                                                       100% 2779KB  15.7MB/s   00:00    
    sftp> 
    
    [root@host-61-118 /sftp/mysftp]# stat upload/MegaCli.tar.gz 
      File: ‘upload/MegaCli.tar.gz’
      Size: 2845866   	Blocks: 5560       IO Block: 4096   regular file
    Device: 803h/2051d	Inode: 270248282   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (20001/  mysftp)   Gid: (20001/    sftp)
    Context: unconfined_u:object_r:default_t:s0
    Access: 2024-06-22 15:37:52.260541142 +0800
    Modify: 2024-06-22 15:37:42.106734109 +0800
    Change: 2024-06-22 15:37:42.106734109 +0800
     Birth: -
    [root@host-61-119 /sftp/mysftp]# stat upload/MegaCli.tar.gz
      File: ‘upload/MegaCli.tar.gz’
      Size: 2845866   	Blocks: 5560       IO Block: 4096   regular file
    Device: 803h/2051d	Inode: 404149882   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (20001/  mysftp)   Gid: (20001/    sftp)
    Access: 2024-06-22 15:37:52.372865018 +0800
    Modify: 2024-06-22 15:37:42.106734109 +0800
    Change: 2024-06-22 15:37:52.372865018 +0800
     Birth: -
    
    
    
  • 相关阅读:
    JS删除对象的某个属性
    【SimpleFunction系列一】SpringBoot整合Redis(含序列化问题)
    dotnet 8 preview 1 即将发布
    vue3+vite+ts 发布自定义组件到npm
    Day 40 Web容器-Tomcat
    自动驾驶,是“平视”还是“俯视”?
    文档管理系统:攻克这3个痛点,解决80%企业文档管理难题
    【图像处理】【应用程序设计】加载,编辑和保存图像数据、图像分割、色度键控研究(Matlab代码实现)
    Vue-单文件组件使用说明
    【ARK UI】HarmonyOS ETS如何创建PixeMap并显示Image组件上
  • 原文地址:https://www.cnblogs.com/baixisuozai/p/18262404