El arranque del nodo inicial de un Percona XtraDB Cluster (bootstraping) es distinto al arranque de un nodo que se va a unir a un cluster existente. El primer nodo del cluster se tiene que levantar con un parámetro concreto que indica que no se va a unir a ningún cluster existente, sino que inicia uno nuevo.
El nodo inicial se arranca de forma manual, ya que tiene que establecer la variable «wsrep_cluster_address» de forma diferente a como la establece un nodo que va a unirse a un cluster ya activo. En todos los nodos del cluster, esta variable está definida de forma estática en el my.cnf indicando las IPs de todos los nodos que forman el cluster, ejemplo:
# Cluster connection URL contains the IPs of node#1, node#2 and node#3 wsrep_cluster_address=gcomm://192.168.1.200,192.168.1.201,192.168.1.202
Pero el nodo inicial con el que arrancamos el cluster debe tener esa variable vacía (gcomm://), así se indica que puede iniciar el cluster sin necesidad de unirse a ningún cluster ya establecido. Podemos forzar la variable como parámetro de arranque para que no lea la del my.cnf:
# /etc/init.d/mysql start --wsrep-cluster-address="gcomm://" Starting MySQL (Percona XtraDB Cluster)...... SUCCESS!
De este modo ya tenemos el primer nodo del cluster arriba, ahora ya podemos unir al cluster el resto de nodos, los cuales sí que leerán la variable «wsrep_cluster_address» del archivo my.cnf con las IPs de los nodos del cluster y se unirán correctamente:
# /etc/init.d/mysql start Starting MySQL (Percona XtraDB Cluster)...... SUCCESS!
Una vez levantado el cluster y con todos los nodos unidos, podemos verificar el estado con la siguiente consulta SQL desde la shell MySQL:
mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | 6a293136-ed38-11e2-b514- | | wsrep_protocol_version | 4 | | wsrep_last_committed | 49150494 | | wsrep_replicated | 0 | | wsrep_replicated_bytes | 0 | | wsrep_received | 2 | | wsrep_received_bytes | 200 | | wsrep_local_commits | 0 | | wsrep_local_cert_failures | 0 | | wsrep_local_bf_aborts | 0 | | wsrep_local_replays | 0 | | wsrep_local_send_queue | 0 | | wsrep_local_send_queue_avg | 0.000000 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_avg | 0.000000 | | 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_incoming_addresses | 192.168.1.200:3306,192.168.1.201:3306| | wsrep_cluster_conf_id | 2 | | wsrep_cluster_size | 2 | | wsrep_cluster_state_uuid | 6a29d936-ed38-11e2- | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_index | 1 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy <info@codership.com> | | wsrep_provider_version | 2.6(r152) | | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.00 sec)
Para saber si todos los nodos se han unido al cluster correctamente, podemos verificar los siguientes datos.
Número de nodos que forman el cluster:
| wsrep_cluster_size | 2 |
Ips y puertos de escucha de los nodos:
| wsrep_incoming_addresses | 192.168.1.200:3306,192.168.1.201:3306|
Estado del nodo en el cluster (información a revisar en cada nodo):
| wsrep_local_state | 4 | | wsrep_local_state_comment | Synced
- Uniéndose al cluster
- Unido pero desincronizado con el cluster
- Unido al cluster
- Unido y sincronizado con el cluster
| wsrep_cluster_status | Primary |
Muestra el estado del cluster, posibles valores:
- Primary
- Non-Primary
- Disconnected