Маштабируемость проекта

baas
На сайте с 17.09.2012
Offline
161
1303

Доброе утро.

Есть проект, ему хотим добавить отказо-устойчивость.

1 сервер балансер.

2 файлы сайта и база.

3 файлы сайта и база.

Балансер - nginx или haproxy

База mysql мастер-мастер.

А вот чем файлы сайта синхронизировать?

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
suffix
На сайте с 26.08.2010
Offline
325
#1
baas:

1 сервер балансер.
2 файлы сайта и база.
3 файлы сайта и база.

Как была одна точка отказа так и осталась. Только теперь это сервер балансер.

ИМХО вот такая схема лучше:

0. DNS round robin+load failover (у dnsmadeeasy или dyn или ещё куча вариантов)

1. сервер балансер.

2. сервер балансер.

3. файлы сайта и база.

4. файлы сайта и база.

Клуб любителей хрюш (https://www.babai.ru)
baas
На сайте с 17.09.2012
Offline
161
#2
suffix:
Как была одна точка отказа так и осталась. Только теперь это сервер балансер.

ИМХО вот такая схема лучше:

0. DNS round robin+load failover (у dnsmadeeasy или dyn или ещё куча вариантов)
1. сервер балансер.
2. сервер балансер.
3. файлы сайта и база.
4. файлы сайта и база.

Это понятно, два балансера в разных дц, днс вторичный/первичный.

Но чем лучше файлы сайта синхронизировать между серверами?

Думаю использовать для синхронизации файлов сайта lsyncd.

kxk
На сайте с 30.01.2005
Offline
970
kxk
#3

baas, 1 Реально облачный впс решит вашу задачу без гемороя, но придётся раскошелиться:)

Ваш DEVOPS
lonelywoolf
На сайте с 23.12.2013
Offline
151
#4

Можно ceph использовать, если каналы хорошие.

Платный и бесплатный хостинг с защитой от DDoS (http://aquinas.su)
Himiko
На сайте с 28.08.2008
Offline
560
#5

Как варианты:

1) Простое, но с задержкой - csync2

2) Сложнее, но в реальном времени - кластерная FS (glusterfs,ceph и т.п.)

База мастер-мастер не надёжное решение. Теряется связь между серверами и каждый сам себе мастер. Пойдёт запись в соседний, пока на предыдущем висят запросы - и split brain.

Балансеры тоже. Либо два, либо ни одного (балансировка на уровне DNS и низким TTL и с health check. Типа Amazon route53)

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
danforth
На сайте с 18.12.2015
Offline
153
#6
Himiko:
split brain

Сплит брейна в мульти-мастере не бывает) сплит-брейн это когда в master/slave где всего один мастер, возникает два мастера (вернувшася нода после промоута).

Himiko:
База мастер-мастер не надёжное решение

С этим согласен, если речь про MySQL.

Himiko:
Теряется связь между серверами и каждый сам себе мастер.

Так это ж и есть суть мультимастера, чтобы каждый сам себе мастер.

Himiko:
Пойдёт запись в соседний, пока на предыдущем висят запросы - и split brain.

Запись в соседний сама не пойдет, если нету роутера. А в их схеме я не вижу роутера запросов. Секрет прост: писать в свою же ноду в том ДЦ, где работает приложение.

Но тут есть несколько но:

во-первых, если это синхронный мультимастер, то при падении одной ноды упадет весь кластер, это раз, скорость записи будет потеряна - это два.

во-вторых, если это асинхронный мультимастер, то при падении ноды мы все равно сможем писать, но если сделать два апдейта на разных серверах одной записи, то получим конфликт, который нужно решать ручками.

ну и с auto_increment_increment нужно заморочиться.

про синхронизацию файлов я бы на вашем месте меньше парился, чем про мультимастер.

я бы взял ceph.

Junior Web Developer
baas
На сайте с 17.09.2012
Offline
161
#7

Хмм, пока в раздумье как быть.

Playray
На сайте с 06.09.2008
Offline
133
#8
baas:
Доброе утро.
Есть проект, ему хотим добавить отказо-устойчивость.

1 сервер балансер.
2 файлы сайта и база.
3 файлы сайта и база.

Балансер - nginx или haproxy

База mysql мастер-мастер.
А вот чем файлы сайта синхронизировать?

Может не совсем правильно и профессионально, но у себя я решил аналогичную задачу просто, запускаю при старте скрипт бесконечный с rsync и он раз в секунду синхронизирует, вдруг кому пригодиться:


while (true)
do
rsync -a -e user@источник:/удаленный_каталог /локальный_каталог
sleep 1; # пауза
done;
B
На сайте с 21.10.2010
Offline
94
#9

Если речь за исходники приложения - синхронно деплоить из системы контроля версий (git или что там)

если за всякий аплоад - то можно попробовать glusterfs (только не делайте очень много файлов (5к+) на каталог

если гластер сложно - можно взять любое внешнее файлохранилище: s3, селектел-кто-угодно

Дела должны делаться
VO
На сайте с 27.07.2008
Offline
149
#10

Поддержу предыдущего оратора.

Если загружаются только картинки, лучше их загружать во внешнее объектное хранилище.

Большинство CMS уже так или иначе умеют это делать.

Нужно понимать количество/объем данных для синхронизации, бюджет, допустимый простой и время восстановления после сбоя.

Городить тут ceph избыточно судя по вводным данным.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий