今天要來嘗試安裝MariaDB,
記錄下安裝的過程
首先,目前有5.5 10.0 10.1三種類型的版本,
MariaDB 5.5與MySql(印象是5.6版)相容性最佳,
10.0是MariaDB繼續發展的版本,已經和Mysql有較大的差異,
10.1更新部分 請參考What is MariaDb 10.1?
其中10.1的Galera Cluster已經包含在標準安裝包內,配置後就能使用.
總之要試當然選最新版本囉!
主機
node-1 192.168.30.31
node-2 192.168.30.32
安裝
第一步需要建立repo檔
vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list - created 2016-02-28 13:16 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
安裝(10.1版,Galera Cluster是包含在裡面的,如果是5.5或10.0則需要安裝galera cluster版)
sudo yum install MariaDB-server MariaDB-client -y
執行初始化配置->參考 [資料庫] 安裝MariaDB取代MySQL在CentOS 6.x上
其實自行配置也可,基本上我會略過這個步驟
執行MariaDB
service mysql start
設定開機啟用,最基本的安裝完成了
chkconfig mysql on
設定Galera Cluster
建立cluster帳號
GRANT ALL PRIVILEGES ON *.* TO cluster@localhost IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'192.168.30.%' IDENTIFIED BY '1234';
flush privileges;
複製設定範例檔(這路徑下有各種範例設定可用)
cp /usr/share/mysql/wsrep.cnf /etc/my.cnf.d/
修改設定檔 vi /etc/my.cnf.d/server.cnf (10.1 Galera Support 與 unable to run a mariadb 10.1 galera cluster)
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='my_wsrep_cluster'
wsrep_cluster_address='gcomm://'
binlog_format=row
wsrep_node_name='db-1'
wsrep_sst_auth=cluster:1234
wsrep_sst_method=rsync
bind-address=192.168.0.31
啟動mariadb (只有第一個node啟動時,必須用這指令,之後的node必須使用service mysql start)
service mysql start --wsrep-new-cluster或 service mysql bootstrap
Starting MySQL ERROR!
檢查錯誤訊息less /var/lib/mysql/cluster-1.err
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: Permission denied
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: failed to open gcomm backend connection: 13: error while trying to listen 'tcp://0.0.0.0:4567?socket.non_blocking=1', asio error 'Permission denied': 13 (Permission denied)
at gcomm/src/asio_tcp.cpp:listen():777
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -13 (Permission denied)
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel 'my_wsrep_cluster' at 'gcomm://': -13 (Permission denied)
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: gcs connect failed: Permission denied
2016-02-29 13:31:25 139885306103840 [ERROR] WSREP: wsrep::connect(gcomm://) failed: 7
2016-02-29 13:31:25 139885306103840 [ERROR] Aborting
160229 13:31:26 mysqld_safe mysqld from pid file /var/lib/mysql/cluster-1.pid ended
160229 13:31:42 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
160229 13:31:42 mysqld_safe WSREP: Running position recovery with --log_error='/var/lib/mysql/wsrep_recovery.QCvjYm' --pid-file='/var/lib/mysql/cluster-1-recover.pid'
先將防火牆與SELINUX關閉(參考linux - 防火牆&SeLinux)
啟動mariadb
service mysql start --wsrep-new-cluster或 service mysql bootstrap
檢查galera cluster
mysql -e "SHOW STATUS LIKE 'wsrep_%'; " -p
看wsrep_ready ON和wsrep_cluster_size 1
檢查port
netstat -anlp | grep -e 4567 -e 3306
基本上 單一台的設定已經完成了.
但只有一台node的cluster不叫cluster,
加入node
跳過安裝部分,
修改設定檔 vi /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='my_wsrep_cluster'
wsrep_cluster_address='gcomm://192.168.30.31:4567'
binlog_format=row
wsrep_node_name='db-2'
wsrep_sst_auth=cluster:1234
wsrep_sst_method=rsync
bind-address=192.168.0.32
重新啟動mariadb
service mysql restart
按照node-1時的方式,檢查galera cluster與port
修改node-1的設定檔 vi /etc/my.cnf.d/server.cnf
wsrep_cluster_address='gcomm://192.168.30.32:4567'
(或執行mysqld --wsrep_cluster_address=gcomm://IPADDRESSOFCLUSTERPROVIDER)
重新啟動mariadb
service mysql restart
實際測試
在node-1
mysql -uroot -e 'CREATE DATABASE gc_test;'
node-2執行
mysql -uroot -e 'SHOW DATABASES;'
最後galera cluster在auto_increment欄位是按照node數調整的,以我的情況為
db-1 1,3,5,7,...
db-2 2,4,6,8,...
重啟啓動cluster (參考 當全部的node不正常關閉時,如何重啟cluster)
基本上跟啟動第一node時一樣,
(但有問題需要先處理,基本原則就是找wsrep_last_committed最大的為第一個啟動的node作為Primary)
service mysql start --wsrep-new-cluster或 service mysql bootstrap
官網提供另一個檢查流程,
可以在cluster有發生問題(ex : brain split,跳電)停止後,
啟動時能檢查哪一個node作為primary讓其他nodes能同步,
修改每個node的設定檔,
wsrep_cluster_address='gcomm://192.168.30.32:4567?pc.wait_prim=no'
確保服務開啟時儘管沒有決定primary node依然可以啟動, (官網上是這樣說,但我試不出來
等每個node啟用後,
找出wsrep_last_committed最大的node,
設定為primary node即可
SET GLOBAL wsrep_provider_options="pc.bootstrap=true";
但這個方法是不出來,儘管設定了pc.wait_prim=no,
依然無法使用service mysql start啟動第一個node.
在網路上也找到一篇同情況. BOOTSTRAPPING GALERA CLUSTER THE NEW WAY
MariaDB大數據的專用Engine TokuDB
安裝參考文章 => MariaDB 使用 TokuEngine
配置資料存放位置
(後續再寫
管理介面ClusterControl
參考
ClusterControl - 部屬 監控 管理 資料庫叢集
參考
Getting Started with MariaDB Galera Cluster