目录
一.故事背景
网络服务最后的内容,一个是SSH外带管理,一个是Rsync+sersync实现数据实时同步,其中用的最多的是后者,也要写一个相关脚本
二.SSH带外管理
1.概述
ssh服务,一种远程管理连接工具,在CentOS7系统中默认安装并开机自启的。
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能。
监听tcp的22号端口。软件包名称:openssh
配置文件目录:/etc/ssh,sshd_config 服务端配置文件;ssh_config 客户端配置文件。
客户端提供:ssh、scp、sftp命令
服务端提供:sftp服务、ssh服务
2. 配置文件
服务端配置文件: sshd_config
部分内容解析
Port 22 #监听端口
AddressFamily any #ip地址版本
ListenAddress 0.0.0.0 #监听地址,ipv4
ListenAddress :: #监听地址,ipv6
PermitRootLogin yes #是否允许root用户登录
MaxAuthTries 6 #重新连接最大次数
MaxSessions 10 #建立不同用户的会话的最大个数
PubkeyAuthentication yes #是否启用公钥对验证登录
AuthorizedKeysFile .ssh/authorized_keys #存储客户端公钥信息的文件
PasswordAuthentication yes #是否启用密码验证登录
PermitEmptyPasswords no #是否允许空密码登录
UsePAM yes #启用系统用户及密码进行验证登录
UseDNS no #是否启用ssh内部的解析,会影响连接速度
客户端配置文件: ssh_config,设置ssh命令连接的关键配置
Port 22 #设置ssh命令连接的默认端口
3.命令解析
远程登录命令:
ssh [选项] [username@]ssh服务器的监听IP地址或者主机名(使用主机名时,保证客户端能够解析主机名)
-p port 指定连接服务器的监听端口
远程拷贝命令:
scp 本机的文件路径 [username@]ssh服务器的监听IP地址或者主机名:/远程主机存储路径
scp [username@]ssh服务器的监听IP地址或者主机名:/远程主机存储路径 本机的文件路径
sftp服务登录命令:
sftp [选项] [username@]ssh服务器的监听IP地址或者主机名(使用主机名时,保证客户端能够解析主机名)
4.登录方式配置
a.用户名密码登录
默认方式,直接输入登录
b.公钥验证登录
概念 | 解析 |
---|---|
对称加密 | 双方采用相同的秘钥,安全性较低 |
非对称加密 | 双方采用不同的秘钥,安全性较高 |
公钥 | 大家都可以知道的秘钥。 |
私钥 | 只有自己知道的秘钥。能够证明自己的身份信息 |
数据加密:
使用对端的公钥加密,接收端收到数据后,使用自己的私钥解密。作用是保证数据完整性。
数字签名:
私用自己的私钥加密,接收端收到数据后,使用发送端的公钥解密。作用是保证发送者的身份唯一性。
ssh客户端生成密钥对
生成密钥对的命令:
ssh-keygen ,默认是交互式
常用选项:
-t : 指定秘钥算法
-N : 指定秘钥短语
-f : 指定秘钥存储路径非交互生成密钥对
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
#id_rsa: 私钥;id_rsa.pub: 公钥
拷贝公钥命令:ssh-copy-id
5.实操生成密钥对
先创建一个账户阿白,设置密码
生成密钥ssh-keygen,交互式生成,按三次回车
非交互式生成ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
将密钥复制给其他用户
此时,可以直接使用阿白登录阿绿账户(免密登录)
三.Rsync+sersync实现数据实时同步
1.rsync概述
Rsync(Remote Sync)是Linux系统下的数据镜像备份工具。该工具可以实现远程同步、不同主机之间的同步,也能实现全量备份和增量备份,保持数据链接和权限,并采用优化的同步算法,传输前对数据进行压缩,故该工具非常适合架构集中式备份或异地备份。也支持本地复制或与ssh、rsync同步。
优点:
scp无法备份大量数据,而rsync备份、统计、比较一起进行。
可以备份整个目录树和文件系统,并保持文件原来的权限、时间、软硬链接。
安装较容易,无需特殊权限。
同步快速,首次同步完全备份,再次同步增量备份。
可以使用scp和ssh等方式传输备份文件
支持匿名传输
选择性保持:符号链接、硬链接、文件属性、权限、时间等
传输速度快:压缩再传输、解压再使用,减少带宽。
备份分类:
完全备份:所有文件进行备份
差异备份:备份自上次完全备份以来所有的修改
增量备份:备份自上次备份依赖所作的修改
2.rsync运行原理
rsync采用C/S模式,即点到点的传输。通过xinetd服务监听873端口,再让xinetd服务下的rsync服务作出响应。
源主机:需要同步数据的服务器
目标主机:存放服务器同步数据的主机
数据同步方式:push 和 pull
推push:主动同步,把数据发送给目标主机。服务器开销大,适合后端服务器较少的情况。【服务器备份推给rsync客户端存放,主动模式】
目的主机配置为 rsync 服务端,源主机周期性的使用 rsync 命令把要同步的目录推过去。
拉pull:所有客户端主机去服务器上面拉数据,导致数据传输缓慢。【rsync客户端去服务器上拉数据,存放到客户端上,被动模式】
源主机配置为 rsync 服务端,目的主机周期性的使用 rsync 命令把要同步的目录拉过来。
3.rsync部署
查看是否监听873端口号
配置文件/etc/rsyncd.conf
参数 | 作用 |
---|---|
-a | –archive archive mode权限保存模式【递归、保持属性】 |
-r | 递归处理 |
-p | 保留文件原有属性 |
-t | 保留文件原有时间 |
-g | 保留属组 |
-o | 保留档案所有者 |
-D | 保留device咨询 |
-l | 复制所有的连接 |
-z | 压缩传输 |
-H | 保留硬链接文件 |
-A | 保留文件的ACL属性 |
-P | –progress |
-–version | 输出rsync版本信息 |
-v | 显示输出过程 |
-u | 仅进行更新 |
–-port | 指定端口号,默认873 |
–-delete | 删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致。 |
–-password-file | 指定密码文件 |
–-bwlimit | 限制I/O带宽 |
–-filter | 需要过滤的文件 |
–-exclude | 需要过滤的文件 |
–-progress | 显示备份过程 |
–avz | 常用:保留权限、显示同步过程、压缩传输 |
4.备份测试
配置备份目录
服务器:sourcePC 192.168.71.151 (需要进行数据备份的主机)
客户端:targetPC 192.168.71.149 (备份存储的主机)
编写客户端/etc/rsyncd.conf文件,并且创建目录/door/backup
给密码文件加上权限,不然会报错
然后进行跨机备份,输入密码(123456)
成功接收两个文件
此时再创建两个文件后重新备份
此时将会删除那些目标位置有的文件而备份源没有的文件,最大程度的保持一致。
若是拉取数据
cat /etc/rsync.passwd
123456
chmod 600 /etc/rsync.passwd
rsync -avz /data rsyncuser@192.168.71.149::data --password-file=/etc/rsync.passwd
5.rsync+sersync 实现数据实时同步
1 数据同步原理
1、为什么要是用rsync+sersync
sersync是基于inotify开发的,可以记录目录中发生变化的内容,具体到某个文件或者目录,在使用rsync同步的时候,只同步发生变化的文件或者目录。【增量同步】
2、rsync+inotify-tools 与 rsync+sersync 架构的区别?
①inotify-tools只能记录目录发生了变化,但是不能具体到某个文件或者目录。
②rsync同步不清楚哪些文件或目录发生了变化,就会整个目录都同步,效率低。
3、同步过程:
①源服务器上开启sersync记录指定路径的文件系统变化情况。
②源服务器上使用rsync命令把变化的数据同步到目标服务器上。
③源服务器上配置sersync服务,目标服务器安装rsync服务。
2 部署rsync+sersync
sersync服务端【同步服务器】:192.168.71.151
rsync客户端【存放备份,目标服务器】:192.168.71.149
由于sersync只能监控到差异变化,同步还是需要rsync去做,所以先确保rsync运行正常。可以测试一遍,看能否做完全同步。
修改文件内容为
然后启动服务(因为在当前目录,直接./)
在一边创建文件,一边完成实时监控
6.脚本编写
先在目标主机编写配置脚本
#!/bin/bash
systemctl status rsyncd &> /dev/null
if [ $? -ne 0 ];then
systemctl start rsyncd
fi
read -p "请输入ip地址:" ip
read -p "请输入创建的文件名称:" file
read -p "请输入跨机使用的密码:" passwd
mask=`echo $(echo $ip | cut -d. -f1,2,3).0/24`
echo "port=873
address = $ip
uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = $mask
[$file]
path = /$file/backup
comment = bakcup data
read only = false
list = yes
auth users = rsyncuser
secrets file = /etc/rsync.passwd">/etc/rsyncd.conf
touch /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
echo "rsyncuser:$passwd">/etc/rsync.passwd
mkdir -p /$file/backup
echo "Welcome to Backup server">/etc/rsyncd.motd
systemctl restart rsyncd
运行后创建成功
再在源主机编写一个简单的备份脚本
#!/bin/bash
systemctl status rsyncd &> /dev/null
if [ $? -ne 0 ];then
systemctl start rsyncd
fi
read -p "请输入要备份的目录:(格式:/目录)" dir
read -p "请输入要备份的目标主机ip:" ip
read -p "请输入目标地址创建的文件名称:" name
read -p "是否选择最大程度保持一直?(y/n): " choose
if [ "$choose" == "n" ];then
rsync -avz $dir rsyncuser@$ip::$name
else
rsync -avz --delete $dir rsyncuser@$ip::$name
fi
然后输入信息后运行脚本,在目标主机上可以看到备份成功
7.总结
rsync可以进行数据的同步,可以使用推和拉两种方式。推即源主机推数据到目标主机,拉即目标主机从源主机上拉数据。
push:服务器向客户端推送数据,要在目标主机上配置一个共享目录,在服务端上使用rsync命令推送数据给目标主机。
pull:客户端向服务器拉去数据,需要把服务器上的同步目录配置成一个共享目录,然后客户端去这个共享目录上拉去数据。
仅使用rsync同步数据,不会记录数据的变化,每次同步都是同步整个目录,不适合大量数据的同步。
结合使用rsync+sersync,sersync负责监控源主机上同步目录的数据变化,rsync负责同步变化的部分,极大地提高了同步的效率。
伴随本次内容的结束,网络服务也是告一段落,来不及悲伤,即将向我们走来的是!Nginx!