En el artículo de hoy, instalaremos el clúster MariaDB Galera con HAproxy para MariaDB y wordpress con equilibrio de carga. Galera es una tecnología de agrupación en clústeres activo-activo, lo que significa que puede admitir escrituras en todos los nodos que luego se replican en el clúster. También existe la agrupación en clústeres activo-pasivo, donde solo se puede escribir en el nodo. También instalaremos HAproxy para equilibrar la carga en nuestro clúster. La instalación se realizará en 5 servidores CentOS 7, tres para MariaDB 10.1 Galera, uno para Haproxy y otro para wordpress. HAproxy funciona de tal manera que enruta las solicitudes a cada nodo en modo round robin, mientras se presenta como un front-end. Aquí estamos utilizando la forma tradicional de agrupamiento al tener servidores de bases de datos ubicados en una red privada y solo el servidor web está frente a la dirección IP pública.
Configuración del clúster de Galera
En todos los servidores necesitamos instalar mysql. Primero agregaremos el repositorio
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
Luego instalamos mariadb, rsync y xinetd
sudo yum install mariadb-server rsync xinetd
Necesitamos editar /etc/hosts, cualquier editor servirá pero yo usaré nano
nano /etc/hosts
Por ahí ip y nombres de sus hosts, por ejemplo
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
Asegúrese de usar la IP privada de sus hosts, si usa los públicos, deberá cifrar el tráfico entre ellos para proteger su clúster.
Después de instalar MariaDB, edite
nano /etc/my.cnf.d/server.cnf
En todos los servidores, debe encontrar la sección [galera] en el archivo y hacer que se vea así, excepto las direcciones IP que están en negrita y deben cambiarse
[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
Mirando el Cúmulo de Galera
Después de configurar esto, debe iniciar el clúster
Primero en el nodo mariadb01 que es el maestro con este comando
galera_new_cluster
Luego, en otros dos nodos con el comando systemctl normal:
systemctl start mariadb
A continuación, podemos verificar que el clúster se está ejecutando:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Lo siguiente sería ejecutar el script mysql_secure_installation
mysql_secure_installation
Configuración del cortafuegosd
Ahora, cuando los tres nodos estén conectados, podemos abrir firewalld y configurarlo.
systemctl start firewalld
Abra el cliente mariadb y los puertos de replicación de galera:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
Abra el puerto rsync que usamos para la replicación
firewall-cmd --permanent --add-port=873/tcp
Otros puertos importantes
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
Por último recargar el cortafuegos
firewall-cmd --reload
Uso de xinetd y clustercheck
Clustercheck es un script útil para monitorear el clúster. Vamos a instalarlo siguiendo los comandos
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x clustercheck
mv clustercheck /usr/bin/
A continuación, debemos agregar mysqlchk a la lista de servicios. Para eso editamos el archivo de servicios:
nano /etc/services
Dado que es un archivo largo, en nano escriba Ctrl-W y busque 9200. Todos los servicios que usan ese puerto deben comentarse y se debe agregar un nuevo servicio, por lo que la parte debe verse así:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Cuando esto esté guardado y hecho, podemos iniciar xinetd
systemctl start xinetd
Todo esto debe hacerse en todos los nodos, y ahora solo en el maestro necesitamos agregar un usuario para el control de clúster.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
A continuación, podemos probar el script de verificación de clúster
clustercheck
Configuración de HAproxy
Inicie sesión en su servidor haproxy designado. Ahora estamos instalando el balanceador de carga
Edite su archivo /etc/hosts para que sea algo como esto (con sus ips, por supuesto)
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
192.168.210.252 haproxy01
Luego podemos instalar haproxy
yum install haproxy
A continuación, debemos editar rsyslog.conf
nano /etc/rsyslog.conf
Descomente esas dos líneas
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Guardar y salir
echo 'local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
' >> /etc/rsyslog.d/haproxy.conf
permite hacer una copia de seguridad de la configuración haproxy predeterminada
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
A continuación creamos un nuevo archivo con nano
nano /etc/haproxy/haproxy.cfg
Use este pastebin como configuración, pero cambie las direcciones IP.
Es hora de configurar el firewall en el nodo haproxy
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Luego recarga el firewall
firewall-cmd --reload
Configuración del acceso a MariaDB desde HAproxy
En el tipo de clúster mariadb:
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "verystrongpassword";
Luego vamos al servidor haproxy01 e intentamos acceder a la base de datos.
Debe tener instalado el cliente MariaDB, así que primero hagamos eso:
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
Eso fue para agregar repositorio, este comando lo instala
yum install MariaDB-client
Y luego probemos si
mysql -u root -p -h 192.168.210.252 -P 3030 -e "select Host, User, Password from mysql.user"
Asegúrese de ingresar una contraseña muy segura como contraseña y no su contraseña raíz habitual.
Instalación de WordPress
Por último, configuraremos wordpress para usar en nuestro clúster. Hay trabajo por hacer en el nodo mariadb01, en el nodo haproxy01 y en el nodo wp01.
En 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';
En el conjunto de nodos wp01 en /etc/hosts/
192.168.220.17 wp01
192.168.210.252 haproxy01
También en haproxy01 agregar
192.168.220.17 wp01
A continuación, debemos instalar los paquetes necesarios en el nodo wp01
yum install httpd php php-gd php-mysqlnd rsync
Desde aquí, necesitamos usar una cuenta que no sea root con privilegios sudo. No tengo uno, así que lo crearé:
useradd miki
usermod miki -aG wheel
passwd miki
Luego inicie sesión como mi usuario
su miki
Cambiar directorio a inicio
cd
Y luego descargue la última versión de wordpress y descomprímalo
wget http://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
Usaremos rsync para copiar wordpress a apache dir
sudo rsync -avP ~/wordpress/ /var/www/html/
mkdir /var/www/html/wp-content/uploads
También necesitamos cambiar la propiedad al usuario de apache
sudo chown -R apache:apache /var/www/html/*
Configuración de wordpress
WordPress está configurado en el archivo wp-config.php, allí debemos establecer parámetros como la dirección de host del servidor de la base de datos, las credenciales de inicio de sesión, el nombre de la base de datos. Hagamos una copia de seguridad del archivo de configuración:
cd /var/www/html
cp wp-config-sample.php wp-config.php
Y luego hacemos la edición:
nano wp-config.php
Solo cambia esas líneas
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');
Por último, reiniciamos el servidor web apache:
sudo systemctl restart httpd
Complete la instalación de WordPress desde el navegador
Podemos ir a la dirección pública del nodo de wordpress como se muestra a continuación para continuar con el proceso de instalación de word-press
Ahora tenemos el clúster configurado con wordpress ejecutándose
Conclusión
Aquí hemos configurado wordpress sobre el clúster de Galera balanceado por HAproxy. Esta es una solución resistente para sitios de alta carga y, aunque lleva un tiempo configurarlo, le brinda a su sitio un seguro casi completo contra el tiempo de inactividad. Todo el tráfico entre nodos se realiza mediante direcciones IP privadas, y solo se utiliza una dirección pública para el front-end de Worpress para acceder al sitio. Esto sería todo por este artículo, gracias por leer y que tenga un buen día.