O nó de cluster do Galera MariaDB não pode iniciar depois de descer

2

Meu ambiente:

  • Dois nós - CentOS 6.4 x86_64

    Nó1: 10.10.201.3

    Node2: 10.10.201.4

  • MariaDB-server-10.2.0-1.el6.x86_64

Ambos os nós estão rodando normalmente, mas depois de reiniciar o mysql no Node1, ele falhará ao iniciar novamente enquanto o mysql no Nó2 estiver rodando sem problemas.

Configuração no Nó1:

#/etc/my.cnf.d/server.cnf

node1
bind-address=10.10.201.3
datadir=/opt/mysql
socket=/opt/mysql/mysql.sock
handlersocket_address="10.10.201.3"
handlersocket_port="9998"
handlersocket_port_wr="9999"
open_files_limit = 25600
log-error=/opt/mysql/log/mysqld.log
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.10.201.4,10.10.201.3"
wsrep_cluster_name='galera_cluster_www'
wsrep_node_address='10.10.201.3'
wsrep_node_name='www-node1'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:password
wsrep-slave-threads=16
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_log_conflicts=ON
wsrep_provider_options="cert.log_conflicts=ON"
wsrep_debug=ON
wsrep_max_ws_size = 2G
binlog_row_image = minimal

Configuração no Nó2:

#/etc/my.cnf.d/server.cnf

node2
bind-address=10.10.201.4
datadir=/opt/mysql
socket=/opt/mysql/mysql.sock
handlersocket_address="10.10.201.4"
handlersocket_port="9998"
handlersocket_port_wr="9999"
open_files_limit = 25600
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.10.201.3,10.10.201.4"
wsrep_cluster_name='galera_cluster_www'
wsrep_node_address='10.10.201.4'
wsrep_node_name='www-node2'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:password
wsrep-slave-threads=16
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_log_conflicts=ON
wsrep_provider_options="cert.log_conflicts=ON"
wsrep_debug=ON
wsrep_max_ws_size = 2G
binlog_row_image = minimal

E, finalmente, Informações do Cluster no Nó2 após falha no mysql no primeiro nó (Nó1):

MariaDB [(none)]> show status like 'wsrep%';

+------------------------------+--------------------------------------+
| Variable_name                | Value                                |
+------------------------------+--------------------------------------+
| wsrep_apply_oooe             | 0.017353                             |
| wsrep_apply_oool             | 0.000050                             |
| wsrep_apply_window           | 1.021550                             |
| wsrep_causal_reads           | 0                                    |
| wsrep_cert_deps_distance     | 24.564685                            |
| wsrep_cert_index_size        | 48                                   |
| wsrep_cert_interval          | 0.021750                             |
| wsrep_cluster_conf_id        | 69                                   |
| wsrep_cluster_size           | 1                                    |
| wsrep_cluster_state_uuid     | c07f825f-132f-11e6-b219-d7e841605104 |
| wsrep_cluster_status         | Primary                              |
| wsrep_commit_oooe            | 0.000000                             |
| wsrep_commit_oool            | 0.000034                             |
| wsrep_commit_window          | 1.005403                             |
| wsrep_connected              | ON                                   |
| wsrep_evs_delayed            |                                      |
| wsrep_evs_evict_list         |                                      |
| wsrep_evs_repl_latency       | 0/0/0/0/0                            |
| wsrep_evs_state              | OPERATIONAL                          |
| wsrep_flow_control_paused    | 0.000000                             |
| wsrep_flow_control_paused_ns | 0                                    |
| wsrep_flow_control_recv      | 0                                    |
| wsrep_flow_control_sent      | 0                                    |
| wsrep_gcomm_uuid             | 401f6755-71da-11e6-8244-9e88079ed6c4 |
| wsrep_incoming_addresses     | 10.10.201.4:3306                     |
| wsrep_last_committed         | 2364263                              |
| wsrep_local_bf_aborts        | 116                                  |
| wsrep_local_cached_downto    | 2221069                              |
| wsrep_local_cert_failures    | 23                                   |
| wsrep_local_commits          | 729390                               |
| wsrep_local_index            | 0                                    |
| wsrep_local_recv_queue       | 0                                    |
| wsrep_local_recv_queue_avg   | 0.004725                             |
| wsrep_local_recv_queue_max   | 6                                    |
| wsrep_local_recv_queue_min   | 0                                    |
| wsrep_local_replays          | 112                                  |
| wsrep_local_send_queue       | 0                                    |
| wsrep_local_send_queue_avg   | 0.000335                             |
| wsrep_local_send_queue_max   | 2                                    |
| wsrep_local_send_queue_min   | 0                                    |
| wsrep_local_state            | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| wsrep_local_state_uuid       | c07f825f-132f-11e6-b219-d7e841605104 |
| wsrep_protocol_version       | 7                                    |
| wsrep_provider_name          | Galera                               |
| wsrep_provider_vendor        | Codership Oy <[email protected]>    |
| wsrep_provider_version       | 25.3.15(r3578)                       |
| wsrep_ready                  | ON                                   |
| wsrep_received               | 1376816                              |
| wsrep_received_bytes         | 630752657                            |
| wsrep_repl_data_bytes        | 303429595                            |
| wsrep_repl_keys              | 3039261                              |
| wsrep_repl_keys_bytes        | 41097380                             |
| wsrep_repl_other_bytes       | 0                                    |
| wsrep_replicated             | 729452                               |
| wsrep_replicated_bytes       | 391211903                            |
| wsrep_thread_count           | 17                                   |
+------------------------------+--------------------------------------+
    
por user36814 26.11.2016 / 03:33

1 resposta

5

Eu tive o mesmo problema e, finalmente, após corrigir o problema (no CentOS 7 - MariaDB-server-10.2.0-1 ), eu escrevi uma documentação sobre como configurá-lo corretamente e espero que ele conserte o seu também. Siga as instruções abaixo e tente construir seus nós Galera do zero. Observe que apenas usarei a configuração obrigatória, você poderá adicionar a sua posteriormente. Eu acho que você perdeu o quinto passo ou você não fez isso corretamente. De qualquer forma, vou escrever todos os passos para que qualquer pessoa possa achar mais fácil de seguir.

O problema surge quando você não usa o comando galera_new_cluster no nó mestre e não usa o endereço apropriado para wsrep_cluster_address - gcomm . Portanto, quando o mestre falha, outros nós não podem voltar para o par. (nem mesmo o mestre pode voltar no cluster)

Considere 3 servidores chamados GLR{1,2,3} e vamos configurar o Galera Cluster em cada um deles. - Eu explicarei como evitar falhas no cluster de dois nós na sétima etapa.

PASSO 1

Para instalação:

Abra /etc/yum.repos.d/mariadb.repo com seu editor favorito e adicione as seguintes linhas:

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

PASSO 2

Se você não souber como gerenciar / configurar o SELinux, defina-o como modo permissivo e verifique seus arquivos de log após concluir a instalação para executar as etapas necessárias para gerenciá-lo. Você também pode precisar ter setroubleshoot-server e setools-console packages instalados para entender melhor seus registros do SELinux.

Mas se você tiver o SELinux ativado e não quiser configurá-lo para o modo permissivo, você deve observar que ele pode impedir que o mysqld execute as operações necessárias. Portanto, você deve configurá-lo para permitir que o mysqld execute programas externos e abra sockets de escuta em portas não privilegiadas - isto é, coisas que um usuário sem privilégios pode fazer.

Ensinar como gerenciar o SELinux está além do escopo desta resposta, mas você pode configurá-lo no modo permissivo apenas para mysql solicitações, executando o seguinte comando:

semanage permissive -a mysql_t

PASSO 3

Após a instalação usando yum , adicione as seguintes linhas ao final de /etc/my.cnf.d/server.cnf conforme mostrado abaixo em cada servidor GLR, respectivamente:

[GLR1] ↴

$ vim /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://{GLR1 IP},{GLR2 IP},{GLR3 IP}'
wsrep_cluster_name='galera'
wsrep_node_address='{GLR1 IP}
wsrep_node_name='GLR1'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

[GLR2] ↴

$ vim /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://{GLR1 IP},{GLR2 IP},{GLR3 IP}'
wsrep_cluster_name='galera'
wsrep_node_address='{GLR2 IP}
wsrep_node_name='GLR2'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

[GLR3] ↴

$ vim /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://{GLR1 IP},{GLR2 IP},{GLR3 IP}'
wsrep_cluster_name='galera'
wsrep_node_address='{GLR3 IP}
wsrep_node_name='GLR3'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

PASSO 4

Reinicialize todos os servidores.

PASSO 5

Use o seguinte comando apenas no GLR1 e, em seguida, reinicie o mariadb.service no GLR2 e GLR3:

$ galera_new_cluster
$ sevice mysql start

PASSO 6

Como você percebeu na sua pergunta, você pode testar a conectividade entre servidores usando o seguinte comando:

$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep%'"

Ou apenas verifique o tamanho do cluster:

$ mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';"

PASSO 7

Por outro lado, depois de concluir todas as etapas acima, você pode usar este Artigo fornecido pelo website galeracluster sobre como evitar uma falha de nó único, fazendo com que o outro pare de funcionar se você quiser usar um cluster TWO-NODE.

There are two solutions available to you:

  • You can bootstrap the surviving node to form a new Primary Component, using the pc.boostrap wsrep Provider option. To do so, log into the database client and run the following command:

    SET GLOBAL wsrep_provider_options='pc.bootstrap=YES';

    This bootstraps the surviving node as a new Primary Component. When the other node comes back online or regains network connectivity with this node, it will initiate a state transfer and catch up with this node.

  • In the event that you want the node to continue to operate, you can use the pc.ignore_sb wsrep Provider option. To do so, log into the database client and run the following command:

    SET GLOBAL wsrep_provider_options='pc.ignore_sb=TRUE';

    The node resumes processing updates and it will continue to do so, even in the event that it suspects a split-brain situation.

Note Warning: Enabling pc.ignore_sb is dangerous in a multi-master setup, due to the aforementioned risk for split-brain situations. However, it does simplify things in master-slave clusters, (especially in cases where you only use two nodes).

In addition to the solutions provided above, you can avoid the situation entirely using Galera Arbitrator. Galera Arbitrator functions as an odd node in quorum calculations. Meaning that, if you enable Galera Arbitrator on one node in a two-node cluster, that node remains the Primary Component, even if the other node fails or loses network connectivity.

    
por 26.11.2016 / 06:32