Diferència entre revisions de la pàgina «ASIX/M10/UF2/A04/E2»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
Línia 213: Línia 213:
 
         per_source = UNLIMITED
 
         per_source = UNLIMITED
 
}
 
}
 +
</source>
 +
A l'arxiu <code>/etc/services</code> buscarem les entrades pel port 9200, les comentarem i hi afegirem una de nova, de manera que quedi així:
 +
<source>
 +
mysqlchk        9200/tcp                # Galera Clustercheck
 +
# wap-wsp      9200/tcp                # WAP connectionless session service
 +
# wap-wsp      9200/udp                # WAP connectionless session service
 
</source>
 
</source>
  

Revisió del 21:22, 13 maig 2018

Guillem Solà i Boeck (host A10BPC22)

Crear un cluster de MariaDB amb 3 nodes i 1 balancejador de càrrega

Disseny preliminar

  • node1 →192.168.56.101
  • node2 →192.168.56.102
  • node3 →192.168.56.103
  • haproxy →192.168.56.100

Requeriments

  • Necessitarem tenir instal·lat el programa rsync, que és en el qual es recolza Galera per a fer la sincronització entre nodes amb yum install rsync -y
  • Farem servir un script simple per a fer la configuració de la xarxa: adreça IP i nom de host
NEWIP=$1
NEWHOSTNAME=$2

rm -f /etc/udev/rules.d/70-persistent-net.rules

cat > /etc/sysconfig/network-scripts/ifcfg-enp0s8 <<DELIMIT
DEVICE=enp0s8
ONBOOT=yes
BOOTPROTO=static
IPADDR=$NEWIP
DELIMIT

cat > /etc/sysconfig/network <<DELIMIT
NETWORKING=yes
HOSTNAME=$NEWHOSTNAME
DELIMIT

cat > /etc/hostname <<DELIMIT
$NEWHOSTNAME
DELIMIT
  • Necessitarem instal·lar MariaDB 10.x ja que incorpora el sistema Galera que permet muntatge de clústers. Com que CentOS 7 inclou per defecte el repositori per a MariaDB 5, haurem d'afegir manualment el repositori de la versió 10 com s'indica a la pàgina oficial.
  • OPCIONAL: podem optar per instal·lar les network-tools i l'editor de text nano si ens hi sentim més còmodes. Encara que hi ha l'editor vi per defecte i també tenim la comanda ip a per a saber l'adreça IP d'aquella màquina en cas de necessitar-ho.

Creació i configuració del cluster

Una vegada acomplerts els requeriments, actualitzarem el sistema amb yum update -y i instal·larem MariaDB 10.x amb yum install MariaDB (parar atenció amb les majúscules, perquè sinó, instal·larem la versió 5). Mentre s'instal·la, aprofitant que podem obrir vàries connexions SSH, podem desactivar el SELinux per a evitar problemes per culpa de permisos: posarem disabled a la línia 6 de l'arxiu.

vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

També desactivarem el firewalld amb systemctl disable firewalld i així ens estalviem d'obrir ports. Així doncs, quan estigui tot a punt, podem reiniciar la màquina perquè s'apliquin els canvis del SeLinux i el Firewall.

Un cop reiniciat, posarem a punt el servei MariaDB amb la comanda mysql_secure_installation i escollirem les opcions adequades:

[root@node1 ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Després aturarem el servei systemctl stop mariadb per a poder editar sense problemes l'arxiu de configuració per a, més endavant, poder posar en marxa el cluster.

vi /etc/my.cnf.d/server.cnf

Editarem la secció [galera] i la deixarem de la següent forma:

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_cluster_address=gcomm://192.168.56.101,192.168.56.102,192.168.56.103
wsrep_node_address=192.168.56.101
wsrep_node_incoming_address=192.168.56.101
# wsrep_sst_donor =
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_buffer_pool_size=122M

wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="m10cluster"
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=0
wsrep_max_ws_size=2147483647
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_notify_cmd=

#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
#
# Optional setting
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0

Les línies marcades (5 i 6) són les que s'han de modificar i posar l'adreça IP del node que estem configurant.

Ara ja podem agafar aquesta màquina virtual, apagar-la i fer-ne 2 clons per als altres 2 nodes. Una vegada clonades 2 màquines més, haurem d'engegar-les una per una perquè no hi hagi conflicte de IPs i executarem l'script d'abans per a configurar el hostname i l'adreça que li pertoqui. També haurem d'editar l'arxiu /etc/mysql.cnf.d/server.cnf per a adaptar l'adreça del node a la que correspongui.

Quan ho tinguem tot a punt, tornarem al node 1 i arrencarem el servei amb la comanda galera_new_cluster i esperarem que engegui sense problemes. Llavors, quan hagi arrencat, podrem anar als altres 2 nodes i engegar el servidor SQL normalment systemctl start mysql. Si tot va bé, tindrem el cluster en funcionament.

Comprovació de funcionament

Per tal de comprovar que estigui funcionant podem executar la consulta següent al node principal:

show status like '%wsrep_cluster_size%';

I ens retornarà el tamany del clúster (quantitat de nodes connectats)

Veiem la mida que és 3, corresponent als 3 nodes que hem configurat


Aleshores, podem provar de crear una base de dades de prova des d'un lloc i esborrar-la des d'un altre node i visualitzar-ho:

Creo una base de dades "Guillem" des del node2


Llisto i elimino la base de dades "Guillem" des del node3


Llisto les bases de dades des del node1 i veig que s'ha eliminat la que he creat i eliminat anteriorment


Creació i configuració del balancejador de càrrega

En aquesta pràctica utilitzarem el programa HAProxy per a desenvolupar aquesta tasca. Utilitzarem un CentOS 7 com a base amb les interfícies de xarxa configurades tal com a l'apartat de disseny i utilitzant l'script de configuració definit al principi de la pràctica.

Instal·lació

El programari HAProxy està disponible als repositoris per defecte del sistema, per tant, l'instal·larem com de costum:

yum install haproxy

Després editarem el fitxer /etc/hosts per a resoldre els hostnames cap a IPs dels nodes del cluster:

nano /etc/hosts
192.168.56.101  node1
192.168.56.102  node2
192.168.56.103  node3
192.168.56.100  haproxy

Configuració

Descarregarem l'script de clustercheck que permet a HAProxy saber si un node està operatiu o no i el copiarem a /usr/bin/clustercheck i el farem executable amb chmod 755 /usr/bin/clustercheck Ara entrarem al cluster de mariadb i crearem un usuari per a aquest script:

GRANT PROCESS ON *.* TO 'clustercheckuser'@'%' IDENTIFIED BY 'clustercheck';

Llavors instal·larem xinetd amb yum install xinetd en tots els nodes que formen el cluster. Afegirem el fitxer a tots els nodes:

nano /etc/xinetd.d/mysqlcheck
# default: on
# description: mysqlchk
service mysqlchk
{
        disable = no
        flags = REUSE
        socket_type = stream
        port = 9200
        wait = no
        user = nobody
        server = /usr/bin/clustercheck
        log_on_failure += USERID
        only_from = 0.0.0.0/0
        per_source = UNLIMITED
}

A l'arxiu /etc/services buscarem les entrades pel port 9200, les comentarem i hi afegirem una de nova, de manera que quedi així:

mysqlchk        9200/tcp                # Galera Clustercheck
# wap-wsp       9200/tcp                # WAP connectionless session service
# wap-wsp       9200/udp                # WAP connectionless session service











Descomentarem les línies 15 i 16 de /etc/rsyslog.conf; referents a logs via UDP. Després editarem l'arxiu /etc/rsyslog.d/haproxy.conf i hi afegirem el contingut

local2.=info     /var/log/haproxy-access.log
local2.notice    /var/log/haproxy-info.log

Desarem l'arxiu i reiniciarem el servei de rsyslog systemctl restart rsyslog Aleshores farem un backup de l'arxiu de configuració per defecte mv /etc/haproxy/haproxy.cfg haproxy.cfg.orig i editarem un de nou, mirant els paràmetres variables i adaptar-los en conseqüència: adreces IP dels nodes del cluster, tipus de balanceig, port d'escolta, usuari i password d'accés al web d'estadístiques...

nano /etc/haproxy/haproxy.cfg
global
        log 127.0.0.1   local2
        maxconn 1024
        user haproxy
        group haproxy
        daemon
        stats socket /var/run/haproxy.sock mode 600 level admin         # Make sock file for haproxy
 
defaults
        log     global
        mode    http  
        option  tcplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 1024
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
 
listen m10cluster 0.0.0.0:3306
## MariaDB balance roundrobin - the cluster listening on port 3030.
        mode tcp
        balance roundrobin
        option httpchk
        server mariadb1 192.168.56.101:3306 check port 9200
        server mariadb2 192.168.56.102:3306 check port 9200
        server mariadb3 192.168.56.103:3306 check port 9200
 
listen stats 0.0.0.0:9000
## HAProxy stats web gui running on port 9000 - usuari/password.
        mode http
        stats enable
        stats uri /stats
        stats realm HAProxy\ Statistics
        stats auth usuari:password  
        stats admin if TRUE

No ens hem de descuidar de deshabilitar el firewall systemctl stop firewalld && systemctl disable firewalld i editar l'arxiu /etc/selinux/config per a deshabilitar el SELinux i evitar problemes de connectivitat. Reiniciar per aplicar els canvis de SELinux.

Recursos web