Nell'articolo di oggi installeremo il cluster MariaDB Galera con HAproxy per MariaDB e wordpress con bilanciamento del carico. Galera è una tecnologia di clustering attivo-attivo, il che significa che può supportare le scritture su tutti i nodi che vengono quindi replicati nel cluster. Esiste anche il clustering attivo-passivo, in cui solo il nodo è scrivibile. Installeremo anche HAproxy per il bilanciamento del carico sul nostro cluster. L'installazione verrà eseguita su 5 server CentOS 7, tre per MariaDB 10.1 Galera, uno per Haproxy e uno per wordpress. HAproxy funziona in modo tale da instradare le richieste a ciascun nodo in modalità round robin, presentandosi come front-end. Qui stiamo usando il modo tradizionale di clustering avendo i server di database seduti in una rete privata e solo il server web si trova di fronte all'indirizzo IP pubblico.
Configurazione del cluster Galera
Su tutti i server è necessario installare mysql. Per prima cosa aggiungeremo repository
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
Quindi installiamo mariadb, rsync e xinetd
sudo yum install mariadb-server rsync xinetd
Dobbiamo modificare /etc/hosts, qualsiasi editor lo farà, ma io userò nano
nano /etc/hosts
Là fuori ip e nomi dei tuoi host, per esempio
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
Assicurati di utilizzare l'ip privato dei tuoi host, se usi quelli pubblici dovrai crittografare il traffico tra di loro per proteggere il tuo cluster.
Dopo aver installato MariaDB, modifica
nano /etc/my.cnf.d/server.cnf
Su tutti i server, devi trovare la sezione [galera] nel file e farlo sembrare così, salva gli indirizzi IP che sono in grassetto e dovrebbero essere modificati
[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
Osservare l'ammasso di Galera
Dopo che questo è stato configurato è necessario avviare il cluster
Prima sul nodo mariadb01 che è il master con questo comando
galera_new_cluster
Quindi su altri due nodi con il normale comando systemctl:
systemctl start mariadb
Successivamente possiamo verificare che il cluster sia in esecuzione:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
La prossima cosa sarebbe eseguire lo script mysql_secure_installation
mysql_secure_installation
Configurazione del firewalld
Ora, quando tutti e tre i nodi sono collegati, possiamo aprire firewalld e configurarlo.
systemctl start firewalld
Apri il client mariadb e le porte di replica galera:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
Apri la porta rsync che utilizziamo per la replica
firewall-cmd --permanent --add-port=873/tcp
Altri porti importanti
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
Infine ricarica il firewall
firewall-cmd --reload
Utilizzo di xinetd e clustercheck
Clustercheck è uno script utile per monitorare il cluster. Installiamolo seguendo i comandi
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x clustercheck
mv clustercheck /usr/bin/
Quindi dobbiamo aggiungere mysqlchk all'elenco dei servizi. Per questo modifichiamo il file dei servizi:
nano /etc/services
Poiché è un file lungo, in nano digita Ctrl-W e cerca 9200. Tutti i servizi che utilizzano quella porta devono essere commentati e il nuovo servizio deve essere aggiunto, quindi quella parte deve assomigliare a questa:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Quando questo è salvato e fatto, possiamo avviare xinetd
systemctl start xinetd
Tutto questo deve essere fatto su tutti i nodi e ora solo su master è necessario aggiungere l'utente per il controllo del cluster.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
Successivamente possiamo provare lo script clustercheck
clustercheck
Configurazione di HAproxy
Accedi al tuo server haproxy designato. Stiamo ora installando il sistema di bilanciamento del carico
Modifica il tuo file /etc/hosts in modo che sia qualcosa del genere (con i tuoi ips, ovviamente)
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
192.168.210.252 haproxy01
Successivamente possiamo installare haproxy
yum install haproxy
Quindi dobbiamo modificare rsyslog.conf
nano /etc/rsyslog.conf
Decommenta queste due righe
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Salva ed esci
echo 'local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
' >> /etc/rsyslog.d/haproxy.conf
consente di eseguire il backup della configurazione haproxy predefinita
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Quindi creiamo un nuovo file con nano
nano /etc/haproxy/haproxy.cfg
Usa questo pastebin come configurazione, ma cambia gli indirizzi IP.
È ora di configurare il firewall sul nodo haproxy
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Quindi ricarica il firewall
firewall-cmd --reload
Configurazione dell'accesso a MariaDB da HAproxy
Sul tipo di cluster mariadb:
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "verystrongpassword";
Quindi andiamo sul server haproxy01 e proviamo ad accedere al database.
Devi avere il client MariaDB installato, quindi facciamolo prima:
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
Era per aggiungere un repository, questo comando lo installa
yum install MariaDB-client
E poi testiamo se
mysql -u root -p -h 192.168.210.252 -P 3030 -e "select Host, User, Password from mysql.user"
Assicurati di inserire verystrongpassword come password e non la tua normale password di root.
Installazione di Wordpress
Infine configureremo wordpress da utilizzare sul nostro cluster. C'è del lavoro da fare sul nodo mariadb01, su haproxy01 e sul nodo wp01.
Su 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';
Sul nodo wp01 impostato in /etc/hosts/
192.168.220.17 wp01
192.168.210.252 haproxy01
Anche su haproxy01 aggiungi
192.168.220.17 wp01
Quindi dobbiamo installare i pacchetti richiesti sul nodo wp01
yum install httpd php php-gd php-mysqlnd rsync
Da qui è necessario utilizzare un account non root con privilegi sudo. Non ne ho uno, quindi lo creerò:
useradd miki
usermod miki -aG wheel
passwd miki
Quindi accedi come mio utente
su miki
Cambia dir in home
cd
E poi scarica l'ultima versione di wordpress e decomprila
wget http://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
Useremo rsync per copiare il wordpress nella directory di apache
sudo rsync -avP ~/wordpress/ /var/www/html/
mkdir /var/www/html/wp-content/uploads
Abbiamo anche bisogno di cambiare la proprietà per l'utente apache
sudo chown -R apache:apache /var/www/html/*
Configurazione di wordpress
WordPress è configurato nel file wp-config.php, lì è necessario impostare parametri come l'indirizzo host del server del database, le credenziali di accesso, il nome del database. Consente di eseguire il backup del file di configurazione:
cd /var/www/html
cp wp-config-sample.php wp-config.php
E poi facciamo editing:
nano wp-config.php
Cambia solo quelle righe
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');
Infine, riavviamo il server web apache:
sudo systemctl restart httpd
Completa l'installazione di WordPress dal browser
Possiamo andare all'indirizzo pubblico del nodo wordpress come di seguito per continuare il processo di installazione di wordpress
Ora abbiamo il cluster configurato con wordpress in esecuzione
Conclusione
Qui abbiamo impostato wordpress sopra il cluster Galera bilanciato da HAproxy. Questa è una soluzione resiliente per i siti con carichi elevati e, sebbene richieda del tempo per l'installazione, offre al tuo sito un'assicurazione quasi completa dai tempi di inattività. Tutto il traffico tra i nodi viene effettuato da indirizzi IP privati e per accedere al sito viene utilizzato un solo indirizzo pubblico per il front-end di Worpress. Questo sarebbe tutto per questo articolo, grazie per la lettura e buona giornata.