共计 2065 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 方案背景:A 服务器和 B 服务器之间(可 1 对 1,也可多对多,在此以简单的 1 对 1 举例)需要数据同步,此方案常用于远程灾备。 |
同步方案根据应用场景大约有两种,定时同步和实时同步。定时同步具有同步时间固定、实时性差、消耗资源较小的特点;实时同步具有实时性强、同步密集、较耗资源等特点。
1、安装软件:
yum install rsync -y
2、免密登录(也可使用明文采用模拟交互式登录方式,但是从安全角度出发还是建议使用免密登录):
ssh-keygen -t rsa
生成后可以进入目录 cd ~/.ssh/ 把生成的密钥~/.ssh/id_rsa.pub 内容复制到远程主机的 /root/.ssh/authorized_keys 中
在这里很多同学对以上的操作为什么就不用输入密码的问题感到好奇,了解免密登录的同学可以跳过这段介绍。这里介绍下免密登录的原理:
rsa 又称非对称密钥算法,对应的是对称密钥算法。
所谓对称密钥算法就是 A 和 B 通信,为了双方能确认对方的身份,A 和 B 约定一个双方都知道的密钥 k 来确定身份如下:
A =>(mk)B A 发送 m 明文和 K 密钥跟 B,B 确认 K 密钥和之前 A 约定的一样,就能确定 A 的身份是真实的。反之 B 到 A 的通信也是如此。
非对称加密需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。
所以以上的操作把 A 服务器的公钥共享跟了 B 服务器(远程主机),所以 A 服务器登录 B 服务器就不再需要传统的交互式输入密码登录,B 服务器能通过 A 服务器的公钥而确认 A 服务器的真实性(私钥)。
[root@localhost ~]# cd ~/.ssh/
[root@localhost .ssh]# ls
id_rsa id_rsa.pub known_hosts
3、编写 shell 脚本
[root@localhost ~]# vim back.sh
#!/bin/sh
rsync -avz -e 'ssh -p 22' root@x.x.x.x:/XXX/pub /data/
注意:rsync 的数据同步分为拉和推两种不同的动作,在编写脚本之前,一定要测试命令是否能正常执行。
4、crontab 定时执行配置 (每天 3 点执行脚本)
到此,定时同步就配置好了。
Inotify 简介
Inotify 是一个 Linux 特性,从版本 2.6.13 开始提供,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
开始配置 Inotify
注:在开始之前需要在服务器 A 和 B 上都安装好 rsync。
1、在服务器 B 上调整 inotify 内核参数,vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
2、使调整 inotify 内核参数立刻生效
sysctl -p
3、安装 Inotify-Tool 工具
# 先安装扩展包源,否则 inotify-tools 找不到
yum install epel-release
yum install inotify-tools
4、打开两个终端,一个终端执行创建删除等操作,另一个执行 Inotify-Tool 工具,测试 Inotify-Tool 工具时候正常
inotifywait -mrq -e modify,create,move,delete /var/www/
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
5、编写脚本
vim /root/tongbu.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /root/cs"
RSYNC_CMD="rsync -avz -e'ssh -p 22'/root/cs/ root@x.x.x.x:/root/cs/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [$(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
注:这里要特别注意,逻辑关系不要搞混了,是 B 服务器推送跟 A 服务器。
6、添加开机自动后台自动运行,编辑 /etc/profile 文件,在最后一行加入下面语句
/bin/bash /root/tongbu.sh &
到此定时同步和实时同步都讲解完毕。根据不同的场景应用不同的方案,需要灵活应对,特别要注意一点的是。实时同步的方案,监控目录千万不能设置成日志目录,不然服务器 cpu 飙升很有可能会宕机。