环境准备:

  • 主机

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
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<!--是否开启debug调试-->
<debug start="false"/>
<fileSystem xfs="false"/>
<!--不开启文件过滤功能,当为true时,以下类型的文件将不同步-->
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<!--监控事件,默认监控delete/close_write/moved_from/moved_to/create folder-->
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<!--修改此行为true,文件属性变化后也会同步-->
<attrib start="true"/>
<modify start="false"/>
</inotify>
<!--rsync的命令配置段-->
<sersync>
<!--需要同步的源目录或文件,建议同步目录-->
<localpath watch="/sftp/mysftp">
<!--# 指定备份服务器地址和rsync daemon的模块名,如果下面开启了ssh start,此时name为远程shell方式运行时的目标目录-->
<remote ip="192.168.61.119" name="sftp_backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<!-- 指定rsync的选项:
-a 归档模式,表示递归传输并保持文件属性。
-r 归档模式,表示递归传输并保持文件属性。
-t 保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效。
-u 仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为
-z 传输时进行压缩提高效率
-->
<commonParams params="-artuz"/>
<!--修改为true,指定备份服务器的rsync配置的用户和密码文件-->
<auth start="true" users="rsync_user" passwordfile="/etc/rsync.passwd"/>
<!--指定rsync的非标准端口号-->
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<!--默认使用rsync daemon运行rsync命令,true为使用远程shell模式-->
<ssh start="false"/>
</rsync>
<!--#错误重传及日志文件路径-->
<failLog path="/tmp/rsync_fail_log.log" timeToExecute="60"/><!--default every 60mins execute once-->
<!--不开启crontab功能-->
<crontab start="false" schedule="600"><!--600mins-->
<!--不开启crontab定时传输的筛选功能-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
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: -

readhat8搭建SFTP双机高可用并配置Rsync数据实时同步的更多相关文章

  1. 配置rsync+inotify实时同步

    与上一篇同步做 配置rsync+inotify实时同步 1:调整inotify内核参数 在linux内核中,默认的inotify机制提供三个调控参数:max_queue_events.max_user ...

  2. Centos下SFTP双机高可用环境部署记录

    SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...

  3. 【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

    架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由kee ...

  4. 双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

    前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由ke ...

  5. 搭建 RabbitMQ Server 高可用集群

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  6. 搭建 RabbitMQ Server 高可用集群【转】

    阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...

  7. Jumpserver双机高可用环境部署笔记

    之前在IDC部署了Jumpserver堡垒机环境,作为登陆线上服务器的统一入口.后面运行一段时间后,发现Jumpserver服务器的CPU负载使用率高达80%以上,主要是python程序对CPU的消耗 ...

  8. Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用

    前言 之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用 ...

  9. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  10. centos7搭建hadoop2.10高可用(HA)

    本篇介绍在centos7中搭建hadoop2.10高可用集群,首先准备6台机器:2台nn(namenode);4台dn(datanode):3台jns(journalnodes) IP hostnam ...

随机推荐

  1. [ELK] Elasticsearch 安装/配置、启动/停止、加节点/重启

    Elasticsearch 在不同环境上支持的安装方式很多,有源码安装.二进制安装.docker安装.rpm包等管理器安装. 具体的,根据应用的实际情况选择即可. 完成可测试开发环境的建立后,需要进一 ...

  2. 🎉号外号外!OpenTiny 将在HDC华为开发者大会正式发布!

    华为开发者大会2023(HDC.Cloud 2023)将于7月7日-9日在东莞拉开帷幕,本届大会以"每一个开发者都了不起"为主题,同时在全球10余个国家以及中国30多个城市设有分会 ...

  3. 超级好用的 HBase GUI 工具分享

    超级好用的 HBase GUI 工具分享 你是否曾为 HBase 数据管理而苦恼?别担心,这一款超级好用的 HBase GUI (HBase Assistant)工具,让您在大数据世界中游刃有余.不再 ...

  4. LabView中使用VISA设备清零时,会发送00

    最近有为小伙伴跟我说他使用串口的时候通信遇到了问题,我看到他的在程序循环中使用了VISA设备清零控件,出于好奇我就复现了一下,发现每次调用VISA设备清零控件的时候,会主动向串口中发送00数据 一.测 ...

  5. VueJS和Javascript实现文字上下滚动效果

    一提到文字上下滚动,我们就会想到用不同的程序去实现,而且页面中有文字滚动会增加这个网页的互动和可信度. 1.Js最简单的方法是控制盒子的高度,使不断的重复添加 <html> <bod ...

  6. cesium教程9-加载倾斜摄影并解决高度问题

    无人机航拍的倾斜摄影,用照片和视频处理生成三维模型,一般照片都带有坐标信息,所以一般都能定位的比较准确,但是经常会出现高度偏差,这个时候就需要特殊处理了. 今天航拍建模的效果如下: 这个建模没有裁剪, ...

  7. flex布局方案

    参考:https://blog.csdn.net/weixin_39717076/article/details/82586915

  8. 【题解】[NOIP2001 普及组] 装箱问题

    [NOIP2001 普及组] 装箱问题 这是一道动态规划题. 那就先定义状态吧(这里用的是一维滚动数组). \(f[j]\) 代表当我有 \(j\) 这么多容量可以用时,能装的最大重量是多少. 好,状 ...

  9. uniapp微信小程序uni.request捕获500异常

    通常使用ajax,axios等进行服务请求,500错误或者其他的错误都会直接进入到错误通道里头,比如ajax异常的话会进入到error的回调函数里头,axios异常会进行到catch里头,一开始以为u ...

  10. 使用 Python 旋转PDF页面、或调整PDF页面顺序

    在将纸质文档扫描成PDF电子文档时,有时可能会出现页面方向翻转或者页面顺序混乱的情况.为了确保更好地浏览和查看PDF文件,本文将分享一个使用Python来旋转PDF页面或者调整PDF页面顺序的解决方案 ...