Резервирование Mysql c помощью ldirectora
Настройка ldirector для балансировки нагрузки и резервирования работы базы данных
Для резервирования базы данным мы будем использовать мастер - мастер репликации. О том как настроить синхронизацию двух баз можно достаточно легко найти информацию в гугле или яндексе на выбор
Дано 3 машины (у нас для академический целей это виртуальным машины под Virtualbox) Образ ubuntu 10.04 можно скачать от сюда. Сохраняем образ. Запускаем Virtualbox и выбираем меню Файл / импортировать Эту операцию проделываем 3 раза. Первый сервер у нас будет балансер остальные два db-1 db-2.
Доступ к образу
login - root
password - test
Теперь наша задача запустить машину и настроить сетевые интерфейсы. В сохраненном образе системы файл
/etc/network/interfaces имеет настройки
auto lo iface lo inet loopback # The primary network interface auto eth3 iface eth3 inet dhcp auto eth2 iface eth2 inet static address 192.168.56.2 netmask 255.255.255.0 network 192.168.56.0
Возможно вам придется изменить настройки интерфейсов на eth1, eth0.
Если все в порядке то на команду ifconfig Вы увидите
[%photo_25%]
Теперь запускаем путем импорта образа создание двух виртуальных баз данных. После окончания импорта в консольном редакторе vim открываем файл сетевых настроек и меняем ip c 192.168.56.2 на 192.168.56.3
Важно: Тк мы поднимаем машины из одного образа нужно поменять MAC адреса хоты бы на 2х из трех. Как результат у Вас один интерфейс заменится на eht4 (точно узнать поможет команда ip a )
[%photo_26%]
#vim /etc/network/interfaces
а затем
#vim /etc/hostname
и меняем имя например на gdb-1 или то что вам по нраву. Аналогично импортируем третью машину и меняем ip на 192.168.56.4 а имя например на gdb-2
Теперь делаем reboot на всех трех машинах. Итого у нас 3 чистых виртуальных машины а с адресами 192.168.56.2 192.168.56.3 192.168.56.4 и основная машина с адресом 192.168.56.1
ставим ldirectord для убутны
aptitude install ldirectord -y
В файле
/etc/sysctl.conf ставим значения
net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0 et.ipv4.ip_forward=0 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 kernel.panic=30
/etc/ldirectord.cf
# Global Directives checktimeout=3 checkinterval=5 failurecount=2 autoreload=yes logfile="/var/log/ldirectord.log" quiescent=yes ########### MySQL - rw #################### virtual=192.168.56.10:3306 #192.168.56.3 - db-1 #192.168.56.4 - db-2 real=192.168.56.3:3306 gate 10 fallback=192.168.56.4:3306 gate service=mysql protocol=tcp checktype=negotiate login="site" passwd="site" database="site" request = "show databases" quiescent = no ############# MySQL - ro #################### virtual=192.168.56.11:3306 #192.168.56.3 - db-1 #192.168.56.4 - db-2 real=192.168.56.4 :3306 gate 10 fallback=192.168.56.3:3306 gate service=mysql protocol=tcp checktype=negotiate login="site" passwd="site" database="site" request = "show databases" quiescent = no
устанавливаем базы данных
#ssh root@192.168.56.4 aptitude install mysql-server -y
Если два раза проигнорировать запрос пароля для root и нажать Enter то пароль будет пустым (ооочень не рекомендуется для продакшен серверов)
Заходим по ssh root@192.168.56.3
mysql
CREATE DATABASE `site` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON site.* TO 'site'@'192.168.56.%' IDENTIFIED BY 'site';
vim /etc/mysql/my.cnf
Добавляем строку чтоб мускл слушал на новом ip
bind-address = 192.168.56.*
А затем повторяем создание и запуск базы на втором сервере db
Балансировка осуществляется на виртуальные ip. Для этого мы на db-1 и db-2 должны прибиндить еще два виртуальны ip
vim /etc/network/interfaces
auto lo:1 lo:2 iface lo:1 inet static address 192.168.56.10 netmask 255.255.255.255 iface lo:2 inet static address 192.168.56.11 netmask 255.255.255.255
а на балансере который будет принимать запросы на наши виртуальные ip
vim /etc/network/interfaces
auto eth2:1 eth2:2 iface eth2:1 inet static address 192.168.56.10 netmask 255.255.255.0 iface eth2:2 inet static address 192.168.56.11 netmask 255.255.255.0Важно: Вам вместо eth2:1, eth2:2 нужно указать свой сетевой интерфейс на балансере
Если все прошло удачно мы с основной хост машины можем подключиться к mysql серверу на адреса 192.168.56.10 и 192.168.56.11 используя например один коннект для записи а второй для чтения. Для Теста можем создать простой php скрипт
test.php
<? myslq_connect( '192.168.56.10', 'site', 'site', 'site') die('Не могу подключиться к 192.168.56.10 '.mysql_error() ); myslq_connect( '192.168.56.11', 'site', 'site', 'site') die('Не могу подключиться к 192.168.56.11 '.mysql_error() ); echo "Привет!!!"; ?>
Теперь открываем наш тестовый сайт и загружаем страницу в браузере, а затем можем выключать попеременно наши виртуальные сервера с базами данных или снимать галочку подключен к сети имитируя выход из строя одного из серверов и радоваться что сайт становиться снова рабочим через 3-5 сек.