|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> MySQL Master+Master
MySQL Master+Master
Автор: fox.
Примечание, есть улучшенная версия статьи на моей вики:
MySQL Master+Master
Эта статья написана на быструю руку и не претендует на что-либо. Я её написал, чтобы не забыть, как я это сделал, на случай если понадобится повторить или, может быть, ещё кому-то она будет полезной. Прошу зараннее не искать у меня орфографических ошибок, ибо их там тьма! :-)
*************************************************************
Пролог:
Вы только представьте, появилась необходимость в ***Донецком национальном академическом украинском музыкально-драматическом театре*** (говоря эти слова, аж слёзы на глазах выступают). Ладно, пропустим эпиграф патриотизма и стёба, ближе к делу - делаем MySQL сервер в режиме Master Master… Зачем? Не скажу - военная тайна!
Акт первый:
Итак, приступим, у нас имеется два сервера. Давайте, к примеру, их назовём BSD1 и BSD2. У каждого из них есть энное количество интерфейсов. Желательно между серверами сделать кроссовер с карточками эквивалентом 1Gbit, это приблизительно 128 MB/s, что приблизительно приравнивается к скорости работы винта! В случае репликации больших баз данных это значительно облегчит ситуацию…
Первый сервер (BSD1) объеденим со вторым сервером (BSD2) кроссовером через интерфейсы:
BSD1 re0 ip: 10.10.10.10
BSD2 re0 ip: 10.10.10.20
|
Теперь приступим к установке MySQL, я выбрал версию 5.1, кто-то может выбрать другую, более новую, но меня устраивает такая! Для начала обновим порты, как это сделать? Вы наверняка знаете, если не знаете, то найдёте уйму материала, на данном замечательном ресурсе…
1. Устанавливаем на обоих серверах, MySQL сервер, я делал это так:
# cd /usr/ports/databases/mysql51-server/
# make BUILD_OPTIMIZED=yes WITH_OPENSSL=yes WITH_CHARSET=koi8r
# make install clean
#rehash
а у кого bash, тот делает:
#hash -r
| Я выбрал кодировку koi8r, вы можете указать другую, например, cp1251, но я сторонник koi8r!
Создаём MySQL базу:
Присваиваем правильные права:
# chown -R mysql:mysql /var/db/mysql/
| Создаём файл для логов с нужными правами:
# touch /var/log/mysql.log
# chown mysql:mysql /var/log/mysql.log
| Копируем конфиг:
# cp /usr/local/share/mysql/my-huge.cnf /etc/my.cnf
| 2. Когда вы дошли до этого этапа, можно приступить к настройке первой фазы репликации Master + Slave (Ведущий + Ведомый), в нашем случае Master будет (BSD1), а Slave будет (BSD2).
Начнём редактировать конфиг Master (BSD1).
my.cnf:
[mysqld]
...
log=/var/log/mysql.log
default-character-set=koi8r
character-set-server=koi8r
collation-server=koi8r_general_ci
init-connect="SET NAMES koi8r"
skip-character-set-client-handshake
language=/usr/local/share/mysql/russian/
skip-name-resolve
datadir=/var/db/mysql
socket=/tmp/mysql.sock
old_passwords=1
log-bin=/var/db/mysql/mysql-bin
binlog-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
server-id=1
...
| Обратите внимание – это очень важно, чтобы у вас в конфиге не повторялись строки, такие как:
old_passwords=
log-bin=
server-id=
| Иначе может ничего не получится, в лучшем случае будет работать с косяками, если строки где-то повторяются, закомментируйте их!
Также обратите внимание на такие строки, как:
#Та база(ы), которая будет подвергаться репликации
binlog-do-db=testdb
#Та база(ы), которая, наоборот, будет игнорировать репликацию
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
| 3. Поработаем с конфигом Slave(BSD2).
my.cnf:
[mysqld]
...
log=/var/log/mysql.log
default-character-set=koi8r
character-set-server=koi8r
collation-server=koi8r_general_ci
init-connect="SET NAMES koi8r"
skip-character-set-client-handshake
language=/usr/local/share/mysql/russian/
skip-name-resolve
datadir=/var/db/mysql
socket=/tmp/mysql.sock
old_passwords=2
server-id=2
master-host = 10.10.10.10
master-user = replication
master-password = slavepass1
master-port = 3306
...
| Ещё раз напоминаю, чтобы проверяли, не повторяются ли строки в конфигах!!!
old_passwords=
log-bin=
server-id=
| 4. На обоих серверах добавляем автозагрузку MySQL в rc.conf:
Запускаем на обоих серверах MySQL:
# /usr/local/etc/rc.d/mysql-server start
| Проверяем работает ли:
# sockstat | grep mysql
mysql mysqld 75184 13 tcp4 *:3306 *:*
mysql mysqld 75184 15 stream /tmp/mysql.sock
| Обратите внимание, чтобы MySQL слушал во всех направлениях и чтобы не получилось так, что он будет слушать localhost или какой-то отдельный ip. Нам нужна будет репликация, поэтому MySQL должен слушать как минимум в сторону кроссовера или лучше во всех направлениях, а кто боится о безопасности, то заткните при помощи FireWall те места!
5. Настраиваем root пользователя на обоих серверах:
# mysqladmin -u root password 'root_password'
| Заходим:
# mysql -u root -p
Enter password:
| На сервере Master (BSD1) добавляем пользователя для репликации Slave:
mysql> grant replication slave on *.* to
'replication'@10.10.10.20 identified by 'slavepass1';
| Перезапускаем привилегии:
На сервере Slave (BSD2) стартуем Slave режим:
Проверяем стал Slave(BSD2) сервер, в режим Slave?
Если строки:
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
| Показывает состояние Yes, значит всё получилось!
Режим Master + Slave работает!
6. Тестируем:
На сервере Master (BSD1), проверяем состояние Master:
mysql> show master status;
| Должно быть примерно так:
+------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000001 | 106 | testdb | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)
| Отсюда мы видим, что две базы игнорируют репликацию, а одна подвергается!
Создаём базу на сервере Master:
mysql> create database testdb;
| Проверяем на сервере Slave:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
| testdb |
+--------------------+
3 rows in set (0.01 sec)
| Видим, что на втором сервере Slave также появилась база testdb!
7. Этот пункт можно пропустить, но я бы сделал так - вносим полезные изменения в MySQL сервера, причем это нужно сделать на обоих серверах!
Удаляем test базу:
mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)
| Теперь редактируем mysql базу:
mysql> use mysql;
Database changed
| Смотрим, что в таблице пользователей:
mysql> select Host,User,Password from user;
| У Master будет так:
+-----------------+-------------+------------------+
| Host | user | Password |
+-----------------+-------------+------------------+
| localhost | root | 352c4a5701107150 |
| BSD1 | root | |
| 127.0.0.1 | root | |
| localhost | | |
| BSD1 | | |
| 10.10.10.20 | replication | 48ea58092bbc51a3 |
+-----------------+-------------+------------------+
6 rows in set (0.01 sec)
| А у Slave вот так:
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *28B7B09A25EC723332B51CF8FD7286F9BD8CFB44 |
| BSD2 | root | |
| 127.0.0.1 | root | |
| localhost | | |
| BSD2 | | |
+-----------+------+-------------------------------------------+
Такой вид - это не есть гуд!
Грохаем ненужных пользователей:
mysql> delete from user where Host='BSD1';
Query OK, 2 rows affected (0.01 sec)
| Разумеется, что для сервера BSD2, мы BSD1 заменим на BSD2!
mysql> delete from user where Host='127.0.0.1';
Query OK, 1 row affected (0.00 sec)
mysql> delete from user where Host='localhost' and User='';
Query OK, 1 row affected (0.00 sec)
| Вот теперь есть гуд для Master:
mysql> select Host,user,Password from user;
+-----------------+-------------+------------------+
| Host | user | Password |
+-----------------+-------------+------------------+
| localhost | root | 352c4a5701107150 |
| 10.10.10.20 | replication | 48ea58092bbc51a3 |
+-----------------+-------------+------------------+
2 rows in set (0.00 sec)
| И для Slave:
mysql> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *28B7B09A25EC723332B51CF8FD7286F9BD8CFB44 |
+-----------+------+-------------------------------------------+
1 row in set (0.01 sec)
| Для чистоты можно и в таблице db навести марофет:
mysql> delete from db;
Query OK, 2 rows affected (0.02 sec)
| Перезапускаем привилегии:
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
| Ну вот мы и справились с первой фазой, с настройкой и оптимизацией!
Конец первого акта, антракт, идём пить чай, кофе, капучино, приставать к нетрезвым женщинам!
*********** АНТРАКТ ***********
Акт второй:
Master (BSD1) + Slave (BSD2) мы осуществили, теперь нужно организовать симметрично
Master (BSD2) + Slave (BSD1) для полного режима Master + Master!
1. Приступим! Правим конфиг Slave (BSD1).
Добавляем в my.cnf:
[mysqld]
...
master-host = 10.10.10.20
master-user = replication
master-password = slavepass2
master-port = 3306
...
| 2. Затем правим конфиг Master(BSD2).
Добавляем в my.cnf:
log-bin=/var/db/mysql/mysql-bin
binlog-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
| А также добавляем на Master (BSD2) учётную запись репликации:
mysql> grant replication slave on *.* to 'replication'@10.10.10.10
identified by 'slavepass2';
Query OK, 0 rows affected (0.00 sec)
| А теперь перезапускаем оба сервера:
# /usr/local/etc/rc.d/mysql-server restart
| Итак, теперь помолимся пару секунд богам FreeBSD, можно в жертву принести компашку с Windows! :-)
Проверяем, на обоих серверах делаем:
mysql> show slave status\G;
| И если мы правильно молились, то увидим на обоих серверах:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
| Если у вас также, то боги вас услышали!
3. Тестируем:
На сервере Master (BSD2) добавляем таблицу в базе testdb:
mysql> use testdb;
Database changed
mysql> create table test (id int(11) auto_increment,name varchar(255),
primary key(id));
Query OK, 0 rows affected (0.02 sec)
| Проверяем на сервере Master (BSD1), добавилась ли таблица?
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| test |
+------------------+
1 row in set (0.01 sec)
| Теперь останавливаем любой из серверов, к примеру, Master (BSD1), а на сервере Master (BSD2) добавляем данные:
# /usr/local/etc/rc.d/mysql-server stop
|
mysql> insert into test (name) values('fox');
mysql> insert into test (name) values('fortero');
| Запускаем остановленный сервер:
# /usr/local/etc/rc.d/mysql-server start
| Проверяем, добавилась ли новая информация?
mysql> select * from test;
+----+---------+
| id | name |
+----+---------+
| 1 | fox |
| 2 | fortero |
+----+---------+
2 rows in set (0.00 sec)
| Работает! Можно ещё долго тестировать… Ну, это вы сами сможете сделать.
Примечания!
0. Будьте внимательны с нетрезвыми женщинами!
1. Будьте внимательны с конфигами, проверяйте, чтобы строки не повторялись!
2. Если вы переделываете уже существующий MySQL сервер, вам придётся лучше забекапить базы, грохнуть все файлы в директории /var/db/mysql/, разумеется папки с базами можно не трогать! Иначе могут быть косяки с репликацией!
3. Если вдруг ошиблись или поменяли ip адреса серверов, когда поменяете в конфиге ip репликации, то ещё надо будет грохнуть файл:
# rm /var/db/mysql/master.info
| 4. И обязательно нужно настроить правильно время на обоих серверах! Время должно чётко работать согласно временным поясам, лучше всего это организовать через ntpd демона, на данном ресурсе имеются статьи о том, как это сделать!
*************** КОНЕЦ ***************
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=25556.
размещено: 2010-04-14,
последнее обновление: 2015-04-07,
автор: fox
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение
Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга
Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff
Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
|
Комментарии пользователей [16 шт.]