一、什麼是mysql集群
mysql集群是乙個無共享的(shared-nothing)、分布式節點架構的儲存方案,其目的是提供容錯性和高效能。
資料更新使用讀已提交隔離級別(read-committedisolation)來保證所有節點資料的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的資料(如果任何乙個寫操作失敗,則更新失敗)。
無共享的對等節點使得某台伺服器上的更新操作在其他伺服器上立即可見。傳播更新使用一種複雜的通訊機制,這一機制專用來提供跨網路的高吞吐量。
通過多個mysql伺服器分配負載,從而最大程式地達到高效能,通過在不同位置儲存資料保證高可用性和冗餘。
二、架構圖
三、如何儲存資料
1.mysqlcluster資料節點組內主從同步採用的是同步複製,來保證組內節點資料的一致性。一般通過兩階段提交 協議來實現,一般工作過程如下:
a)master執行提交語句時,事務被傳送到sl**e,sl**e開始準備事務的提交。
b)每個sl**e都要準備事務,然後向master傳送ok(或abort)訊息,表明事務已經準備好(或者無法準備該事務)。
c)master等待所有sl**e傳送ok或abort訊息
如果master收到所有 sl**e的ok訊息,它就會向所有sl**e傳送提交訊息,告訴sl**e提交該事務;
如果master收到來自任何乙個sl**e的abort訊息,它就向所有 sl**e傳送abort訊息,告訴sl**e去中止事務。
e)每個sl**e等待來自master的ok或abort訊息。
如果sl**e收到提交請求,它們就會提交事務,並向master傳送事務已提交 的確認;
如果sl**e收到取消請求,它們就會撤銷所有改變並釋放所占有的資源,從而中止事務,然後向masterv送事務已中止的確認。
f) 當master收到來自所有sl**e的確認後,就會報告該事務被提交(或中止),然後繼續進行下乙個事務處理。
由於同步複製一共需要4次訊息傳遞,故mysql cluster的資料更新速度比單機mysql要慢。所以mysql cluster要求執行在千兆以上的區域網內,節點可以採用雙網絡卡,節點組之間採用直連方式。
疑問: 對cluster進行擴容增加資料節點組時會不 會導致資料更新速度降低?
答:不會,資料更新速度會變快。因為資料是分別處理,每個節點組所儲存的資料是不一樣的,
也能減少鎖定。
2.mysqlcluster將所有的索引列都儲存在主存中,其他非索引列可以儲存在記憶體中或者通過建立表空間儲存到磁碟上。如果資料發生改變(insert,update,delete等),mysql 集群將發生改變的記錄寫入重做日誌,然後通過檢查點定期將資料定入磁碟。由於重做日誌是非同步提交的,所以故障期間可能有少量事務丟失。為了減少事務丟失,mysql集群實現延遲寫入(預設延遲兩秒,可配置),這樣就可以在故障發生時完成檢查點寫入,而不會丟失最後乙個檢查點。一般單個資料節點故障不會導致任何資料丟失,因為集群內部採用同步資料複製。
四、mysql集群的橫向擴充套件
集群搭建實現步驟
集群 mysql cluster
高可用 負載均衡
集群成員:
====管理節點(mgm) 程序名 ndb_mgmd
====資料節點(data nodes) 程序名 ndbd
====sql節點(sql nodes) 程序名 mysqld
拓撲:192.168.1.3 管理節點 mgm
192.168.1.4 192.168.1.5 sql節點 sql1 sql2
192.168.1.6 192.168.1.7 資料節點 data1 data2
配置:所有節點操作
1.建立mysql使用者
[root@mgm ~]# useradd mysql
2.解壓軟體包
[root@mgm tmp]# tar xf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
3.將軟體包剪下並改名
[root@mgm tmp]# mv mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64 /usr/local/mysql-cluster
4.修改許可權
[root@mgm tmp]# chown mysql.mysql /usr/local/mysql-cluster -r
管理節點:
[root@mgm tmp]# mkdir /usr/local/mysql-cluster/cluster-conf
[root@mgm tmp]# vim /usr/local/mysql-cluster/cluster-conf/config.ini
[ndbd default]
noofreplicas=2
datamemory=80m
indexmemory=18m
[ndb_mgmd]
id=1
hostname=192.168.1.3
datadir=/usr/local/mysql-cluster/data
[ndbd]
id=2
hostname=192.168.1.6
datadir=/usr/local/mysql-cluster/ndbdata
[ndbd]
id=3
hostname=192.168.1.7
datadir=/usr/local/mysql-cluster/ndbdata
[mysqld]
id=4
hostname=192.168.1.4
[mysqld]
id=5
hostname=192.168.1.5
sql節點配置:
# vim /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.1.3
[mysql_cluster]
ndb-connectstring=192.168.1.3
data節點配置:
# mkdir /usr/local/mysql-cluster/ndbdata
# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql-cluster/ndbdata
ndbcluster
ndb-connectstring=192.168.1.3
[mysql_cluster]
ndb-connectstring=192.168.1.3
初始化sql節點:
#cd /usr/local/mysql-cluster
#./scripts/mysql_install_db --user=mysql
啟動manager節點:(啟動前把mysqld服務關閉)
# cd /usr/local/mysql-cluster
# ./bin/ndb_mgmd -f cluster-conf/config.ini
啟動資料節點:
#cd /usr/local/mysql-cluster
#./bin/ndbd
啟動sql節點:
#cd /usr/local/mysql-cluster
#./bin/mysqld_safe --user=mysql &
管理節點:
# ./bin/ndb_mgm -e show \\檢查集群的狀態
mysql分布式搭建 MySQL分布式集群搭建
1 準備集群搭建環境 使用6臺虛擬機器來搭建mysql分布式集群,相應的實驗環境與對應的mysql節點之間的對應關係如下圖所示 管理節點 mgm 這類節點的作用是管理mysqlcluster內的其他節點,如提供配置資料,並停止節點,執行備份等。由於這類節點負責管理其他節點的配置,應該在啟動其他節點之...
MySQL分布式集群搭建
1 準備集群搭建環境 使用6臺虛擬機器來搭建mysql分布式集群,相應的實驗環境與對應的mysql節點之間的對應關係如下圖所示 管理節點 mgm 這類節點的作用是管理mysqlcluster內的其他節點,如提供配置資料,並停止節點,執行備份等。由於這類節點負責管理其他節點的配置,應該在啟動其他節點之...
MySQL分布式集群搭建
mysql分布式集群搭建 標籤 分布式架構,框架類,mysql 發布於 2017 08 25 15 11 29 1 準備集群搭建環境 使用6臺虛擬機器來搭建mysql分布式集群 相應的實驗環境與對應的mysql 節點之間的對應關係如下圖所示 管理節點 mgm 這類節點的作用是管理mysqlclust...