V dnešním článku nainstalujeme cluster MariaDB Galera s HAproxy pro vyrovnávání zatížení MariaDB a wordpress. Galera je technologie aktivního shlukování, což znamená, že může podporovat zápisy na všechny uzly, které jsou pak replikovány napříč clusterem. Existuje také aktivní-pasivní shlukování, kde je zapisovatelný pouze uzel. Nainstalujeme také HAproxy pro vyrovnávání zátěže na náš cluster. Instalace bude provedena na 5 serverech CentOS 7, tři pro MariaDB 10.1 Galera, jeden pro Haproxy a jeden pro wordpress. HAproxy funguje tak, že směruje požadavky na každý uzel v kruhovém režimu, přičemž se prezentuje jako frontend. Zde používáme tradiční způsob klastrování, kdy databázové servery sedí v privátní síti a pouze webový server je obrácen k veřejné IP adrese.
Nastavení clusteru Galera
Na všechny servery musíme nainstalovat mysql. Nejprve přidáme úložiště
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
Poté nainstalujeme mariadb, rsync a xinetd
sudo yum install mariadb-server rsync xinetd
Potřebujeme upravit /etc/hosts, udělá to jakýkoli editor, ale já použiji nano
nano /etc/hosts
Například ip a jména vašich hostitelů
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
Ujistěte se, že používáte soukromou IP svých hostitelů, pokud používáte veřejné, budete muset šifrovat provoz mezi nimi, abyste zabezpečili svůj cluster.
Po instalaci MariaDB upravte
nano /etc/my.cnf.d/server.cnf
Na všech serverech musíte v souboru najít sekci [galera] a nechat to vypadat takto, s výjimkou IP adres, které jsou tučně a měly by být změněny
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
#add your node ips here
wsrep_cluster_address="gcomm://192.168.207.241,192.168.209.91,192.168.129.168"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#Cluster name
wsrep_cluster_name="linoxide_cluster"
# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0
# this server ip, change for each server
wsrep_node_address="192.168.207.241"
# this server name, change for each server
wsrep_node_name="mariadb01"
wsrep_sst_method=rsync
Prohlížení shluku Galera
Po této konfiguraci je třeba spustit cluster
Nejprve na uzlu mariadb01, který je hlavním s tímto příkazem
galera_new_cluster
Pak na dalších dvou uzlech s normálním příkazem systemctl:
systemctl start mariadb
Dále můžeme ověřit, že cluster běží:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Další věcí by bylo spustit skript mysql_secure_installation
mysql_secure_installation
Nastavení brány firewall
Nyní, když jsou všechny tři uzly připojeny, můžeme vyvolat firewall a nakonfigurovat jej.
systemctl start firewalld
Otevřete klienta mariadb a replikační porty galera:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
Otevřený port rsync, který používáme pro replikaci
firewall-cmd --permanent --add-port=873/tcp
Další důležité porty
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
Nakonec znovu načtěte firewall
firewall-cmd --reload
Použití xinetd a clustercheck
Clustercheck je užitečný skript pro monitorování clusteru. Nainstalujte jej pomocí následujících příkazů
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x clustercheck
mv clustercheck /usr/bin/
Dále musíme přidat mysqlchk do seznamu služeb. Za tímto účelem upravíme soubor služeb:
nano /etc/services
Protože je to dlouhý soubor, zadejte v nano Ctrl-W a vyhledejte 9200. Všechny služby používající tento port je třeba okomentovat a je třeba přidat novou službu, takže část musí vypadat takto:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Když je toto uloženo a hotovo, můžeme spustit xinetd
systemctl start xinetd
To vše je třeba provést na všech uzlech a nyní pouze na masteru musíme přidat uživatele pro clustercheck.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
Dále můžeme zkusit skript clustercheck
clustercheck
Nastavení HAproxy
Přihlaste se ke svému určenému haproxy serveru. Nyní instalujeme load balancer
Upravte svůj soubor /etc/hosts tak, aby byl něco takového (samozřejmě s vašimi ips)
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
192.168.210.252 haproxy01
Dále můžeme nainstalovat haproxy
yum install haproxy
Dále musíme upravit rsyslog.conf
nano /etc/rsyslog.conf
Odkomentujte tyto dva řádky
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Uložit a ukončit
echo 'local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
' >> /etc/rsyslog.d/haproxy.conf
umožňuje zálohovat výchozí konfiguraci haproxy
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Dále vytvoříme nový soubor s pomocí nano
nano /etc/haproxy/haproxy.cfg
Použijte tento pastebin jako konfiguraci, ale změňte IP adresy.
Je čas nastavit firewall na haproxy node
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Poté znovu načtěte firewall
firewall-cmd --reload
Nastavení přístupu k MariaDB z HAproxy
Na mariadb clusteru typu:
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "verystrongpassword";
Poté přejdeme na server haproxy01 a pokusíme se získat přístup k databázi.
Musíte mít nainstalovaného klienta MariaDB, takže nejprve to udělejte:
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
To bylo pro přidání úložiště, tento příkaz jej nainstaluje
yum install MariaDB-client
A pak otestujeme jestli
mysql -u root -p -h 192.168.210.252 -P 3030 -e "select Host, User, Password from mysql.user"
Ujistěte se, že jste jako heslo zadali velmi silné heslo a ne vaše běžné root heslo.
Instalace Wordpressu
Nakonec nastavíme wordpress pro použití v našem clusteru. Na uzlu mariadb01, haproxy01 a wp01 je potřeba ještě zapracovat.
Na mariadb01
mysql -u root -p
CREATE DATABASE wordpress;
CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
GRANT ALL ON wordpress.* TO wordpressuser@'192.168.210.252' IDENTIFIED BY 'password';
Na uzlu wp01 nastaveném v /etc/hosts/
192.168.220.17 wp01
192.168.210.252 haproxy01
Také na haproxy01 add
192.168.220.17 wp01
Dále musíme nainstalovat požadované balíčky na wp01 node
yum install httpd php php-gd php-mysqlnd rsync
Odtud musíme použít účet jiného uživatele než root s právy sudo. Žádný nemám, tak si ho vytvořím:
useradd miki
usermod miki -aG wheel
passwd miki
Poté se přihlaste jako můj uživatel
su miki
Změňte adresář na domov
cd
A pak si stáhněte nejnovější verzi wordpressu a rozbalte ji
wget http://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
Pro zkopírování wordpressu do apache dir
použijeme rsyncsudo rsync -avP ~/wordpress/ /var/www/html/
mkdir /var/www/html/wp-content/uploads
Musíme také změnit vlastnictví na uživatele Apache
sudo chown -R apache:apache /var/www/html/*
Konfigurace wordpressu
WordPress se konfiguruje v souboru wp-config.php, tam musíme nastavit parametry jako hostitelská adresa databázového serveru, přihlašovací údaje, název databáze. Umožňuje zálohovat konfigurační soubor:
cd /var/www/html
cp wp-config-sample.php wp-config.php
A pak provedeme úpravy:
nano wp-config.php
Změňte pouze tyto řádky
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', '192.168.210.252:3030');
Nakonec restartujeme webový server apache:
sudo systemctl restart httpd
Dokončete instalaci WordPressu z prohlížeče
Můžeme přejít na veřejnou adresu uzlu wordpress jako níže a pokračovat v procesu instalace word-press
Nyní máme cluster nastavený se spuštěným wordpress
Závěr
Zde jsme nastavili wordpress na vrcholu clusteru Galera vyváženého pomocí HAproxy. Jedná se o odolné řešení pro weby s vysokým zatížením, a přestože jeho nastavení chvíli trvá, poskytuje vašemu webu téměř kompletní pojištění proti výpadkům. Veškerý provoz mezi uzly je prováděn pomocí soukromých IP adres a pro přístup k webu se používá pouze jedna veřejná adresa pro frontend Worpress. To by bylo pro tento článek vše, děkuji za přečtení a přeji hezký den.