MySQL multimaster replikation med Galera

Multimaster replikation er når en eller flere database servere er koblet sammen og ændringer på en vilkårlig maskine effektueres på samtlige. Metoden beskrevet i dette indlæg er basseret på en tredieparts patch til MySQL og jeg vil demonstrere hvordan man laver det simplest mulige setup, nemlig et setup hvor vi kun benytter to servere.

Først starter jeg med mine to nyinstallerede maskiner lab1.mikjaer.com og lab2.mikjaer.com og installere lidt software på dem begge:

wget https://launchpad.net/codership-mysql/0.8/0.8.2/+download/mysql-server-wsrep-5.1.57-0.8.2-amd64.deb
wget https://code.launchpad.net/galera/0.8/0.8.2/+download/galera-0.8.2-amd64.deb

apt-get -y install libdbi-perl libdbd-mysql-perl mysql-client-5.1 libmysqlclient16 mysql-common libplrpc-perl libnet-daemon-perl vim

dpkg -i galera-0.8.2-amd64.deb mysql-server-wsrep-5.1.57-0.8.2-amd64.deb

Derefter starter vi begge MySQL servere og laver nogle basale adgangsindstillinger før vi starter replikatoren:

/etc/init.d/mysql start

/usr/bin/mysql_secure_installation   

mysql -pPASSWORD -e "SET wsrep_on = OFF; grant all on *.* to 'root'@'%' identified by 'PASSWORD';"

/etc/init.d/mysql stop

Efter kommando nr 2 bliver du guidet igennem MySQL opsætningen, husk og vælg et sikkert password, brug det samme på begge maskiner og anvend samme pasword i kommando nr 3 istedet for de to steder hvor der står PASSWORD.

Nu skal vi ha MySQL til at lytte på internettet efter indkomne forbindelser, rediger /etc/mysql/my.cnf og kommenter flg. linie ud (det betyder at sætte et #-mærke i starten af linie):

bind-address           = 127.0.0.1

Du kan evt. teste forbindelsen, du skal fra en prompt på lab1 kunne forbinde til lab2 og vica versa:

root@lab1:~# mysql -pPASSWORD -h lab2.mikjaer.com -e "select 5+5\G"
*************************** 1. row ***************************
5+5: 10
root@lab2:~# mysql -pPASSWORD -h lab1.mikjaer.com -e "select 5+5\G"
*************************** 1. row ***************************
5+5: 10

Som du kan se virkede det udemærket, og vi kan nu gå videre med at sætte replikering op, stop mysql på begge servere:

root@lab1:~# /etc/init.d/mysql stop
root@lab2:~# /etc/init.d/mysql stop

Derefter redigerer du /etc/mysql/conf.d/wsrep.cnf og sætter flg. værdier ind de rigtige steder (de er spredt lidt ned igennem filen)

wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_sst_auth=root:PASSWORD

og på den første server(lab1), i samme fil:

wsrep_cluster_address="gcomm://"

og på den anden(lab2):

wsrep_cluster_address="gcomm://192.168.0.10"

Her er det selvfølgelig lab1’s ip adresse jeg har brugt, slutteligt starter jeg begge servere igen:

root@lab1:~# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
root@lab2:~# /etc/init.d/mysql start
Starting MySQL database server: mysqld.

Herefter skulle replikering gerne køre, her er testen fra mit test-setup:

root@lab1:~# mysql -pPASSWORD -e "show databases";
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
root@lab2:~# mysql -pPASSWORD -e "create database foobar;";
root@lab1:~# mysql -pPASSWORD -e "show databases";
+--------------------+
| Database           |
+--------------------+
| information_schema |
| foobar             |
| mysql              |
+--------------------+
root@lab1:~# mysql -pPASSWORD -e "create database foobar2;";
root@lab2:~# mysql -pPASSWORD -e "show databases";
+--------------------+
| Database           |
+--------------------+
| information_schema |
| foobar             |
| foobar2            |
| mysql              |
+--------------------+

Et klassisk “ingen-ting-her-ingen-ting-der-scenario” 😉

Håber i kan bruge det … og hvis i overvejer at smide det i produktion så læs lige manualen først 🙂

Dette indlæg blev udgivet i Knowledge Base, Linux, Old Base, SQL. Bogmærk permalinket.

Skriv et svar