Linux下搭建MySQL集群
一、MySQL集群簡介
1、什麼是MySQL集群
MySQL集群是一個無共享的(shared-nothing)、分散式節點架構的存儲方案,其目的是提供容錯性和高性能。
數據更新使用讀已提交隔離級別(read-committedisolation)來保證所有節點數據的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的數據(如果任何一個寫操作失敗,則更新失敗)。
無共享的對等節點使得某台伺服器上的更新操作在其他伺服器上立即可見。傳播更新使用一種複雜的通信機制,這一機制專用來提供跨網路的高吞吐量。
通過多個MySQL伺服器分配負載,從而最大程序地達到高性能,通過在不同位置存儲數據保證高可用性和冗餘。
2、名稱概念
MySQL集群有如下三層:
應用程序層:負責與MySQL伺服器通信的各種應用程序。
Mysql伺服器層:處理SQL命令,並與NDB存儲引擎通信和Mysql伺服器。
NDB集群組件層:NDB集群組件有時也稱數據節點,負責處理查詢,然後將結果返回給mysql伺服器。
其中MySQL資料庫集群主要包括如下三部分:
1) SQL節點(SQL node - 下圖對應為 mysqld):分散式資料庫。包括自身數據和查詢中心結點數據
2) 數據節點(Data node - ndbd):集群共享數據(內存中)
3) 管理伺服器(Management Server - ndb_mgmd):管理集群 SQL node,Data node
拓撲結構圖如下所示:
二、環境說明
1、系統環境
2、軟體環境
MySQL集群版本:
mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz
註:依據系統,在MySQL官網自行下載。
三、搭建集群(Linux環境)
1、安裝集群版本
a、準備工作
不管是Management Server,還是Data node、SQL node,都需要先安裝MySQL集群版本,然後根據不用的配置來決定當前伺服器有哪幾個角色。
安裝之前準備好mysql用戶和mysql用戶組,
相關命令:
groupadd mysql
為了方便測試,確定相關機器的防火牆已關閉(或者設置防火牆這幾台機器之間的網路連接是暢通無阻的),
相關命令:
chkconfig iptables off
b、安裝集群版本
1.上傳安裝包至/usr/local目錄下,並解壓
tar -zxvf mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz
2.重命名文件夾
mv mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64 mysql
3.授權
chown -R mysql:mysql mysql
4.切換mysql用戶
su - mysql
5.安裝MySQL
cd /usr/local/mysql
註:所有伺服器上都需要執行上述操作來安裝MySQL集群版本。
2、集群配置
a、管理節點
1.root用戶下,創建目錄和配置文件
mkdir /var/lib/mysql-cluster
config.ini配置信息如下:
[NDBD DEFAULT]
2.授權
chown -R mysql:mysql /var/lib/mysql-cluster
3.切換用戶
su - mysql
4.啟動管理服務
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
注:命令行中的ndb_mgmd是mysql cluster的管理伺服器,後面的-f表示後面的參數是啟動的參數配置文件。
如果在啟動後過了幾天又添加了一個數據節點,這時修改了配置文件啟動時就必須加上--initial參數,不然添加的節點不會作用在mysql cluster中。
b、數據節點
1.編輯/etc/my.cnf文件
# vim /etc/my.cnf
2.切換用戶
su - mysql
3.啟動數據節點服務
/usr/local/mysql/bin/ndbd --initial
註:第一次啟動需要加參數:–initial,以後就不用加了,直接運行: /usr/local/mysql/bin/ndbd
c、SQL節點
1.編輯/etc/my.cnf文件(數據節點和SQL節點在統一伺服器時可省略)
# vim /etc/my.cnf
2.複製mysqld到系統服務裡面去
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
3.切換用戶
su - mysql
4.啟動數據節點服務
service mysqld start
d、完成效果
ndb_mgm> show
四、常用命令與問題整理
1) ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm 執行之後就是管理控制台了,裡面可以繼續輸入命令。(具體命令可以使用help查看)
2) 停止集群伺服器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown
如果集群配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1
3) 停止SQL節點的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown
4)使用需要注意如下兩點:
a.表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創建,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內複製它們。如果使用mysqldump的輸出從已有資料庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何錶創建語句,或 用這類選項之一替換任何已有的ENGINE(或TYPE)選項。
b.另外還請記住,每個NDB表必須有一個主鍵。如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(注釋:該隱含 鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的內存來容納這些自動創建的鍵,出現問題並不罕見)。
※IoT 數據預處理:線性重採樣全過程解析
※精選!15 個必備的 VSCode 插件
TAG:青峰科技 |
※Docker Compose搭建MySQL主從複製集群
※Docker環境下搭建DNS LVS(keepAlived) OpenResty伺服器簡易集群
※MySQL集群架構:MHA+MySQL-PROXY+LVS實現MySQL集群架構高可用等
※Keepalived+LVS+nginx搭建nginx高可用集群
※Redis集群搭建
※HA+HDFS+HDFS-HA集群配置+YARN-HA配置+HDFS Federation架構設計
※SpringCloud實現Eureka集群配置
※SpringCloud如何實現Eureka集群、HA機制?
※大規模集群下的Hadoop NameNode
※Kubernetes:在異構GPU集群上分散式深度學習
※FastDFS集群搭建與實戰
※離線環境快速搭建ElasticSearch集群
※docker zookeeper 集群搭建
※集群服務間通信之RoutingMesh
※通向架構師的道路 ( 第十七天 ) IBM Websphere 集群探秘 – WASND
※如何使用Rancher 2.0在Kubernetes集群上部署Istio
※Grafana+Telegraf+Influxdb監控Tomcat集群方案
※使用 kubeadm 搭建 kubernetes1.10 集群
※Tomcat集群實現Session共享
※如何在 Kubernetes 環境中運行 Spark 集群