Обеспечение отказоустойчивости сайта
Задача поставленная клиентом, обеспечить отказоустойчивость сайту. При падении любого сервера сайт будет продолжать работать. Для решения этой задачи использовали репликацию баз данных и распределенную ФС.
В качестве баз данных у клиента пользуется Mongo db и Postgress. Реализация 3 сервера — на них репликация Mongo и Postgress и распределенная система Gluster. Балансировка выполняется по ДНС.
Установка Postgress
Устанавливаем и настраиваем БД с учетом наличия трех серверов, настраиваем репликацию. Основная идея подробно описана на хабре.
Пошагово на каждом сервере выполняем следующие действия:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
psql -U postgres -c "ALTER USER bucardo WITH PASSWORD 'cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7';" bucardo add database archivizer_1 dbname=archivizer dbhost=xxx.xx.xxx.66 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7 bucardo add database archivizer_2 dbname=archivizer dbhost=xxx.xx.xxx.67 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7 bucardo add database archivizer_3 dbname=archivizer dbhost=xxx.xx.xxx.68 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7 bucardo add table all --db=archivizer_1 --herd=archivizer_herd bucardo add sequence all --db=archivizer_1 --herd=archivizer_herd bucardo add dbgroup archivizer_group bucardo add dbgroup archivizer_group archivizer_1:source bucardo add dbgroup archivizer_group archivizer_2:source bucardo add dbgroup archivizer_group archivizer_3:source bucardo add sync archivizer_sync herd=archivizer_herd dbs=archivizer_group |
Таким образом происходит настройка БД Postgress
Установка Mongo DB
База монго поддерживает два варианта репликации: ведущий-ведомый(Master-Slave) реплисеты(Replica Sets ). В данном случае будем использовать более новый подход Replica Sets. Когда речь идет о репликации то подразумевается использование нескольких серверов на которые будем устанавливать БД, у нас их три. Принцип работы показан на рисунках.
Запуск демона выполняется командой
1 |
mongod |
Для указания сервера БД
1 |
mongo --host xxx.xxx.xxx.68 |
Для указания, что это реплика используем команду
1 |
mongo --host xxx.xxx.xxx.68 --replSet myreplica |
Для двух других серверов так же
1 2 3 |
mongo --host xxx.xxx.xxx.66 --replSet myreplica mongo --host xxx.xxx.xxx.87 --replSet myreplica |
myreplica – эта любое имя которое мы указываем для Replica Sets
Таким образом у нас есть три БД на разных серверах, нужно распределить между ними роли и определить Primary сервер.
Выбрали сервер и входим на него с помощью команд mongoshell
1 |
mongo --host xxx.xxx.xxx.68 |
Выполняем инициализацию конфига
1 |
mongo> rs.initiate() |
Доступный список методов можно получить rs.help()
Узнаем статус
1 |
mongo> rs.status() |
Видим только один сервер, необходимо добавить остальные
1 2 |
mongo> rs.add("xxx.xxx.xxx.66") mongo> rs.add("xxx.xxx.xxx.67") |
Более подробную информацию по натройке можно получить на оф сайте.
Установка GlusterFS
На всех серверах устанавливаем глустер
1 |
yum install glusterfs-server |
Запускаем демон и проверяем статус
1 2 |
service glusterd start service glusterd status |
Выполняем настройку
1 2 3 4 5 6 7 8 9 10 |
gluster peer probe xxx.xx.xxx.66 gluster peer probe xxx.xx.xxx.67 gluster peer probe xxx.xx.xxx.68 mkdir /var/spool/gluster/gv0 #only on one gluster volume create gv0 replica 3 xxx.xx.xxx.66:/var/spool/gluster/gv0 xxx.xx.xxx.67:/var/spool/gluster/gv0 xxx.xx.xxx.68:/var/spool/gluster/gv0 force gluster volume start gv0 gluster volume info |
В данной статье мы показали краткий обзор одного из методов обеспечения отказоустойчивости сайта, реализованная нашими специалистами, если у Вас есть желание обеспечить высокую доступность своим сайтам, обращайтесь [email protected]