MySQL復制: Galera
前言
之前介紹了
MySQL
復制的各種解決方案, 但是我個人還是感覺Galera
最好用也最實用, 什么是Galera
, 它強大在哪里, 這篇文章就帶你認識這個強大的工具
Galera Replication簡介
Galera Repplication
Galera復制發生在事務提交時, 通過廣播事務寫集群應用
客戶端直接連接到 Galera Cluster DMBS就和連接到原生的DBMS一樣
wsrep API, 定義了Galera和DBMS之間的接口
Galera Cluster的特點
Galera是為MySQL提供的一個真正意義上的多主(M/M)集群, Galera Cluster是一個易于使用的高可用解決方案, 可提高系統的平均無故障時間, 并且提供數據的可靠性和集群的可擴展性
Galera Cluster的強大功能
同步復制
多主模型
可以在任意節點讀寫
自動控制各個節點的升級和降級
行級的并行控制
規模較小的客戶端延遲
Galera-Cluster在網絡拓撲所處的位置
MariaDB-Galera-Server
好吧、這里和標題不符合, 因為我目前只有
MariaDB-Galera
的包, 所以有使用MariaDB-5.5
來做實驗了, 其實配置過程和MySQL-5.5
并無區別還有要注意的一點: Galera集群不需要提前配置MySQL復制, 并且也不需要基于MySQL復制
安裝
MariaDB-Galear-Server
前, 不能安裝MariaDB, 其實MariaDB-Gelera算是MariaDB的一個分支
環境部署
實驗環境
node1.anyisalin.com IP_addr=172.16.1.2
node2.anyisalin.com IP_addr=172.16.1.3
node3.anyisalin.com IP_addr=172.16.1.4
安裝Galera-Cluster
我這里通過官方下載下來的rpm包做成了一個yum源來安裝, 大家安裝也可以指向官方的yum源
[root@node1 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
[root@node2 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
[root@node3 ~]# yum install MariaDB-Galera-server MariaDB-client --nogpgcheck -y
配置步驟
首先配置node1
[root@node1 ~]# vim /etc/my.cnf.d/server.cnf #修改配置文件mysqld段為如下
[mysqld]
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4"
wsrep_cluster_name = 'mycluster'
wsrep_node_name = 'node1'
wsrep_node_address = '172.16.1.2'
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
server_id=1
配置node2
[root@node2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4"
wsrep_cluster_name = 'mycluster'
wsrep_node_name = 'node2' #注意修改
wsrep_node_address = '172.16.1.3' #這里改為自己的IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
server_id=2 #server_id一定要改
配置node3
[root@node2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://172.16.1.2,172.16.1.3,172.16.1.4"
wsrep_cluster_name = 'mycluster'
wsrep_node_name = 'node3' #注意修改
wsrep_node_address = '172.16.1.4' #這里改為自己的IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
server_id=3 #server_id一定要改
啟動服務
首先我們要在一個節點初始化集群
[root@node1 ~]# service mysql start --wsrep-new-cluster #注意:這里是mysql不是mysqld
Starting MySQL.... [ OK ]
依次在其他節點啟動
[root@node2 ~]# service mysql start #可能有點慢, 耐心等待
Starting MySQL............................SST in progress, setting sleep higher.
[root@node3 ~]# service mysql start #可能有點慢, 耐心等待
Starting MySQL......SST in progress, setting sleep higher.
測試同步
[root@node1 ~]# mysql #這里是node1
MariaDB [(none)]> CREATE DATABASE galeradb; #在node1上創建數據庫
Query OK, 1 row affected (0.00 sec)
[root@node2 ~]# mysql #這里是node1
MariaDB [(none)]> SHOW DATABASES; #在node2上能夠看到node1創建的數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| galeradb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use galeradb; #在node2上創建表
Database changed
MariaDB [galeradb]> CREATE TABLE t1 (id int auto_increment primary key, name char(4));
Query OK, 0 rows affected (0.02 sec)
[root@node3 ~]# mysql #這里是node1
MariaDB [(none)]> USE galeradb;
Database changed
MariaDB [galeradb]> DESC t1; #在node3能夠看到node2創建的表
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(4) | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
MariaDB [galeradb]> SHOW STATUS LIKE 'wsrep%'; #通過這個命令可以看到galera集群的相關信息
+----------------------------+-------------------------------------------------+
| Variable_name | Value |
+----------------------------+-------------------------------------------------+
| wsrep_local_state_uuid | 57ba6356-0d44-11e6-8ed8-2fa7f726428a |
| wsrep_protocol_version | 4 |
| wsrep_last_committed | 2 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_received | 5 |
| wsrep_received_bytes | 630 |
| 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 | 1.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 | 3 |
| wsrep_causal_reads | 0 |
| wsrep_incoming_addresses | 172.16.1.2:3306,172.16.1.3:3306,172.16.1.4:3306 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 57ba6356-0d44-11e6-8ed8-2fa7f726428a |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_index | 2 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 23.2.6(r152) |
| wsrep_ready | ON |
+----------------------------+-------------------------------------------------+
40 rows in set (0.00 sec)
#完成
總結
怎么樣,是不是很簡單的就配置了一個高可用的MySQL復制集群, 我們在前端加上一個負載均衡器就可以負載均衡
MySQL
了作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/15709