MariaDB數據庫介紹之四、Galera Cluster

一、Galera Cluster

       Galera是一個MySQL(也支持MariaDB,Percona)的同步多主集羣軟件,Galera集羣的複製功能基於Galeralibrary實現,爲了讓MySQL與Galera library通訊,特別針對MySQL開發了wsrep API。


二、Galera  Cluster的功能和優勢   

功能:

            multi-master,即所有節點可以同時讀寫數據庫

            自動的節點成員控制,失效節點自動被清除

            新節點加入數據自動複製

            並行複製,行級

優勢:

            因爲是multi-master,所以不存在延遲;更小的客戶端延遲

            同時具有讀和寫的擴展能力

            節點間數據是同步的,而Master/Slave模式是異步的,不同slave上的binlog可能是不同的


三、實現Galera Cluster過程;簡單實現

1、準備工作

①測試環境: CentOS 7 ;

node1172.16.116.231
node2172.16.116.232
node3172.16.116.233
//同步各節點的時間 
# ntpdate ntp.sjtu.edu.cn 

//主機互信 
# vim /etc/hosts
172.16.116.231 node1
172.16.116.232 node2
172.16.116.233 node3

//名稱服務器
# vim /etc/resolv.conf
nameserver 172.16.0.1


②安裝包選擇

galera-25.3.9-1.rhel7.el7.centos.x86_64.rpm
MariaDB-5.5.46-centos7-x86_64-client.rpm
MariaDB-5.5.46-centos7-x86_64-common.rpm
MariaDB-Galera-5.5.46-centos7-x86_64-server.rpm


2、各節點安裝上述的軟件包

# yum install -y *rpm
//安裝完成,配置node1
[root@node1 ~]# vim /etc/my.cnf.d/server.cnf 
[galera]
# Mandatory settings
wsrep_provider=/usr/lib64/galera/libgalera_smm.so   
wsrep_cluster_address=gcomm://172.16.116.231,172.16.116.232,172.16.116.233  //定義節點
wsrep_cluster_name=Mycluster          //集羣名稱 
binlog_format=row                    //二進制格式爲row
default_storage_engine=InnoDB        //默認存儲引擎爲innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0                //綁定ip 

//啓動服務;要加上--wsrep-new-cluster 這個參數,否則爲報錯error
[root@node1 ~]# /etc/init.d/mysql start --wsrep-new-cluster    
Starting MySQL.... SUCCESS!


3、啓動後查看的結果

########將/etc/my.cnf.d/server.cnf遠程複製給node2,node3,啓動node2,node3
[root@node2 ~]# /etc/init.d/mysql start
Starting MySQL......SST in progress, setting sleep higher. SUCCESS! 
[root@node3 ~]# /etc/init.d/mysql start
Starting MySQL......SST in progress, setting sleep higher. SUCCESS! 

#####回到node1節點,進入mysql
MariaDB [(none)]> show status like'wsrep_%';
+------------------------------+-------------------------------------------------------------+
| Variable_name                | Value                                                       |
+------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid       | 198c2664-8f88-11e5-bf9c-0e81c9575644                        |
| wsrep_protocol_version       | 7                                                           |
| wsrep_last_committed         | 0                                                           |
| 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               | 10                                                          |
| wsrep_received_bytes         | 758                                                         |
| 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   | 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     | 172.16.116.231:3306,172.16.116.232:3306,172.16.116.233:3306 |
| wsrep_evs_delayed            |                                                             |
| wsrep_evs_evict_list         |                                                             |
| wsrep_evs_repl_latency       | 0/0/0/0/0                                                   |
| wsrep_evs_state              | OPERATIONAL                                                 |
| wsrep_gcomm_uuid             | 198b3495-8f88-11e5-8b30-6a22054488b1                        |
| wsrep_cluster_conf_id        | 3                                                           |
| wsrep_cluster_size           | 3                                                           |
| wsrep_cluster_state_uuid     | 198c2664-8f88-11e5-bf9c-0e81c9575644                        |
| 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 <[email protected]>                           |
| wsrep_provider_version       | 25.3.9(r3387)                                               |
| wsrep_ready                  | ON                                                          |
| wsrep_thread_count           | 2                                                           |
+------------------------------+-------------------------------------------------------------+


4、測試

///node1中添加1個數據庫
MariaDB [(none)]> create database node1;
Query OK, 1 row affected (0.01 sec)

///node2上查看
[root@node2 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| node1              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

//node3上向node1數據庫中添加1個表test3,並插入數據
MariaDB [(none)]> use node1;
Database changed
MariaDB [node1]> create table test3(id int unsigned auto_increment not null primary key,name char(10));
Query OK, 0 rows affected (0.02 sec)
MariaDB [node1]> insert into test3 (name) value ('zhang'),('wang');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0   

//回到node1上查看,並插入新的數據
MariaDB [(none)]> select * from node1.test3;
+----+-------+
| id | name  |
+----+-------+
|  3 | zhang |
|  6 | wang  |
+----+-------+
2 rows in set (0.00 sec)
MariaDB [(none)]>  insert into node1.test3 (name) value ('li'),('chen');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

//在node2上查看
MariaDB [(none)]> select * from node1.test3;
+----+-------+
| id | name  |
+----+-------+
|  3 | zhang |
|  6 | wang  |
|  7 | li    |
| 10 | chen  |
+----+-------+
4 rows in set (0.00 sec)

通過上述測試可以看看3個節點都可以讀寫數據,即時同步;但對於自動增長的字段插入新數據,序號不連續,解決方法,只能定義全局的計數器來實現~

至此,Galera Cluster的高可用mysql集羣介紹完畢!

後續工作,可以加入keepalived+haproxy實現對Galera Cluster的進一步擴展,O(∩_∩)O~~~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章