Mariadb galera cluster 安裝配置

 

MariaDB做爲Mysql的一個分支,在開源項目中已經普遍使用,例如大熱的openstack,因此,爲了保證服務的高可用性,同時提升系統的負載能力,集羣部署是必不可少的。node

MariaDB Galera Cluster 介紹

MariaDB集羣是MariaDB同步多主機集羣。它僅支持XtraDB/ InnoDB存儲引擎(雖然有對MyISAM實驗支持 - 看wsrep_replicate_myisam系統變量)。mysql

主要功能:sql

  • 同步複製
  • 真正的multi-master,即全部節點能夠同時讀寫數據庫
  • 自動的節點成員控制,失效節點自動被清除
  • 新節點加入數據自動複製
  • 真正的並行複製,行級
  • 用戶能夠直接鏈接集羣,使用感覺上與MySQL徹底一致

優點:數據庫

  • 由於是多主,因此不存在Slavelag(延遲)
  • 不存在丟失事務的狀況
  • 同時具備讀和寫的擴展能力
  • 更小的客戶端延遲
  • 節點間數據是同步的,而Master/Slave模式是異步的,不一樣slave上的binlog多是不一樣的

技術:centos

Galera集羣的複製功能基於Galeralibrary實現,爲了讓MySQL與Galera library通信,特別針對MySQL開發了wsrep API。安全

Galera插件保證集羣同步數據,保持數據的一致性,靠的就是可認證的複製,工做原理以下圖: 異步

當客戶端發出一個commit的指令,在事務被提交以前,全部對數據庫的更改都會被 write-set 收集起來,而且將write-set 紀錄的內容發送給其餘節點。ide

write-set 將在每一個節點進行認證測試,測試結果決定着節點是否應用write-set更改數據。測試

若是認證測試失敗,節點將丟棄 write-set ;若是認證測試成功,則事務提交。ui

安裝過程:

1. 節點配置

準備三個節點,環境是centos6.5

db1 1.1.1.1
db2 1.1.1.2
db3 1.1.1.3

2. 添加MariaDB 倉庫

建立/etc/yum.repos.d/mariadb.repo,內容以下

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

3. 修改防火牆模式,全部節點執行 

sudo setenforce0

4. 安裝

yum install socat MariaDB-Galera-server MariaDB-client rsync galera

5.設置MariaDB安全配置

service mysql start

執行下面命令 

/usr/bin/mysql_secure_installation

本文設置數據庫密碼爲dbpass,全部問題都是default

6.建立mariaDB galera cluster用戶

咱們首先建立sst_user,sst_user是在State Transfer Snapsho(SST)階段節點之間進行驗證的用戶

在全部節點上執行

mysql -u root -p
mysql> DELETE FROM mysql.user WHERE user='';
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';
mysql> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass';
mysql> GRANT ALL PRIVILEGES on *.* to sst_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit

7. 建立mariaDB galera cluster配置

全部節點執行

service mysql stop

db1中的配置文件

cat >> /etc/my.cnf.d/server.cnf << EOF
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
datadir=/var/lib/mysql
innodb_log_file_size=100M
innodb_file_per_table
innodb_flush_log_at_trx_commit=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://1.1.1.1,1.1.1.2,1.1.1.3"
wsrep_cluster_name='galera_cluster'
wsrep_node_address='1.1.1.1'
wsrep_node_name='db1'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass
EOF

db二、db3中相似,只是相應字段進行替換

db2:

wsrep_node_address=1.1.1.2
wsrep_node_name='db2'

db3:

wsrep_node_address='1.1.1.3'
wsrep_node_name='db3'

8. 啓動第一個集羣節點

db1上執行

/etc/init.d/mysql start --wsrep-new-cluster

在db1上執行下面命令

mysql -uroot -p -e "show status like 'wsrep%'"

能夠看到結果

wsrep_local_state_comment | Synced <-- cluster is synced
wsrep_incoming_addresses  | 1.1.1.1:3306 <-- node db1 is a provider
wsrep_cluster_size        | 1 <-- cluster consists of 1 node 
wsrep_ready               | ON <-- good :)

9. 添加其餘節點

db2上執行mysql 啓動

service mysql start

查看狀態

mysql -uroot -p -e "show status like 'wsrep%'"

 顯示結果

| wsrep_local_state_comment | Synced                    |
| wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size        | 2                         |
| wsrep_connected           | ON                        |
| wsrep_ready               | ON                        |

db3啓動

service mysql start

顯示結果

| wsrep_local_state_comment | Synced                                 |
| wsrep_incoming_addresses  | 1.1.1.3:3306,1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size        | 3                                      |
| wsrep_connected           | ON                                     |
| wsrep_ready               | ON                                     |

9. 驗證複製

mysql -u root -p -e 'CREATE DATABASE clustertest;'
mysql -u root -p -e 'CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));'
mysql -u root -p -e 'INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db1", "1.1.1.1");'

在各個節點上檢查是否存在數據庫clustertest和表mycluster

相關文章
相關標籤/搜索