Rate this post

mongonn nnЗадача поставленная клиентом, обеспечить отказоустойчивость сайту. При падении любого сервера сайт будет продолжать работать. Для решения этой задачи использовали репликацию баз данных и распределенную ФС.nnВ качестве баз данных у клиента пользуется Mongo db и Postgress. Реализация 3 сервера — на них репликация Mongo и Postgress и распределенная система Gluster. Балансировка выполняется по ДНС.n

Установка Postgress

Устанавливаем и настраиваем БД с учетом наличия трех серверов, настраиваем репликацию. Основная идея подробно описана на хабре.nnПошагово на каждом сервере выполняем следующие действия:n

psql -U postgres -c "ALTER USER bucardo WITH PASSWORD 'cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7';"nnbucardo add database archivizer_1 dbname=archivizer dbhost=xxx.xx.xxx.66 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7nbucardo add database archivizer_2 dbname=archivizer dbhost=xxx.xx.xxx.67 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7nbucardo add database archivizer_3 dbname=archivizer dbhost=xxx.xx.xxx.68 dbuser=bucardo dbpass=cewyg467rtTjefhr3343nnfdjgghhehrh5hhgg7nbucardo add table all --db=archivizer_1 --herd=archivizer_herdnbucardo add sequence all --db=archivizer_1 --herd=archivizer_herdnbucardo add dbgroup archivizer_groupnbucardo add dbgroup archivizer_group archivizer_1:sourcenbucardo add dbgroup archivizer_group archivizer_2:sourcenbucardo add dbgroup archivizer_group archivizer_3:sourcennbucardo add sync archivizer_sync herd=archivizer_herd dbs=archivizer_group

Таким образом происходит настройка БД Postgressn

Установка Mongo DB

База монго поддерживает два варианта репликации:  ведущий-ведомый(Master-Slave) реплисеты(Replica Sets ). В данном случае будем использовать более новый подход Replica Sets. Когда речь идет о репликации то подразумевается использование нескольких серверов на которые будем устанавливать БД, у нас их три. Принцип работы показан на рисунках.nnmongo-replicmongo-replic1nnЗапуск демона выполняется командойn

mongod

Для указания сервера БДn

mongo --host xxx.xxx.xxx.68

Для указания, что это реплика используем командуn

mongo --host xxx.xxx.xxx.68 --replSet myreplica

Для двух других серверов так жеn

mongo --host xxx.xxx.xxx.66 --replSet myreplicannmongo --host xxx.xxx.xxx.87 --replSet myreplica

myreplica – эта любое имя которое мы указываем для Replica SetsnnТаким образом у нас есть три БД на разных серверах, нужно распределить между ними роли и определить Primary сервер.nnВыбрали сервер и входим на него с помощью команд mongoshelln

mongo --host xxx.xxx.xxx.68

Выполняем инициализацию конфигаn

mongo> rs.initiate()

Доступный список методов можно получить rs.help()nnУзнаем статусn

mongo> rs.status()

Видим только один сервер, необходимо добавить остальныеn

mongo> rs.add("xxx.xxx.xxx.66")nmongo> rs.add("xxx.xxx.xxx.67")

Более подробную информацию по натройке можно получить на оф сайте.n

Установка GlusterFS

На всех серверах устанавливаем глустерn

yum install glusterfs-server

Запускаем демон и проверяем статусn

service glusterd startnservice glusterd status

Выполняем настройкуn

gluster peer probe xxx.xx.xxx.66ngluster peer probe xxx.xx.xxx.67ngluster peer probe xxx.xx.xxx.68nnmkdir /var/spool/gluster/gv0nn#only on onengluster 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 forcengluster volume start gv0ngluster volume info

В данной статье мы показали краткий обзор одного из методов обеспечения отказоустойчивости сайта, реализованная нашими специалистами, если у Вас есть желание обеспечить высокую доступность своим сайтам, обращайтесь [email protected]