Настройка ldirector для балансировки Mysql. Повышение отказоустойчивости сайта

Резервирование 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.3 aptitude install mysql-server -y
#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 сек.

Вам может понравиться