lunes, 10 de diciembre de 2018

Instalar vCenter Server Appliance 6.5 (VCSA) de VMware

Requisitos mínimos para instalar vCSA 6.5

Como siempre, lo primero es verificar los requisitos mínimos para poder instalar vCenter Server Appliance 6.5.
Te resumo, si lo que quieres es instalar una versión de prueba con PSC y VCSA en la misma máquina, necesitas 10gb de Ram, 2 CPU´s y 250Gb de disco (que pueden ser menos si lo pones en thin).
Para empezar la instalación del VCSA, cargamos la ISO en cualquier máquina con acceso a los ESXi y corremos la instalación.
Ahora tenemos que escoger la opción install
La introducción nos indica que la instalación del vCenter Server Appliance consta de 2 partes: Despliegue y configuración.

Despliegue de vCenter Server Appliance 6.5 (VCSA 6.5)
 Aprobamos los términos de licencia.
Ahora viene la primera decisión importante. Como te comentaba al principio, puedes decidir instalar PSC (Platform Services Controller)y VCSA en el mismo Appliance o por el contrario, si vas a tener varios vCenter Server instalarlo por separado.
En este caso como es una instalación de pruebas y sé que no voy a instalar más vCenter Server, elijo la primera opción (embedded).
Ahora tenemos que poner la Ip y password de root del ESXi donde vamos a desplegar el VCSA 6.5.
Aceptamos el Warning ya que no tenemos instalado ningún certificado SSL.
Ahora le ponemos nombre al vCenter Server Appliance y contraseña compleja para root (recuerda que el VCSA es Linux).
Nos toca escoger un tamaño aproximado para el despliegue.
Como ves, los requisitos mínimos son los que te comentaba antes. 2 CPUs, 10GB de Memoria y 250GB de Espacio.
Recuerda que si escoges thin en la próxima pantalla, no necesitas los 250GB de disco.
Ahora escogemos el datastore y abajo puedes seleccionar si va a ser Thin o no. Si es una versión de prueba, no lo dudes, thin.
Ahora vamos a configurar la red de nuestro vCenter Server Appliance.
Recuerda crear antes en tu DNS una reserva y utilizar una IP fija, así evitarás problemas.
Ya hemos acabado de configurar el despliegue. Revisa que el resumen es correcto y finish!
Dependiendo de tu red, suele tardar entre 10 y 30 minutos.
Si por alguna razón, no vas a seguir ahora con la configuración, apunta la dirección de la url para proseguir después (es la url del vcsa pero con el puerto 5480).
Puedes comprobar en tu ESXi que se ha desplegado correctamente.
Ya has completado el primer paso para instalar vCenter Server Appliance 6.5.
Ahora toca configurar VCSA.

Configurar vCenter Server Appliance 6.5 (VCSA 6.5)

Una vez desplegado, vamos a proceder al stage 2 de la instalación del vCenter Server Appliance: Configuración.
Primero escogemos de donde va a sincronizar la hora y si queremos habilitar el acceso SSH al VCSA (yo si quiero).
En este caso he escogido el ESXi porque no tengo instalado ningún NTP.
Ahora escogemos el nombre de dominio del Single Sign-On (SSO), el site name y password compleja.

Como ves yo he dejado todos los nombres por defecto, pero si vas a instalar vCenter Server Appliance en tu empresa, te recomiendo que lo personalices.
A tu elección dejo si quieres formar parte del programa de experiencia de VMware.
Ya sabes que en este caso mandarás datos no sensibles para que los analicen.
Y voilá. Comprueba en el resumen que todo es correcto y a configurar!
En mi caso, la configuración ha tardado unos 40 minutos.
Una vez acabado ya puedes acceder a la dirección url de tu nuevo VCSA.
Recuerda que para acceder puedes usar https:// y la dirección que configuraste en el system name cuando configuraste el networking, o puedes ponerle simplemente la IP.
Una vez dentro puedes escoger si utilizar la versión flash o la HTML5.


Para acceder tienes que utilizar tu usuario administrador (administrator) del SSO que configuraste anteriormente.
Pues hasta aquí este tutorial de como instalar vCenter Server Appliance 6.5 (VCSA 6.5).

FIN - Jose Montilva

jueves, 6 de diciembre de 2018

Configuración de VMware Verify con Workspace

¿Qué es VMware Verify?
VMware Verify facilita el uso de la autenticación de dos factores en su cuenta con su teléfono inteligente. Le proporcionamos una aplicación que le facilita conservar todos sus tokens y que “solo” funciona para una autenticación sólida. Nuestro objetivo es hacer que sea fácil y sencillo para cualquier persona utilizar la autenticación de dos factores en su cuenta.

Descargar VMware VerifyVMware Verify se puede descargar desde Apple App Store y Google Play para dispositivos móviles Android. La descarga es gratuita y cualquier usuario que esté sujeto a una autenticación multifactor mediante VMware Verify deberá descargar esta aplicación móvil.
Debajo están los enlaces para páginas de descarga de ISO y Android. Estas aplicaciones también se pueden descargar a través de la tienda de aplicaciones de su proveedor de servicios móviles.

Cómo registrar la aplicación VMware Verify en su dispositivo móvil
  1. Ingrese su número de teléfono aquí.
2. Si no tiene una cuenta, ingrese su correo electrónico para crear una.

3. Por seguridad, se le enviará un PIN de registro por SMS o se le llamará desde su teléfono móvil. Una vez que recupere este código de verificación, deberá ingresarlo en la aplicación móvil VMware Verify.
4. También se le puede pedir que configure un pin de protección de cuatro dígitos.
5. Después de configurar el código de verificación (si es necesario) e ingresar el código de verificación, VMware Verify está listo para usar en su dispositivo móvil.


Agregue VMware Verify a la aplicación Identity Manager
Los tokens de VMware Verify son generados por VMware y se proporcionan a los clientes después de que el dispositivo / sistema inicial del inquilino esté en línea y configurado. El proveedor de identidades de VMware Verify está integrado en el administrador de identidades.
Una vez que haya recibido el token de VMware, siga los pasos a continuación para crear un proveedor de identidad de VMware Verify.
  1. Vaya a Identity & Access Management> Authentication Methods . Seleccione el icono de lápiz a la derecha de VMware Verify .
2. Haga clic en Habilitar verificación de VMware Pegue el token de seguridad que recibió de VMware en el cuadro de texto " Token de seguridad ". Haga clic en  Guardar  para almacenar el token en la base de datos y habilitar VMware Verify dentro de Identity Manager. Esta configuración solo debe hacerse una vez. La configuración se aplicará a todos los dispositivos del clúster. Es importante mencionar que este token de seguridad lo suministra directamente VMware, el cual debe solicitarlo directamente a su agente.
3. En la pestaña Identity & Access Management , vaya a  Manage > Identity Providers . 
Haga clic en  Agregar proveedor de identidad y seleccione  Crear IDP integrado . 
- Proporcionar un nombre para el nuevo proveedor de identidad. 
- Selecciona qué usuarios serán sujetos de autenticación. 
- Seleccione VMware Verify como el método de autenticación. 
- Haga clic en Agregar para guardar la configuración del proveedor de identidad.

4. En la pestaña Identity & Access Management , vaya a Policies . Haga clic en Agregar política .

5. En el nuevo cuadro de diálogo de políticas, agregue un Nombre de política , seleccione las aplicaciones que estarán sujetas a la autenticación multifactor de VMware Verify y defina Reglas de política . En este ejemplo, requeriremos que la ejecución de Microsoft Excel 2010 esté sujeta a la autenticación de VMware Verify.
- Proporcionar un nombre de política . 
- Seleccione la aplicación a la que se aplicará la autenticación multifactorial de VMware Verify. 
- Haga clic en el + para definir las reglas de la política. 
- A continuación, haga clic en Guardar .
(La siguiente captura de pantalla muestra la configuración de la política después de que se hayan seleccionado las aplicaciones y se haya definido la regla de la política).

6. Elija un Rango de red y seleccione los tipos de dispositivos a los que se aplica esta política. Elija VMware Verify en la lista de métodos de autenticación, luego haga clic en Aceptar .
 7. Haga clic en Guardar para crear la nueva política.
8. Valide las Políticas de acceso a la aplicación para que la aplicación esté configurada correctamente.
9. Inicie sesión en Identity Manager como usuario. Haga clic en Abrir en la aplicación definida en la política para la autenticación multifactor de VMware Verify.
10. Al hacer clic en Abrir en la aplicación, se abrirá el diálogo de verificación de VMware para la autenticación multifactor. Seleccione el código de país para el número de teléfono registrado con VMware Verify. Ingrese el número de teléfono registrado con VMware Verify, luego haga clic en Iniciar sesión .
11. Dependiendo de la configuración de VMware Verify del usuario, se le pedirá al usuario que ingrese un token o que apruebe la solicitud de inicio en su dispositivo móvil. Una vez autenticado a través de VMware Verify, el usuario podrá reiniciar la aplicación sin volver a autenticarse durante la sesión del administrador de identidades. En otras palabras, cerrar y ejecutar la aplicación nuevamente en la misma sesión del administrador de identidades no requerirá la autenticación de VMware Verify.

12. Para ver la actividad de VMware Verify de los usuarios a través de Identity Manager, vaya a Usuarios y grupos> Usuarios . Seleccione un usuario y elija VMware Verify . También puede restablecer VMWare Verify desde esta pantalla para usuarios individuales.
Agregar autenticación VMware Verify al inicio de sesión de Identity Manager
La autenticación multifactor de VMware Verify se puede aplicar en el inicio de sesión de Identity Manager. Para lograr esto, necesita editar la política adecuada para incluir VMware Verify y el método de autenticación adecuado.
La captura de pantalla a continuación muestra cómo se requiere VMware Verify antes de que un usuario ingrese sus credenciales de inicio de sesión de red estándar. En el ejemplo, el método de autenticación se aplica a todos los rangos de red y todos los tipos de dispositivos. Dependiendo de sus necesidades específicas, estas opciones pueden ser diferentes.

FIN - Jose Montilva

Instalación y Configuración de MariaDB con Galera-Cluster y HAproxy

Creando Cluster con Mariadb Galera Cluster 5.5 -  2 nodos

MariaDB galera cluster 5.5 en Centos 7 64bts


Vamos a instalar en 2 servidores
nodo1 = 100.4.6.18
nodo2 = 100.4.6.19


Primero instalamos el repositorio en /etc/yum.repos.d/mariadb.repo (Esto se debe realizar el cada nodo)
nano /etc/yum.repos.d/mariadb.repo
y pegamos el siguiente código:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5-galera/centos7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


Deshabilitar Selinux (Esto se debe realizar el cada nodo)

sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config

Deshabilitar firewall (firewalld) (Esto se debe realizar el cada nodo)

systemctl disable firewalld

Comenzaremos por instalar Epel-release package y actualizando el sistema


rpm --import /etc/pki/rpm-gpg/RPM-GPG*
yum install -y epel-release
yum update –y
yum remove mariadb-libs -y


Instalamos MariaDB galera server, el cliente de mariaDB y galera, si teníamos una instalación de mariadb o mysql tenemos que remover la antes de instalar.

yum install MariaDB-Galera-server MariaDB-client galera

Iniciamos el servicio de MariaDB

service mysql start
Starting MySQL.... SUCCESS! 
Se realiza cambio de contraseña y actualización de MariaDB

mysql_secure_installation

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!

Detenemos mysql y modificamos el archivo que se encuentra en /etc/my.cnf.d/server.cnf

nano /etc/my.cnf.d/server.cnf

Agregamos lo siguiente (Esto lo aplicaremos en el nodo1 - 100.4.6.18)

[mariadb]
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://100.4.6.19
wsrep_cluster_name='cluster1'
wsrep_node_address='100.4.6.18'
wsrep_node_name='nodo1'
wsrep_sst_method=rsync
wsrep_sst_auth=root:Password


Guardamos y repetimos los pasos para nodo 2 - 100.4.6.19

La configuración del nodo2 debería quedar así:

[mariadb]
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://100.4.6.18
wsrep_cluster_name='cluster1'
wsrep_node_address='100.4.6.19'
wsrep_node_name='nodo2'
wsrep_sst_method=rsync
wsrep_sst_auth=root:Password



Una vez instalado y configurado tenemos que bajar los servicios de mysql en los 2 nodos 

service mysql stop

Ahora tenemos que iniciar los servicios mysql
Iniciamos el nodo1 con 
service mysql bootstrap  - Esto indica que es el nodo principal 

El resto de los nodos los iniciamos con:
service mysql start

Luego, si cae un nodo cualquiera se inicia con: 
service mysql start.

En caso de que se caigan o apaguen todos los nodos tendríamos que iniciar primero el último nodo que se apagó de la siguiente manera
nano /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid:    26d64af8-0115-11e8-b5a3-6b80cc16ab22
seqno:   -1
safe_to_bootstrap: 1

service mysql bootstrap 

El resto con
service mysql start

El password del usuario root en todos los nodos tiene que ser el mismo

Ahora para probar en alguno de los nodos conectamos a la consola de mysql
mysql -u root -p

Ingresamos el password del root y nos muestra:

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.49-MariaDB-wsrep MariaDB Server, wsrep_25.14.r9949137

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

si escribimos la orden  SHOW STATUS LIKE 'wsrep_%';

MariaDB [(none)]>  SHOW STATUS LIKE 'wsrep_%';

Así debe Mostrarse la conexión
+------------------------------+------------------------------------------------                                                                                                             ---+
| Variable_name                | Value                                                                                                                                                          |
+------------------------------+------------------------------------------------                                                                                                             ---+
| wsrep_local_state_uuid       | 26d64af8-0115-11e8-b5a3-6b80cc16ab22                                                                                                                           |
| wsrep_protocol_version       | 7                                                                                                                                                              |
| wsrep_last_committed         | 359                                                                                                                                                            |
| wsrep_replicated             | 0                                                                                                                                                              |
| wsrep_replicated_bytes       | 0                                                                                                                                                              |
| wsrep_repl_keys              | 0                                                                                                                                                              |
| wsrep_repl_keys_bytes        | 0                                                                                                                                                              |
| wsrep_repl_data_bytes        | 0                                                                                                                                                              |
| wsrep_repl_other_bytes       | 0                                                                                                                                                              |
| wsrep_received               | 3                                                                                                                                                              |
| wsrep_received_bytes         | 343                                                                                                                                                            |
| wsrep_local_commits          | 0                                                                                                                                                              |
| wsrep_local_cert_failures    | 0                                                                                                                                                              |
| wsrep_local_replays          | 0                                                                                                                                                              |
| wsrep_local_send_queue       | 0                                                                                                                                                              |
| wsrep_local_send_queue_max   | 1                                                                                                                                                              |
| wsrep_local_send_queue_min   | 0                                                                                                                                                              |
| wsrep_local_send_queue_avg   | 0.000000                                                                                                                                                       |
| wsrep_local_recv_queue       | 0                                                                                                                                                              |
| wsrep_local_recv_queue_max   | 2                                                                                                                                                              |
| wsrep_local_recv_queue_min   | 0                                                                                                                                                              |
| wsrep_local_recv_queue_avg   | 0.333333                                                                                                                                                       |
| wsrep_local_cached_downto    | 18446744073709551615                                                                                                                                           |
| wsrep_flow_control_paused_ns | 0                                                                                                                                                              |
| wsrep_flow_control_paused    | 0.000000                                                                                                                                                       |
| wsrep_flow_control_sent      | 0                                                                                                                                                              |
| wsrep_flow_control_recv      | 0                                                                                                                                                              |
| wsrep_cert_deps_distance     | 0.000000                                                                                                                                                       |
| wsrep_apply_oooe             | 0.000000                                                                                                                                                       |
| wsrep_apply_oool             | 0.000000                                                                                                                                                       |
| wsrep_apply_window           | 0.000000                                                                                                                                                       |
| wsrep_commit_oooe            | 0.000000                                                                                                                                                       |
| wsrep_commit_oool            | 0.000000                                                                                                                                                       |
| wsrep_commit_window          | 0.000000                                                                                                                                                       |
| wsrep_local_state            | 4                                                                                                                                                              |
| wsrep_local_state_comment    | Synced                                                                                                                                                         |
| wsrep_cert_index_size        | 0                                                                                                                                                              |
| wsrep_causal_reads           | 0                                                                                                                                                              |
| wsrep_cert_interval          | 0.000000                                                                                                                                                       |
| wsrep_incoming_addresses     | 100.4.6.18:3306,100.4.6.19:3306                                                                                                                            |
| wsrep_desync_count           | 0                                                                                                                                                              |
| wsrep_evs_delayed            |                                                                                                                                                                |
| wsrep_evs_evict_list         |                                                                                                                                                                |
| wsrep_evs_repl_latency       | 0.000179983/0.000280134/0.000420615/0.000100374                                                                                                             /4 |
| wsrep_evs_state              | OPERATIONAL                                                                                                                                                    |
| wsrep_gcomm_uuid             | d395ad92-0108-11e8-902c-dba0c0bb7787                                                                                                                           |
| wsrep_cluster_conf_id        | 2                                                                                                                                                              |
| wsrep_cluster_size           | 2                                                                                                                                                              |
| wsrep_cluster_state_uuid     | 26d64af8-0115-11e8-b5a3-6b80cc16ab22                                                                                                                           |
| wsrep_cluster_status         | Primary                                                                                                                                                        |
| wsrep_connected              | ON                                                                                                                                                             |
| wsrep_local_bf_aborts        | 0                                                                                                                                                              |
| wsrep_local_index            | 0                                                                                                                                                              |
| wsrep_provider_name          | Galera                                                                                                                                                         |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>                                                                                                                              |
| wsrep_provider_version       | 25.3.22(r3764)                                                                                                                                                 |
| wsrep_ready                  | ON                                                                                                                                                             |
| wsrep_thread_count           | 2                                                                                                                                                              |
+------------------------------+------------------------------------------------                                                                                                             ---+
58 rows in set (0.00 sec)
  

wsrep_incoming_addresses : 100.4.6.18:3306,100.4.6.19:3306
wsrep_cluster_size: 2

Como se puede ver en las dos variables indican las ip conectadas y en cluster size la cantidad de nodos 


------------------------------------------------------------------------------------------------------------------------

Balanceador – HAproxy 100.4.6.17

Primero instalamos el repositorio en /etc/yum.repos.d/mariadb.repo (Esto se debe realizar para la instalación del cliente de MariaDB)
nano /etc/yum.repos.d/mariadb.repo
y pegamos el siguiente código:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5-galera/centos7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


Deshabilitar Selinux (Esto se debe realizar el cada nodo)

sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config

Deshabilitar firewall (firewalld) (Esto se debe realizar el cada nodo)

systemctl disable firewalld

init 6

Ejecutar


rpm --import /etc/pki/rpm-gpg/RPM-GPG*
yum update –y
yum install haproxy

Ingresar en el Nodo1 de MariaDB 100.4.6.18

Ingresar a la ruta
 cd /usr/bin
 nano clustercheck 
Debes pegar el siguiente script

#!/bin/bash
#
# Script to make a proxy (ie HAProxy) capable of monitoring Percona XtraDB Cluster nodes properly
#
# Author: Olaf van Zandwijk <olaf.vanzandwijk@nedap.com>
# Author: Raghavendra Prabhu <raghavendra.prabhu@percona.com>
#
# Documentation and download: https://github.com/olafz/percona-clustercheck
#
# Based on the original script from Unai Rodriguez
#

if [[ $1 == '-h' || $1 == '--help' ]];then
    echo "Usage: $0 <user> <pass> <available_when_donor=0|1> <log_file> <available_when_readonly=0|1> <defaults_extra_file>"
    exit
fi

# if the disabled file is present, return 503. This allows
# admins to manually remove a node from a cluster easily.
if [ -e "/var/tmp/clustercheck.disabled" ]; then
    # Shell return-code is 1
    echo -en "HTTP/1.1 503 Service Unavailable\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 51\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is manually disabled.\r\n"
    sleep 0.1
    exit 1
fi

MYSQL_USERNAME="${1-clustercheckuser}"
MYSQL_PASSWORD="${2-clustercheckpassword!}"
AVAILABLE_WHEN_DONOR=${3:-0}
ERR_FILE="${4:-/dev/null}"
AVAILABLE_WHEN_READONLY=${5:-1}
DEFAULTS_EXTRA_FILE=${6:-/etc/my.cnf}

#Timeout exists for instances where mysqld may be hung
TIMEOUT=10

EXTRA_ARGS=""
if [[ -n "$MYSQL_USERNAME" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --user=${MYSQL_USERNAME}"
fi
if [[ -n "$MYSQL_PASSWORD" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --password=${MYSQL_PASSWORD}"
fi
if [[ -r $DEFAULTS_EXTRA_FILE ]];then
    MYSQL_CMDLINE="mysql --defaults-extra-file=$DEFAULTS_EXTRA_FILE -nNE --connect-timeout=$TIMEOUT \
                    ${EXTRA_ARGS}"
else
    MYSQL_CMDLINE="mysql -nNE --connect-timeout=$TIMEOUT ${EXTRA_ARGS}"
fi
#
# Perform the query to check the wsrep_local_state
#
WSREP_STATUS=$($MYSQL_CMDLINE -e "SHOW STATUS LIKE 'wsrep_local_state';" \
    2>${ERR_FILE} | tail -1 2>>${ERR_FILE})

if [[ "${WSREP_STATUS}" == "4" ]] || [[ "${WSREP_STATUS}" == "2" && ${AVAILABLE_WHEN_DONOR} == 1 ]]
then
    # Check only when set to 0 to avoid latency in response.
    if [[ $AVAILABLE_WHEN_READONLY -eq 0 ]];then
        READ_ONLY=$($MYSQL_CMDLINE -e "SHOW GLOBAL VARIABLES LIKE 'read_only';" \
                    2>${ERR_FILE} | tail -1 2>>${ERR_FILE})

        if [[ "${READ_ONLY}" == "ON" ]];then
            # Percona XtraDB Cluster node local state is 'Synced', but it is in
            # read-only mode. The variable AVAILABLE_WHEN_READONLY is set to 0.
            # => return HTTP 503
            # Shell return-code is 1
            echo -en "HTTP/1.1 503 Service Unavailable\r\n"
            echo -en "Content-Type: text/plain\r\n"
            echo -en "Connection: close\r\n"
            echo -en "Content-Length: 43\r\n"
            echo -en "\r\n"
            echo -en "Percona XtraDB Cluster Node is read-only.\r\n"
            sleep 0.1
            exit 1
        fi
    fi
    # Percona XtraDB Cluster node local state is 'Synced' => return HTTP 200
    # Shell return-code is 0
    echo -en "HTTP/1.1 200 OK\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 40\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is synced.\r\n"
    sleep 0.1
    exit 0
else
    # Percona XtraDB Cluster node local state is not 'Synced' => return HTTP 503
    # Shell return-code is 1
    echo -en "HTTP/1.1 503 Service Unavailable\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 44\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is not synced.\r\n"
    sleep 0.1
    exit 1
fi

 Guarda el archivo
chmod 755 clustercheck


Ingresar en el Nodo2 de MariaDB 100.4.6.19

Ingresar a la ruta
 cd /usr/bin
 nano clustercheck 
Debes pegar el siguiente script
#!/bin/bash
#
# Script to make a proxy (ie HAProxy) capable of monitoring Percona XtraDB Cluster nodes properly
#
# Author: Olaf van Zandwijk <olaf.vanzandwijk@nedap.com>
# Author: Raghavendra Prabhu <raghavendra.prabhu@percona.com>
#
# Documentation and download: https://github.com/olafz/percona-clustercheck
#
# Based on the original script from Unai Rodriguez
#

if [[ $1 == '-h' || $1 == '--help' ]];then
    echo "Usage: $0 <user> <pass> <available_when_donor=0|1> <log_file> <available_when_readonly=0|1> <defaults_extra_file>"
    exit
fi

# if the disabled file is present, return 503. This allows
# admins to manually remove a node from a cluster easily.
if [ -e "/var/tmp/clustercheck.disabled" ]; then
    # Shell return-code is 1
    echo -en "HTTP/1.1 503 Service Unavailable\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 51\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is manually disabled.\r\n"
    sleep 0.1
    exit 1
fi

MYSQL_USERNAME="${1-clustercheckuser}"
MYSQL_PASSWORD="${2-clustercheckpassword!}"
AVAILABLE_WHEN_DONOR=${3:-0}
ERR_FILE="${4:-/dev/null}"
AVAILABLE_WHEN_READONLY=${5:-1}
DEFAULTS_EXTRA_FILE=${6:-/etc/my.cnf}

#Timeout exists for instances where mysqld may be hung
TIMEOUT=10

EXTRA_ARGS=""
if [[ -n "$MYSQL_USERNAME" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --user=${MYSQL_USERNAME}"
fi
if [[ -n "$MYSQL_PASSWORD" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --password=${MYSQL_PASSWORD}"
fi
if [[ -r $DEFAULTS_EXTRA_FILE ]];then
    MYSQL_CMDLINE="mysql --defaults-extra-file=$DEFAULTS_EXTRA_FILE -nNE --connect-timeout=$TIMEOUT \
                    ${EXTRA_ARGS}"
else
    MYSQL_CMDLINE="mysql -nNE --connect-timeout=$TIMEOUT ${EXTRA_ARGS}"
fi
#
# Perform the query to check the wsrep_local_state
#
WSREP_STATUS=$($MYSQL_CMDLINE -e "SHOW STATUS LIKE 'wsrep_local_state';" \
    2>${ERR_FILE} | tail -1 2>>${ERR_FILE})

if [[ "${WSREP_STATUS}" == "4" ]] || [[ "${WSREP_STATUS}" == "2" && ${AVAILABLE_WHEN_DONOR} == 1 ]]
then
    # Check only when set to 0 to avoid latency in response.
    if [[ $AVAILABLE_WHEN_READONLY -eq 0 ]];then
        READ_ONLY=$($MYSQL_CMDLINE -e "SHOW GLOBAL VARIABLES LIKE 'read_only';" \
                    2>${ERR_FILE} | tail -1 2>>${ERR_FILE})

        if [[ "${READ_ONLY}" == "ON" ]];then
            # Percona XtraDB Cluster node local state is 'Synced', but it is in
            # read-only mode. The variable AVAILABLE_WHEN_READONLY is set to 0.
            # => return HTTP 503
            # Shell return-code is 1
            echo -en "HTTP/1.1 503 Service Unavailable\r\n"
            echo -en "Content-Type: text/plain\r\n"
            echo -en "Connection: close\r\n"
            echo -en "Content-Length: 43\r\n"
            echo -en "\r\n"
            echo -en "Percona XtraDB Cluster Node is read-only.\r\n"
            sleep 0.1
            exit 1
        fi
    fi
    # Percona XtraDB Cluster node local state is 'Synced' => return HTTP 200
    # Shell return-code is 0
    echo -en "HTTP/1.1 200 OK\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 40\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is synced.\r\n"
    sleep 0.1
    exit 0
else
    # Percona XtraDB Cluster node local state is not 'Synced' => return HTTP 503
    # Shell return-code is 1
    echo -en "HTTP/1.1 503 Service Unavailable\r\n"
    echo -en "Content-Type: text/plain\r\n"
    echo -en "Connection: close\r\n"
    echo -en "Content-Length: 44\r\n"
    echo -en "\r\n"
    echo -en "Percona XtraDB Cluster Node is not synced.\r\n"
    sleep 0.1
    exit 1
fi
 Guarda el archivo
chmod 755 clustercheck


Ingresar en el Nodo1 de MariaDB 100.4.6.18


mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.36-MariaDB-wsrep MariaDB Server, wsrep_25.9.r3961

Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select user, host from mysql.user where user = 'clustercheckuser';
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| clustercheckuser | localhost |
+------------------+-----------+
1 row in set (0.00 sec)


Ingresar en el Nodo2 de MariaDB 100.4.6.19

mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.36-MariaDB-wsrep MariaDB Server, wsrep_25.9.r3961

Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select user, host from mysql.user where user = 'clustercheckuser';
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| clustercheckuser | localhost |
+------------------+-----------+
1 row in set (0.00 sec)



Ingresar en el Nodo1 de MariaDB 100.4.6.18

yum install xinetd
 nano /etc/xinetd.d/mysqlchk

Debes pegar esto:

# 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
}

Guardar el Archivo

  nano /etc/services

Comentar

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

Y agregar lo siguiente al archivo

mysqlchk        9200/tcp                # Galera Clustercheck

Guardar el Archivo

Iniciar servicio xinetd

service xinetd start



Test de Prueba

/usr/bin/clustercheck

HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.


Ingresar en el Nodo2 de MariaDB 100.4.6.19

yum install xinetd
 nano /etc/xinetd.d/mysqlchk

Debes pegar esto:

# 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
}

Guardar el Archivo

  nano /etc/services

Comentar

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

Y agregar lo siguiente al archivo

mysqlchk        9200/tcp                # Galera Clustercheck

Guardar el Archivo

Iniciar servicio xinetd

service xinetd start



Test de Prueba

/usr/bin/clustercheck

HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.



Ingresar al servidor HAproxy  100.4.6.17

 cp /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg_old

 nano /etc/haproxy/haproxy.cfg

Borrar todo lo que este dentro del archivo

Pegar lo siguiente:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 1024
        user haproxy
        group haproxy
        daemon

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 mariadb_cluster_writes 0.0.0.0:13304
## A failover pool for writes to ensure writes only hit one node at a time.
        mode tcp
        option httpchk
        server MariaDB01 100.4.6.18:3306 check port 9200
        server MariaDB02 100.4.6.19:3306 check port 9200 backup


listen mariadb_cluster_reads 0.0.0.0:13305
## A load-balanced pool for reads to utilize all nodes for reads.
        mode tcp
        balance leastconn
        option httpchk
        server MariaDB01 100.4.6.18:3306 check port 9200
        server MariaDB02 100.4.6.19:3306 check port 9200


listen stats 0.0.0.0:9000
## HAProxy stats web gui.
        mode http
        stats enable
        stats uri /haproxy_stats
        stats realm HAProxy\ Statistics
        stats auth haproxy:haproxy
        stats admin if TRUE

Guardar archivo


service haproxy start

Ingesar a la siguiente URL: http://100.4.6.17:9000/haproxy_stats

Inicie sesión con el usuario haproxy y la contraseña haproxy (configurable en haproxy.cfg). Deberías ver tres cuadros; mariadb_cluster_writes, mariadb_cluster_reads y stats. Aviso en el grupo de escritura, solo un nodo está activo (verde). Los otros son azules y figuran como copias de seguridad. En el grupo de lectura, los tres nodos están activos.



El tráfico MariaDB / MySQL ahora se puede enrutar a través del equilibrador de carga HAProxy.
Las conexiones enviadas al puerto 13305 se conectarán al nodo con la menor cantidad de conexiones para equilibrar la carga de los SELECT en todos los nodos disponibles.

mysql -u root -p -h 100.4.6.17 -P 13305 -e "SELECT @@hostname"
Enter password:
+------------+
| @@hostname |
+------------+
| MariaDB01  |
+------------+
mysql -u root -p -h 100.4.6.17 -P 13305 -e "SELECT @@hostname"
Enter password:
+------------+
| @@hostname |
+------------+
| MariaDB02  |
+------------+

Las conexiones enviadas al puerto 13304 solo se conectarán a un nodo a la vez, asegurando que las escrituras solo sucedan en un nodo para evitar interbloqueos y otros posibles problemas. En esta configuración, las escrituras siempre se enviarán al nodo 1 si está activo.

mysql -u root -p -h 100.4.6.17 -P 13304 -e "SELECT @@hostname"
Enter password:
+------------+
| @@hostname |
+------------+
| MariaDB01  |
+------------+
mysql -u root -p -h 100.4.6.17 -P 13304 -e "SELECT @@hostname"
Enter password:
+------------+
| @@hostname |
+------------+
| MariaDB01  |
+------------+

FIN   -  Jose Montilva