---
title: "vps双机热备"
url: "https://yjyj.net/learn/centos/1834.html"
author: "小 虾 (生猛大蝦编辑部)"
published_at: "2013-01-02T15:57:12+08:00"
updated_at: "2013-01-04T17:26:36+08:00"
categories: "CentOS 学习"
tags: "CentOS教程, Debian系统, Linux运维, rsync, 双机热备"
summary: "本文讲的是 VPS 文件双机热备怎么落地：先用 rsync 搭配 SSH 免密登录，把 A 服务器的 /www 目录定时同步到 B 服务器，再用 cron 做增量备份与删除同步，解决主机不稳定时的数据保护问题。"
source: "生猛大蝦 (https://yjyj.net)"
---

# vps双机热备

> 来源：[生猛大蝦 (yjyj.net)](https://yjyj.net/learn/centos/1834.html) · 作者：小 虾 · 发布时间：2013-01-02

## 30 秒核心看点 (TL;DR)

- 先装 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分钟就差不多了,反正只是增量备份.

 

```
首先，在两台服务器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
真是让哥抓耳挠腮的捉急.后来参考网上的解决办法:
 

```
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，保存定时任务就正常了。

---
更多 Linux 运维、WordPress 性能优化、前端工程化、Shopify 独立站与极客折腾指南：[生猛大蝦全站文章归档 (https://yjyj.net/archive)](https://yjyj.net/archive)
