Een heleboel bedrijven in het MKB staan er vaak niet bij stil dat zij diensten in huis hebben, of wellicht hosten die niet mogen uitvallen. Dit komt grotendeels door dat oplossingen voor hoge beschikbaarheid of redundantie zeer kostbaar zijn. Met dit artikel wil ik laten zien hoe je gemakkelijk een redundant MySQL systeem bouwt op 2 verschillende servers op verschillende locaties en de kosten ervan laag houdt.
In deze tutorial ga ik gebruik maken van de zogenaamde multimaster replicatie, beide databaseservers zijn tegelijk master en slave. Replicatie is niks anders dan gegevens in de ene database invoegen, verwijderen of wijzigen waarna automatisch de andere database dezelfde wijzigingen doorvoert. Het is zelfs mogelijk de gebruikers bij onderhoud aan de ene server door te verwijzen naar de ander. Wanneer de server dan weer online komt worden de wijzigingen vanuit een wachtrij alsnog doorgevoerd op deze server.
We willen natuurlijk dat het verkeer dat over het internet wordt verstuurd niet kan worden opgepakt door iemand anders dus we zullen een beveiligde verbinding moeten op zetten. Dit kan op twee manieren,
- Via een VPN tunnel. OpenVPN maakt een beveiligde Point-to-Point verbinding tussen twee servers. Authenticatie gaat met behulp van certificaten.
- nadeel, installeren en configureren van software
- voordeel, stabiele verbinding
- Via een SSH tunnel (OpenSSH)
- nadeel, onstabiele verbinding
- voordeel, gemakkelijk instellen
Vanwege de stabiliteit, we gingen voor hoge beschikbaarheid, ga ik voor de VPN oplossing. Deze vergt iets meer werk maar is betrouwbaarder. Je moet beide servers dus met deze software inrichten. Dit gaat met de meeste distributie’s zoals Debian of OpenSuse heel gemakkelijk met de apt of yast tool.
In dit eerste deel laat ik zien hoe je een beveiligde VPN verbinding opzet tussen de twee servers zodat we daar straks de replicatie overheen kunnen laten lopen.
Het configureren van een dergelijke VPN tunnel is gemakkelijk en bestaat uit een aantal regeltjes tekst die in een configuratie bestandje worden opgeslagen. Van belang is het te weten dat de bedrijfsrouter of firewall verkeer over UDP poort 1194 naar de server toestaat. Verder moet je bepalen welk IP-adres aan beide servers wordt toegekend zodat deze met elkaar kunnen communiceren via de tunnel. Met behulp van een certificaat dat we aanmaken wordt dan de beveiligde verbinding opgebouwd.
stappen:
1. Installeer op beide servers OpenVPN
2. maak een certificaat aan op de hoofdserver
3. Kopieer het certificaat ook naar je backupserver
4. Bepaal de TCP/IP adressen die gebruikt kunnen worden. Kies uit een 10 range bijvoorbeeld, zodat er geen IP conflicten op het lokale netwerk kunnen optreden.
5. Bewerk het configuratiebestand, meestal te vinden in de map /etc/openvpn
6. start de service en de verbinding wordt opgebouwd.
1. gebruik onderstaand voorbeeld op de OpenVPN software te installeren
Ubuntu/Debian: apt-get install openvpn
Fedora/CentOS/RedHat: yum install openvpn
2. Aanmaken van een certificaat,
geef het volgende commande in een terminal venster in met root rechten.
# openvpn --genkey --secret /etc/openvpn/dbrepl.key
3. Kopieer nu het aangemaakt key bestand met daarin je certificaat naar de andere server.
TIP: met behulp van SCP (Secure Copy) kan je gemakkelijk een bestand uploaden via een SSH verbinding
# scp /etc/openvpn/dbrepl.key root@andere-server:/etc/openvpn/dbrepl.key
Als je geen root rechten hebt via een SSH verbinding gebruik je een ander account, verplaats dan later het bestand naar de juiste directory.
4. Elke server’s eindpunt van de VPN tunnel moet een uniek IP adres hebben, aangezien we niet over het internet gaan met deze IP adressen gebruiken we de reeks uit de zogenaamde private range. We kiezen voor server A voor 10.1.0.1 en voor server B voor 10.1.0.2.
5. Maak een configuratiebestand onder /etc/openvpn/ op server A met bijvoorbeeld de naam openvpn.conf
#vi openvpn.conf
Neem de inhoud van dit bestand over van onderstaand voorbeeld. (gebruik i voor insert, dan een : gevolgd door w om op te slaan)
Voor server A ziet het configuratiebestand er als volgt uit:
dev tun
remote [IP adres of Servernaam van server B]
ifconfig 10.1.0.1 10.1.0.2
secret dbrepl.key
port 1194
proto udp
verb 1
keepalive 30 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
En voor server B ziet het configuratiebestand er als volgt uit:
dev tun
ifconfig 10.1.0.2 10.1.0.1
secret dbrepl.key
port 1194
proto udp
verb 1
keepalive 30 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
Kopieer ook dit bestand over naar je andere server, eventueel weer met SCP zoals hierboven beschreven.
6. Start of herstart de server
# /etc/init.d/openvpn start
Afhankelijk van je distributie kan dit afwijken maar in de meeste gevallen werkt dit bovenstaande.
Om nu de verbinding te testen hoeven we alleen nog maar een PING commando te geven naar de andere server op het IP adres dat we hebben opgegeven voor Server B.
# ping 10.1.0.2
vanaf server A:
Nu vanaf de andere machine
#ping 10.1.0.1
Vanaf server B:
Als je nu geen request time-out ziet is de verbinding succesvol opgezet. Je kan dit ook controleren door na het opstarten van de OpenVPN server het volgende commando te geven in je terminal:
# tail -n 20 /var/log/syslog
Als je iets ziet als [ openvpn: connection initiated] dan zit je goed.
Lees verder in deel 2: bouw-een-redundant-mysql-systeem-deel-2-replicatie/
further reading:
- http://www.howtoforge.com/mysql_master_master_replication
- http://www.brandonchecketts.com/archives/creating-a-permanent-ssh-tunnel-between-linux-servers
-http://en.wikipedia.org/wiki/Private_network






One Response to “Bouw een redundant mysql systeem – deel 1 OpenVPN”