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.