К примеру, дано два сервера. Нужно на них настроить реплику. И раздавать статику с этих серверов через nginx. При этом папку примонтировать и заливать файлы в нее с других серверов. Это можно сделать через lsyncd и ssh.
Пусть LEADER будет srv1, а srv2 — FOLLOWER.
srv1 — 192.168.1.51
srv2 — 192.168.1.52
Настройка SSH
Пропишите хосты в /etc/hosts на двух серверах:
_x000D_192.168.1.51 srv1_x000D_192.168.1.52 srv2Пропишите конфиг /root/.ssh/config на двух серверах:
_x000D_Host *_x000D_ Protocol 2_x000D_ KeepAlive yes_x000D_ TCPKeepAlive yes_x000D_ ServerAliveInterval 5_x000D_ ServerAliveCountMax 17280_x000D_ Compression no_x000D_ #CompressionLevel 9_x000D_ #ForwardX11 yes_x000D_ UseRoaming no_x000D__x000D_Host srv1_x000D_ Hostname srv1_x000D_ User root_x000D_ Port 22_x000D_ _x000D_Host srv2_x000D_ Hostname srv2_x000D_ User root_x000D_ Port 22 Параметры:
ServerAliveInterval — Через какое время в секундах клиенты пытается подключиться к серверу после потери соединения
ServerAliveCountMax — Сколько раз клиент пытается подключиться
Компрессию нужно выключить, она грузит процессор
Сгенерируйте root ключи ssh на двух серверах:
_x000D_ssh-keygenПропишите теперь на двух серверах публичных ключи. Вообщем содержимое файлов /root/.ssh/id_rsa.pub с двух серверов надо скопировать в /root/.ssh/authorized_keys на оба сервера.
Проверьте подключение к серверам.
На первом сервере:
_x000D_ssh srv2На втором сервере:
_x000D_ssh srv1Подключение должно идти без пароля
Настройка lsyncd
Установите lsyncd на двух серверах:
_x000D_apt-get install rsync lsyncdВАЖНО! Нужно на втором сервере остановить lsyncd:
_x000D_systemctl stop lsyncd_x000D_systemctl disable lsyncdЭто необходимо, чтобы первый сервер был лидером, второй фоловером. Дело в том, что когда запускается lsyncd, то он сначала рсинкает файлы с локального на удаленный, а затем запускается сам. Т.е. если на втором запуститься lsync и там не будет каких то файлов, то он может удалить файлы с первой ноды. Чтобы это не происходило, нужно на втором сервере отключить lsyncd.
При старте lsyncd запускается такая команда: /usr/bin/rsync —delete —ignore-errors -gLpusoltSD —temp-dir=/data/tmp -r /data/files/ srv2:/data/files/
Она синхронизирут зеркально папку /data/files/ на с первого на второй сервер.
Создайте папки на обоих серверах:
_x000D_mkdir -p /etc/lsyncd_x000D_mkdir -p /data/files_x000D_mkdir -p /data/tmp_x000D_mkdir -p /var/log/lsyncd_x000D_Папка /data/files будет синхронизироваться с srv1 на srv2
/data/tmp — Временная папка, туда будут загружаться файлы, а потом переносится в /data/files
На srv1 пропишите.
_x000D_settings{_x000D_ logfile = "/dev/null",_x000D_ statusFile = "/var/log/lsyncd/lsyncd.status",_x000D_ statusInterval = 10,_x000D_ nodaemon = false,_x000D_ maxDelays = 10,_x000D_ maxProcesses = 1,_x000D_}_x000D__x000D_sync {_x000D_ default.rsyncssh,_x000D_ source = "/data/files",_x000D_ host = "srv2",_x000D_ targetdir = "/data/files",_x000D_ rsync = {_x000D_ archive = true,_x000D_ owner = true,_x000D_ copy_links = true,_x000D_ compress = false,_x000D_ sparse = true,_x000D_ temp_dir = "/data/tmp",_x000D_ update = true,_x000D_ }_x000D_}На srv2 пропишите такой же конфиг, только поменяйте host на srv1.
Значение maxProcesses установите <кол-во процессоров — 1>
Запустите команду и проверьте правильно ли все настроено
_x000D_lsyncd -nodaemon /etc/lsyncd/lsyncd.conf.luaЕсли все норм, ребутните lsyncd на srv1
_x000D_systemctl restart lsyncdПосле этого синхронизация будет запущена
Подключение клиента
Установить sshfs:
_x000D_apt install sshfsВажно. Нужно также сгенерировать ssh ключ клиента и прописать его в /root/.ssh/authorized_keys на обоих серверах.
Проверьте подключение по ssh с клиента:
_x000D_ssh srv1Подключить клиента можно через sftp:
_x000D_sshfs -o reconnect,ServerAliveInterval=5,ServerAliveCountMax=17280 srv1:/data/files /media/filesЛибо пропишите в fstab на клиенте:
_x000D_sshfs#srv1:/data/files /media/files fuse defaults,allow_other,reconnect,ServerAliveInterval=5,ServerAliveCountMax=17280 0 0Важно
При падения сервера лидера, все смонтированные папки к нему зависают, и перестают отвечать. Это может привести зависанию приложений, которые работают с примонтированной папкой. При текущих настройках, соединение с сервером будет пытаться восстановить подключение в течении 24х часов (17280 x 5 сек).