# vps双机热备

- Link: https://yjyj.net/learn/centos/1834.html
- Published: 2013-01-02T15:57:12+08:00
- Author: 小 虾

⚡ 生猛大蝦编辑部 · 30 秒核心看点

 * 先装 rsync，再配 SSH 公钥免密登录，才能让两台 VPS 自动同步文件。
 * 用 rsync 同步 /www 目录时加上 --delete，可让备份端与源站保持一致。
 * 定时任务建议别太激进，12 小时或 6 小时同步一次更稳，编辑 crontab 还要先装好 vim。

临近年底,vps真是不稳定,囧客圈上个月的在线率估计连95%都没有,为了不折腾,前两天配置
好了mysql的主主同步,今天又来折腾一下文件的双机热备.
 方案一: 牛人开发的Sersync方案,
不知道为啥,虾爷使用未成功… http://code.google.com/p/sersync/ http://blog.johntechinfo.
com/sersyncguild http://hi.baidu.com/johntech/item/4febbf1f5758ecfc87ad4ee3

**已经得知为什么会配置Sersync失败了,因为使用了Lum(自己的路)的面板,造成无法使用,找个
时间哥还是换回lnmp.org军哥的吧.**

方案二:

东哥提供的同步脚本,只要把他的12小时同步一次改成5分钟就差不多了,反正只是增量备份.

    ```decode:true
    首先，在两台服务器A和B同时装上rsync。

    centos:yum install rsync -y

    debian:apt-get install rsync -y

    这里我们假设B是备份服务器，A上所有的改动都同步到B上去.

    在A上输入 ssh-keygen。命令(一路回车)：

    ssh-keygen

    输入ssh-keygen将会显示如下结果

    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    d7:15:ad:ff:37:99:4b:c8:01:20:b2:8b:1a:2b:2d:1f root@030.homezz.com
    The key’s randomart image is:
    +–[ RSA 2048]—-+
    | . . . .. |
    | o . . ..|
    | . . .. |
    | . . …. |
    | . . . S . .. . |
    | .+ . . o .|
    |ooE o .+|
    |.o . .+o|
    | . .+|
    +—————–+

    我们将创建好的公钥上传到B服务器，命令如下

    scp /root/.ssh/id_rsa.pub root@B的ip:/root/.ssh/_pub

    提示的时候输入密码，该文件即上传到了B服务器。

    ssh登陆到B服务器，运行命令 cat /root/.ssh/_pub>>/root/.ssh/authorized_keys

    在B服务器中，打开ssh配置文件 vim /etc/ssh/sshd_config,删除 #PubkeyAuthentication yes 这行前面的#

    重启sshd: service sshd restart

    现在，从A服务器 ssh root@Bip 看看是否可以无密码登陆了？如果上面步骤无误的话，是肯定可以无密码登陆了



    现在在A服务器上开始运行rsync做一次数据同步

    /usr/bin/rsync -rvuog /www/* root@B的ip:/www/

    这样就会将A /www/  下的所有文件，同步到B服务器的/www/下，第一次运行时间会很久。如果A上有文件不存在了，你同步的时候也需要B服务器上的文件也同时删除掉，那么参数添加一个 –delete

    /usr/bin/rsync   -rvuog    –delete  /www/*  root@B的ip:/www/

    第一次同步完毕之后，在A服务器上创建一个cronjob，定期执行同步。

    命令为crontab -e,

    然后输入

    0 */12 * * * /usr/bin/rsync -rvuog –delete /www/ root@B的ip:/backup/file.homezz.com/ >/dev/null 2>&1

    表示12小时同步一次。

    注意，若你数据量过大，不建议同步周期太频繁，否则会导致不可预料的错误。个人觉得12小时或者6小时比较合适
    ```

这里还出现了个小插曲,在保存crontab的时候开始一直提示:
 crontab: no changes made 
to crontab 真是让哥抓耳挠腮的捉急.后来参考网上的解决办法:

    ```decode:true
    yum -y install vim-enhanced

    如果使用crontab出错：
    [root@176177 ~]#crontab -e
    no crontab for root - using an empty one
    /bin/sh: /bin/vi: No such file or directory
    crontab: "/bin/vi" exited with status 127

    则运行# yum -y install vim*
    即可！
    ```

接着就ok了:crontab: installing new crontab

❓ 延伸问答与排错指南（FAQ）

VPS 双机热备最简单怎么做？

最简单的思路就是一台做主机 A，一台做备份机 B。先在两边安装 rsync，再在 A 上配置 
SSH 免密登录到 B，最后用 rsync 把指定目录定时同步过去。这样能实现文件级的增量备份，
操作成本低，适合小型站点。

rsync 同步时为什么要加 --delete？

加上 --delete 的作用是让备份端删除那些源站已经不存在的文件，避免 B 服务器长期残留
旧数据。它适合做镜像式同步，但使用前要确认目标路径没放额外手工文件，否则会被一并
清掉。

crontab 提示没有 vi 怎么处理？

如果执行 crontab -e 时提示 /bin/vi 不存在，通常是系统没装编辑器。按文中做法安装 
vim-enhanced 或 vim* 即可恢复编辑能力。装好后再重新执行 crontab -e，保存定时任务
就正常了。

📚 【[CentOS 学习](https://yjyj.net/category/learn/centos)】专栏延伸阅读与热门精选（
[全站文章归档](https://yjyj.net/archive)）：

 * [MySql主主(主从)同步配置补遗](https://yjyj.net/learn/centos/1822.html)
 * [再次折腾Mysql主主同步配置,方案适合: Mysql5.1x-5.5x](https://yjyj.net/learn/centos/1756.html)
 * [Linux 中 crontab 详解及示例 – 转载](https://yjyj.net/learn/centos/1846.html)
 * [解封lnmp0.9被禁用的可怜函数](https://yjyj.net/learn/centos/1897.html)
 * 热门必读[俩月了, DMIT 终于补货了!](https://yjyj.net/share/7795.html)
 * 热门必读[跨境电商 AI Prompts](https://yjyj.net/ad/7723.html)
