nn 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. Когда речь идет о репликации то подразумевается использование нескольких серверов на которые будем устанавливать БД, у нас их три. Принцип работы показан на рисунках.nnnnЗапуск демона выполняется командой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]