Поиск по сайту:

Зеркальное отображение вашего веб-сайта с помощью rsync


На этой странице

  1. 1 Установите рсинк
  2. 2. Создайте непривилегированного пользователя на сервере server1.example.com.
  3. 3 Тестирование rsync
  4. 4. Создайте ключи на сайте Mirror.example.com.
  5. 5. Настройте server1.example.com.
  6. 6. Тестирование rsync на сайте Mirror.example.com.
  7. 7. Создайте задание Cron
  8. 8 ссылок

В этом руководстве показано, как можно зеркально отразить свой веб-сайт с основного веб-сервера на резервный сервер, который сможет взять на себя управление в случае сбоя основного сервера. Для этого мы используем инструмент rsync и запускаем задание cron, которое каждые x минут проверяет, есть ли что-то, что нужно обновить на зеркале. Таким образом, ваш резервный сервер обычно должен быть в актуальном состоянии, если ему придется вступить во владение.

rsync обновляет только те файлы, которые были изменены, поэтому вам не нужно передавать 5 ГБ данных при каждом запуске rsync. Он зеркалирует только новые/измененные файлы, а также может удалять с зеркала файлы, которые были удалены на главном сервере. В дополнение к этому он может сохранять разрешения и права собственности на зеркальные файлы и каталоги; чтобы сохранить права собственности, нам нужно запустить rsync от имени пользователя root, что мы и делаем здесь. Если разрешения и/или право собственности меняются на главном сервере, rsync также изменит их на резервном сервере.

В этом уроке мы будем туннелировать rsync через SSH, что более безопасно; это также означает, что вам не нужно открывать другой порт в брандмауэре для rsync — достаточно, если порт 22 (SSH) открыт. Проблема в том, что SSH требует пароль для входа в систему, что не очень хорошо, если вы хотите запустить rsync как задание cron. Потребность в пароле требует взаимодействия с человеком, а это не то, чего мы хотим.

Но, к счастью, есть решение: использование открытых ключей. Мы создаем пару ключей (на нашем резервном сервере mirror.example.com), один из которых сохраняется в файле на удаленной системе (server1.example.com). После этого нам больше не будет запрашиваться пароль при запуске rsync. Сюда также входят задания cron, а это именно то, что нам нужно.

Как вы уже могли догадаться из того, что я уже написал, идея заключается в том, что мы инициируем зеркалирование server1.example.com непосредственно из зеркало.example.com; server1.example.com не нужно ничего делать для зеркалирования.

Здесь я буду использовать следующую настройку:

  • Главный сервер: server1.example.com (server1) — IP-адрес: 192.168.0.100
  • Сервер зеркала/резервного копирования: Mirror.example.com (зеркало) — IP-адрес: 192.168.0.175
  • Веб-сайт, который необходимо зеркалировать, находится в /var/www на сервере server1.example.com.

rsync предназначен только для зеркалирования файлов и каталогов; если вы хотите зеркалировать свою базу данных MySQL, используйте вместо этого зеркалирование/репликацию MySQL.

Прежде всего хочу сказать, что это не единственный способ настройки такой системы. Есть много способов достижения этой цели, но я выберу именно этот путь.

Первый шаг — войти в систему или стать пользователем root в вашей системе. В Debian и centOS используйте:

su -

Если вы вошли в систему под другим пользователем, чем root. В Ubuntu используйте:

sudo -s

вместо.

1 Установите рсинк

Во-первых, нам нужно установить rsync как на server1.example.com, так и на Mirror.example.com. Для систем Debian и Ubuntu это выглядит так:

сервер1/зеркало:

(Мы делаем это как root!)

apt install rsync

В других дистрибутивах Linux для установки rsync можно использовать yum/dnf (Fedora/CentOS) или yast (SuSE).

В CentOS/Rocky Linux или AlmaLinux используйте:

dnf install rsync

2. Создайте непривилегированного пользователя на сервере server1.example.com.

Теперь мы создаем непривилегированного пользователя с именем someuser на сервере server1.example.com, который будет использоваться rsync на Mirror.example.com для зеркалирования каталога /var/www (конечно, у некоторого пользователя должны быть права на чтение /var/www на сервере server1). .example.com).

сервер1:

(Мы делаем это как root!)

sudo useradd -d /home/someuser -m -s /bin/bash someuser

Это создаст пользователя someuser с домашним каталогом /home/someuser и оболочкой входа в систему /bin/bash (важно, чтобы у someuser была действующая оболочка входа в систему — что-то вроде /bin/false не работает!). Теперь дайте какому-нибудь пользователю пароль:

passwd someuser

3 Тестирование rsync

Далее мы тестируем rsync на сайте Mirror.example.com. Под rootом мы делаем это:

зеркало :

rsync -avz -e ssh [email :/var/www/ /var/www/

Вы должны увидеть что-то вроде этого. Ответьте да:

The authenticity of host 'server1.example.com (192.168.0.100)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?
<-- yes

Затем введите пароль какого-либо пользователя, и вы увидите, что каталог /var/www сервера server1.example.com зеркально отображается на /var/www на Mirror.example.com.

Вы можете проверить это на обоих серверах следующим образом:

сервер1/зеркало:

ls -la /var/www

Вы должны увидеть, что все файлы и каталоги были зеркально отображены на Mirror.example.com, и файлы и каталоги должны иметь те же права и права собственности, что и на server1.example.com.

4. Создайте ключи на сайте Mirror.example.com.

Теперь мы создаем пару секретного и открытого ключей на сайте Mirror.example.com:

зеркало :

(Мы делаем это как root!)

mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Вы увидите что-то вроде этого:

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/cron/mirror-rsync-key.
Your public key has been saved in /root/cron/mirror-rsync-key.pub.
The key fingerprint is:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirror

Важно не вводить парольную фразу, иначе зеркалирование не будет работать без участия человека, поэтому просто нажмите enter!

Далее мы копируем наш открытый ключ на server1.example.com:

зеркало :

(Тем не менее, мы делаем это как root.)

scp /root/rsync/mirror-rsync-key.pub [email :/home/someuser/

Открытый ключ Mirror-rsync-key.pub теперь должен быть доступен в /home/someuser на сервере server1.example.com.

5. Настройте server1.example.com.

Теперь войдите через SSH на server1.example.com как пользователь (не root!) и сделайте следующее:

сервер1:

(Пожалуйста, сделайте это как пользователь!)

mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys

Сделав это, мы добавили содержимое Mirror-rsync-key.pub в файл /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys должен выглядеть примерно так:

сервер1:

(Все еще как пользователь!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

Теперь мы хотим разрешить подключения только с сайта Mirror.example.com, а подключающемуся пользователю должно быть разрешено использовать только rsync, поэтому мы добавляем

command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty

прямо в начале /home/someuser/.ssh/authorized_keys:

сервер1:

(Все еще как пользователь!)

vi /home/someuser/.ssh/authorized_keys
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

Вы должны использовать полное доменное имя, например Mirror.example.com, вместо IP-адреса после from=, иначе автоматическое зеркалирование не будет работать!

Теперь мы создаем скрипт /home/someuser/rsync/checkrsync, который отклоняет все команды, кроме rsync.

сервер1:

(Мы все еще делаем это как пользователь!)

mkdir ~/rsync
vi ~/rsync/checkrsync
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
        *\&*)
                echo "Rejected"
                ;;
        *\(*)
                echo "Rejected"
                ;;
        *\{*)
                echo "Rejected"
                ;;
        *\;*)
                echo "Rejected"
                ;;
        *\<*)
                echo "Rejected"
                ;;
        *\`*)
                echo "Rejected"
                ;;
        rsync\ --server*)
                $SSH_ORIGINAL_COMMAND
                ;;
        *)
                echo "Rejected"
                ;;
esac
chmod 700 ~/rsync/checkrsync

6. Тестирование rsync на сайте Mirror.example.com.

Теперь мы должны проверить на Mirror.example.com, можем ли мы зеркалировать server1.example.com без запроса пароля какого-либо пользователя. Мы делаем это:

зеркало :

(Мы делаем это как root!)

rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/

(Опция --delete означает, что файлы, которые были удалены на сервере server1.example.com, также должны быть удалены на Mirror.example.com. Опция --exclude означает, что эти файлы/каталоги не должны зеркалироваться; например, --exclude =**/error означает «не зеркалировать /var/www/error». Вы можете использовать несколько параметров --exclude. Я перечислил эти параметры в качестве примеров, и вы можете настроить команду в соответствии со своими потребностями.

man rsync

для получения дополнительной информации.)

Теперь вы должны увидеть, что зеркалирование происходит:

receiving file list ... done
sent 71 bytes  received 643 bytes  476.00 bytes/sec
total size is 64657  speedup is 90.56

без запроса пароля! Это то, чего мы хотели.

7. Создайте задание Cron

Мы хотим автоматизировать зеркалирование, поэтому создаем для него задание cron на Mirror.example.com. Запустите crontab -e от имени пользователя root:

зеркало :

(Мы делаем это как root!)

crontab -e

и создайте задание cron следующим образом:

*/5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/ 

При этом rsync будет запускаться каждые 5 минут; настройте его под свои нужды (см.

man 5 crontab

). Я использую здесь полный путь к rsync (/usr/bin/rsync), чтобы убедиться, что cron знает, где найти rsync. Ваше местоположение rsync может отличаться. Бегать

зеркало :

(Мы делаем это как root!)

which rsync

чтобы узнать, где твой.

8 ссылок

  • rsync: https://rsync.samba.org/

Статьи по данной тематике: