搭建MariaDB Galera 同步复制

来源:互联网 发布:快3开奖源码 编辑:程序博客网 时间:2024/05/16 08:27

搭建同步复制的数据库集群,使用MariaDB Galera 且至少需要预先搭建三台Linux服务器。
其中在上一篇博客中有一步是需要修改wsrep.cnf这个文件中的三个参数,其中

wsrep_cluster_address="gcomm://192.168.131.145

其中那个IP地址表示的是相对于本台Linux所表示的节点的上一个服务器节点的IP地址。如果本台Linux服务器是第一个节点,那么所填写的就是本台Linux的IP

例如我搭建了三台Linux:Ip分别为
节点信息
其中第一节点的此处填写的是本机IP,第二节点填写的是第一节点的IP,第三节点填写的是第二节点的IP以此类推。
wsrep.cnf文件内容如下所示(加粗为修改内容)

[root@localhost ~]# vi /etc/my.cnf.d/wsrep.cnf# This file contains wsrep-related mysqld options. It should be included# in the main MySQL configuration file.## Options that need to be customized:#  - wsrep_provider#  - wsrep_cluster_address#  - wsrep_sst_auth# The rest of defaults should work out of the box.#### mysqld options _MANDATORY_ for correct opration of the cluster##[mysqld]# (This must be substituted by wsrep_format)binlog_format=ROW# Currently only InnoDB storage engine is supporteddefault-storage-engine=innodb# to avoid issues with 'bulk mode inserts' using autoincinnodb_autoinc_lock_mode=2# Override bind-address# In some systems bind-address defaults to 127.0.0.1, and with mysqldump SST# it will have (most likely) disastrous consequences on donor nodebind-address=0.0.0.0#### WSREP options### Enable wsrepwsrep_on=1# Full path to wsrep provider library or 'none'wsrep_provider=/usr/lib64/galera/libgalera_smm.so // 修改部分# Provider specific configuration options#wsrep_provider_options=# Logical cluster name. Should be the same for all nodes.wsrep_cluster_name="my_wsrep_cluster"# Group communication system handlewsrep_cluster_address="gcomm://192.168.131.145"// 修改部分/wsrep_sst_auth## WSREP State Transfer options### State Snapshot Transfer methodwsrep_sst_method=rsync# Address which donor should send State Snapshot to.# Should be the address of THIS node. DON'T SET IT TO DONOR ADDRESS!!!# (SST method dependent. Defaults to the first IP of the first interface)#wsrep_sst_receive_address=# SST authentication string. This will be used to send SST to joining nodes.# Depends on SST method. For mysqldump method it is root:<root password>wsrep_sst_auth=sst:123456 // 修改部分# Desired SST donor name.#wsrep_sst_donor=# Reject client queries when donating SST (false)#wsrep_sst_donor_rejects_queries=0# Protocol version to use# wsrep_protocol_version=

配置完成,开始启动服务器。
首先使用语句:

ps aux|grep mysql

查看有无异常,然后关闭mysql

service mysql stop

会显示如下内容

Shutting down MySQL..... SUCCESS! 

此时表示mysql已经关闭,一定要确保三台机子的mysql都是出于关闭状态。
首先启动第一个节点使用:

启动第一节点

service mysql bootstrap

这里写图片描述
成功之后使用本地权限登录数据库。

show status like 'wsrep%';

使用这句话,如出现如下如中标红则表示成功
这里写图片描述

此时如果出现如下情况:

[root@localhost ~]# mysql -uroot -prootERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

首先查mysql端口的占用情况

[root@localhost ~]# ps -A|grep mysql 2514 ?        00:00:00 mysqld_safe 2969 ?        00:00:00 mysqld 3423 pts/0    00:00:00 mysqld_safe 3785 pts/0    00:00:00 mysqld

然后杀死这些进程再次启动

[root@localhost ~]# kill -9 2514[root@localhost ~]# kill -9 2969[root@localhost ~]# kill -9 3423-bash: kill: (3423) - No such process[root@localhost ~]# kill -9 3785-bash: kill: (3785) - No such process[root@localhost ~]# ps -A|grep mysql[root@localhost ~]# service mysql bootstrapBootstrapping the cluster.. Starting MySQL.170929 03:53:06 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.170929 03:53:06 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql... SUCCESS! 

启动第二节点

第二节点一定要在第一节点启动之后再启动,这样才能启动成功否则会出现如下情况

[root@localhost ~]# service mysql startStarting MySQL.170929 05:01:43 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.170929 05:01:43 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql.................................... ERROR! 

待第一节点启动完毕之后再次使用语句service mysql start出现如下情况

[root@localhost ~]# service mysql startStarting MySQL...........170929 05:16:53 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.170929 05:16:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql...........SST in progress, setting sleep higher................................ SUCCESS! 

当出现mysql
...........SST in progress, setting sleep higher....
的时候,那么意味着一定会成功启动,但是这个过程根据机器性能会很慢。我的就是等待了很多个………..之后才成功启动。
第三个节点以此类推,但是搭建同步复制至少需要三个节点。
再运行节点之前必须在各个节点检查集群的状态

//运行本地mysql账户mysql -uroot -pMariaDB [(none)]> show status like 'wsrep%';

会出现如下图所示的:

+------------------------------+--------------------------------------+| Variable_name                | Value                                |+------------------------------+--------------------------------------+| wsrep_local_state_uuid       | 07bfd155-ac9c-11e6-bcfd-8a32fed329f7 || wsrep_protocol_version       | 7                                    || wsrep_last_committed         | 2                                    || 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               | 6                                    || wsrep_received_bytes         | 398                                  || wsrep_local_commits          | 0                                    || wsrep_local_cert_failures    | 0                                    || wsrep_local_replays          | 0                                    || wsrep_local_send_queue       | 0                                    || wsrep_local_send_queue_max   | 2                                    || wsrep_local_send_queue_min   | 0                                    || wsrep_local_send_queue_avg   | 0.500000                             || wsrep_local_recv_queue       | 0                                    || wsrep_local_recv_queue_max   | 1                                    || wsrep_local_recv_queue_min   | 0                                    || wsrep_local_recv_queue_avg   | 0.000000                             || 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     | ,                                    || wsrep_desync_count           | 0                                    || wsrep_evs_delayed            |                                      || wsrep_evs_evict_list         |                                      || wsrep_evs_repl_latency       | 0/0/0/0/0                            || wsrep_evs_state              | OPERATIONAL                          || wsrep_gcomm_uuid             | 162f9df1-acb3-11e6-99a4-cb92a5f5e579 || wsrep_cluster_conf_id        | 2                                    || wsrep_cluster_size           | 2                                    || wsrep_cluster_state_uuid     | 07bfd155-ac9c-11e6-bcfd-8a32fed329f7 || 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     || wsrep_provider_version       | 3.19(rb98f92f)                       || wsrep_ready                  | ON                                   |+------------------------------+--------------------------------------+

其中相关的解释:

集群完整性检查
1. wsrep_cluster_state_uuid
在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群。
2. wsrep_cluster_conf_id
正常情况下所有节点上该值是一样的,如果值不同,说明该节点被临时”分区”了。当节点之间网络连接恢复的时候应该会恢复一样的值。
3. wsrep_cluster_size
当前集群的节点个数,如果这个值跟预期的节点数一致,则所有的集群节点已经连接。
4. wsrep_cluster_status
集群组成的状态如果不为”Primary”,说明出现”分区”或是”split-brain”状况。
节点状态检查
5. wsrep_ready
该值为ON,则说明可以接受SQL负载,如果为Off,则需要检查wsrep_connected。
6. wsrep_connected
如果该值为Off,且wsrep_ready值也为Off,说明该节点没有连接到集群,可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的,具体错误需要查看日志。
7. wsrep_local_state_comment
如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因。
复制健康检查
8. wsrep_flow_control_paused
表示复制停止了多长时间,集群因为Slave延迟而慢多少。该值为0~1之间,越靠近0越好,值为1表示复制完全停止。可优化wsrep_slave_threads来改善。
9. wsrep_cert_deps_distance
有多少事务可以并行处理,wsrep_slave_threads设置的值不应该高出该这个太多。
10. wsrep_flow_control_sent
表示该节点已经停止复制了多少次。
11. wsrep_local_recv_queue_avg
表示slave事务队列的平均长度,slave有没有瓶颈,可以从这里看。最慢节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg值都是最高的,这两个值越低越好。
检测慢网络问题
12. wsrep_local_send_queue_avg
网络瓶颈的预兆,如果这个值比较高的话,可能存在网络瓶颈。
冲突或死锁的数目
13. wsrep_last_committed
最后提交的事务数目。
14. wsrep_local_cert_failures/wsrep_local_bf_aborts
回滚/检测到的冲突数目。

有了同步复制,不能再实际项目中发挥真正的优势,还需要搭建高可用的MyCat消息中间件才行,请关注下一篇博客

原创粉丝点击