1. 程式人生 > >【Data Cluster】真機環境下MySQL資料庫叢集搭建

【Data Cluster】真機環境下MySQL資料庫叢集搭建

 摘要:本年伊始階段,由於實驗室對不同資料庫效能測試需求,才出現MySQL叢集搭建。購置主機,交換機,雙絞線等一系列準備工作就緒,也就開始叢集搭建。起初筆者對此不甚瞭解,查閱很多資料,最終都不太完善。故筆者真機環境測試成功後,整理出此搭建文件,一則防止遺忘知識總結,另則與人共享。前天完成文件由於文字偏多,給陌生配置者帶來不小壓力。更改文件版本後,減少文字增加圖片,讓一個大一的對mysql叢集不瞭解者,照此配置。能夠配置成功,故發表。(本文原創/整理,轉載請標註原文出處: 真機環境下MySQL-Cluster搭建文件 )

相關文章

MySQL Cluster簡介

      MySQL cluster 和 Oracle RAC 完全不同,它採用 無共享架構Shared nothing(shared nothing architecture)。整個叢集由管理節點

(ndb_mgmd),處理節點(mysqld)和儲存節點(ndbd)組 成,不存在一個共享的儲存裝置。MySQL cluster 主要利用了 NDB 儲存引擎來實現,NDB 儲存引擎是一個記憶體式儲存引擎,要求資料必須全部載入到記憶體之中。資料被自動分佈在叢集中的不同存 儲節點上,每個儲存節點只儲存完整資料的一個分片(fragment)。同時,使用者可以設定同一份資料儲存在多個不同的儲存節點上,以保證單點故障不會造 成資料丟失。MySQL cluster 主要由 3 各部分組成:

  • SQL 伺服器節點
  • NDB 資料儲存節點
  • 監控和管理節點

這樣的分層也是與 MySQL 本身把 SQL 處理和儲存分開的架構相關係的。MySQL cluster 的優點在於其是一個分散式的資料庫叢集,處理節點和儲存節點都可以線性增加,整個叢集沒有單點故障,可用性和擴充套件性都可以做到很高,更適合 OLTP 應用。但是它的問題在於:

  •  NDB(“NDB” 是一種“記憶體中”的儲存引擎,它具有可用性高和資料一致性好的特點。) 儲存引擎必須要求資料全部載入到記憶體之中,限制比較大,但是目前 NDB 新版本對此做了改進,允許只在記憶體中加 載索引資料,資料可以儲存在磁碟上。
  •  目前的 MySQL cluster 的效能還不理想,因為資料是按照主鍵 hash 分佈到不同的儲存節點上,如果應用不是通過主鍵去獲取資料的話,必須在所有的儲存節點上掃描, 返回結果到處理節點上去處理。而且,寫操作需要同時寫多份資料到不同的儲存節點上, 對 節點間的網路要求很高。

雖然 MySQL cluster 目前效能還不理想,但是 share nothing 的架構一定是未來的趨勢,Oracle 接手 MySQL之後,也在大力發展 MySQL cluster,我對 MySQL cluster 的前景抱有很大的期待。

mysql-cluster構造

安裝mysql-cluster首先要了解cluster的構造,Cluster大體上是由管理節點(mgmd)、資料節點(ndbd)、sql節點(mysqld)組成的。

                     

虛擬機器安裝centos6.6

系統要求:

記憶體:4G(最少4G)

CPU:需要支援VT

如果你是筆記本使用者那麼cpu虛擬化可能是關閉的,請在BIOS下設定virtualization 為enable

新建虛擬機器,選擇典型安裝,點選下一步

 

點選下一步

 

這裡使用者名稱最好是mysql因為後面要用到。設定成其他使用者也可以。

下一步

 

位置就是儲存這個虛擬centos系統的位置

下一步

 

選擇如圖所示,下一步

 

選擇自定義硬體,建議最好每個虛擬機器分配1G的記憶體。每個cent最少分配512M記憶體。

點選完成就可以了。

虛擬機器安裝完成後,用root許可權進入。密碼和mysql賬戶的密碼相同。

mysql-cluster下載

centos6.6搭建環境配置

首先進入linux終端,右鍵桌面如圖所示

 

Open in terminal(終端)

安裝mysql-cluster前首先要解除安裝原有系統自帶的mysql

聯網解除安裝(終端下執行命令)

#yum remove mysql

手動清理(終端下執行命令)

#rpm –qa|grep mysql* (這條是查詢系統中存在的mysql)

#rpm –e –nodeps mysql-libs-5.1.71-1.el6.x86_64 (不同版本的centos這個版本也不同)

mysql-cluster安裝包匯入cent中

首先查詢需要匯入的cent的ip地址,終端下輸入

#ifconfig

 

如圖所示其中inet addr:192.168.191.129就是這個cent的ip地址。

下載軟體winscp

 

開啟軟體

 

新建站點,主機名就是cent 的ip ,使用者名稱使用root

點選登入,輸入密碼,連線成功

 

左邊是windows右邊是cent

Cent下進入目錄/usr/local/src 把你的mysql-cluster安裝檔案放在這個目錄下

開啟cent終端

新增mysql使用者和組(如果前面安裝虛擬機器的時候使用的使用者是mysql則跳過此步驟

新增mysql使用者

1.      # groupadd mysql 

2.      # useradd mysql -g mysql

安裝mysql-cluster 7.4.4-linux

1.      # cd /usr/local/src/(已下載好叢集版) 

2.      # tar -xvf mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64.tar.gz  

3.      # mv mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64 ../mysql 

4.      # cd .. 

5.      # chown -R mysql:mysql mysql/ 

6.      # cd mysql 

7.      # scripts/mysql_install_db --user=mysql  

 

當出現這個頁面則mysql-cluster安裝成功

以上步驟是安裝mysql-cluster必須步驟,所有機器都要進行以上的步驟

叢集配置

首先進行管理節點的配置(終端輸入)

# vi  /var/lib/mysql-cluster/config.ini (目錄和檔案沒有請新建,新增以下內容)

1.      [NDBD DEFAULT] 

2.      NoOfReplicas=2 

3.      [TCP DEFAULT] 

4.      portnumber=3306 

5.       

6.      [NDB_MGMD] 

7.      #設定管理節點伺服器  

8.      nodeid=1 

9.      HostName=192.168.191.132 (管理節點伺服器ip地址)

10.   DataDir=/var/mysql/data 

11.    

12.   [NDBD] 

13.   nodeid=2 

14.   HostName=192.168.191.130 (ndbd點ip地址)

15.   DataDir=/var/mysql/data 

16.    

17.   [MYSQLD] 

18.   nodeid=3 

19.   HostName=192.168.191.131  (mysqld節點ip地址)

20.   [MYSQLD] 

21.   nodeid=4 

22.   HostName=192.168.191.133  (mysqld節點ip地址)

23.    

24.   #必須有空的mysqld節點,不然資料節點斷開後啟動有報錯 

25.   [MYSQLD] 

26.   nodeid=5 

27.   [mysqld] 

28.   nodeid=6

以上內容輸入完畢後,按ESC,輸入:wq即可儲存退出

 

拷貝ndb_mgm、ndb_mgmd、config.ini到bin目錄。

# cd /usr/local/mysql/bin 

# cp ./ndb_mgm /usr/local/bin/ 

# cp ./ndb_mgmd /usr/local/bin/

# cp /var/lib/mysql-cluster/config.ini /usr/local/bin/

 

資料節點配置(終端輸入)

# vi /etc/my.cnf (新增以下內容)

[mysqld] 

datadir=/var/mysql/data 

socket=/var/mysql/mysql.sock 

user=mysql 

# Disabling symbolic-links is recommended to prevent assorted security risks 

symbolic-links=0 

#執行NDB儲存引擎 

ndbcluster  

#指定管理節點 

ndb-connectstring=192.168.191.132  (管理節點ip)

[MYSQL_CLUSTER] 

ndb-connectstring=192.168.191.132   (管理節點ip)

[NDB_MGM] 

connect-string=192.168.191.132   (管理節點ip)

[mysqld_safe] 

log-error=/var/mysql/log/mysqld.log 

pid-file=/var/run/mysqld/mysqld.pid

Sql節點配置(終端輸入)

# cd /usr/local/mysql/

設定mysql服務為開機自啟動

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 

# chmod +x /etc/rc.d/init.d/mysqld 

# chkconfig --add mysqld

# vi /etc/my.cnf (新增以下內容)

[mysqld]    

datadir=/var/mysql/data 

socket=/var/mysql/mysql.sock 

user=mysql 

# Disabling symbolic-links is recommended to prevent assorted security risks 

symbolic-links=0 

log-bin = /var/mysql/log/mysql-bin.log 

max_connections=1000 

#以下為mysql 主主模式的配置檔案 

# 忽略mysql資料庫複製 

binlog-ignore-db=mysql 

# 每次增長2 

auto-increment-increment=2 

# 設定自動增長的欄位的偏移量,即初始值為2 

auto-increment-offset=1 

ndbcluster 

ndb-connectstring=192.168.191.132 (管理節點ip)

[MYSQL_CLUSTER] 

ndb-connectstring=192.168.191.132  (管理節點ip)

[NDB_MGM] 

connect-string=192.168.191.132  (管理節點ip)

[mysqld_safe] 

log-error=/var/mysql/log/mysqld.log 

pid-file=/var/run/mysqld/mysqld.pid 

這裡要注意,在var目錄下新建mysql目錄,在新建的mysql目錄下建立log和data目錄

另外要給這兩個目錄授權程式碼如下

# cd /var

# chown –R mysql:mysql mysql/

下面兩個命令是對mysql命令的一個link,否則無法使用mysql命令

# Ln –s /usr/local/mysql/bin/mysql /usr/bin

# Ln –s /var/mysql/mysql.sock /tmp/mysql.sock

執行mysql-cluster

mysql叢集的啟動順序為:管理節點->資料節點->SQL節點

mysql叢集的關閉順序為,管理節點->資料節點->SQL節點

開啟服務的時候注意防火牆問題

注意把管理節點的防火牆關閉 命令如下:

# /etc/init.d/iptables stop

首先開啟管理節點服務

# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial(注意第一次或者對config檔案進行修改後,開啟服務一定要加上initial否則新增加的內容不會被使用)

然後開啟ndbd節點服務

# /usr/local/mysql/bin/ndbd --initial(此處同上)

出現一下資訊表示ndbd節點啟動成功.

2012-03-28 02:01:38 [ndbd] INFO -- Angel connected to '10.32.33.120:1186'

2012-03-28 02:01:38 [ndbd] INFO -- Angel allocated nodeid: 36

最後開啟兩個sql節點131和133

#service mysqld start

出現mysql success表示服務啟動成功

開啟管理節點,終端輸入

# ndb_mgm

#ndb_mgm> show

顯示以下資訊,則mysql-cluster安裝部署成功

Cluster Configuration

---------------------

[ndbd(NDB)] 2 node(s)

id=2 @192.168.191.130 (mysql-5.5.20 ndb-7.4.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

id=1 @192.168.191.132 (mysql-5.5.20 ndb-7.4.4)

[mysqld(API)] 4 node(s)

id=3 @192.168.191.131 (mysql-5.5.20 ndb-7.4.4)

id=4 @192.168.191.133 (mysql-5.5.20 ndb-7.4.4)

id=5 (not connected, accepting connect from any host)

id=6 (not connected, accepting connect from any host)

可以看到各個節點已經連線上了。

以下是關於mgm相關的命令

# ndb_mgm

# ndb_mgm> show 檢視各節點情況。  

# ndb_mgm> all report memory 檢視各資料節點使用情況  

# ndb_mgm>create nodegroup 3建立資料節點分組   

# mysql> alter online table data_house reorganize partition; 調整分割槽資料

# ndb_mgm>shutdown關閉節點

# ndb_mgm>exit退出

常見問題

Mysqld端服務無法啟動

[[email protected] Desktop]#service mysqld start

Starting mysql.the service quit without updating PID file (/[FAILED]/var/mysql/log/localhost.localdomain.pid).

先去檢視日誌

#cd /var/mysql/data

#less localhost.localdomain.err

如果錯誤是

Fatal error:can’t open and lock privilege tables:Table’mysql.user’ doesn’t exist

解決方法:

終端輸入

到mysql目錄下/usr/local/mysql

輸入

Scripts/mysql_install_db –user=mysql(初始化資料庫即可)

其他問題請注意檢視問題所在的資料夾許可權問題

測試

1、從SQL節點131登入,建立資料庫和表,進行簡單測試。

mysql> create database tltest ;

mysql> use tltest;

Database changed

mysql> create table test1(id int,name varchar(10)) engine=ndb ;

mysql> insert into test1 values(1,'tl');

mysql> select * from test1 ;

+------+---------+

| id   | name  |

+------+---------+

|  1 |    tl   |

+------+---------+

登陸133節點,檢視效果,庫,表和資料已經同步。

從133節點插入一條資料,同樣登陸131,也能看到資料已經同步。

尾註:本系列文件,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請註釋出處.:

相關推薦

Data Cluster環境MySQL資料庫叢集搭建

 摘要:本年伊始階段,由於實驗室對不同資料庫效能測試需求,才出現MySQL叢集搭建。購置主機,交換機,雙絞線等一系列準備工作就緒,也就開始叢集搭建。起初筆者對此不甚瞭解,查閱很多資料,最終都不太完善。故筆者真機環境測試成功後,整理出此搭建文件,一則防止遺忘知識總結,另則與人共享。前天完成文件由於文字偏

電信學2016.01實際傳播環境的大規模MIMO

本文為瑞典隆德大學(作者:XiangGao)的電子資訊博士論文,共271頁。 行動通訊正向著第五代(5G)演進。在不久的將來,預計生活中實現網路互連的裝置(如電話、平板電腦、感測器、車輛等)數量會爆炸性地增加。因此需要比現在4G系統更高的資料速率。在5G的願景中,還包括在偏遠地區進行更

順序表純C環境,函式傳遞的指標指向報錯及解決

之前開始學順序表的時候,就沒有很好地弄懂,函式裡指標的傳遞這一塊,今天把錯誤範例和一些解決方式拿出來分析一下。 網上有很多掛羊頭賣狗肉的c語言教程,函式是引用呼叫的,就很誤導人。 Wrong: typedef struct { int *elem; in

TCP/IP虛擬機器環境,TCP協議的簡單實現以及[Errno 61] Connection refused的排障

環境: Mac:VIM8+YouCompleteMe+Python3 Parallels下CentOS7:VIM8+YouCompleteMe+Python3 目的:  Mac為Client,CentOS7為Server.Server監聽埠,並對Client的TCP請

Redis學習:Linux環境的Redis安裝與配置

安裝環境 redis是C語言開發的,安裝redis需要先將官網上下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc。這個最好使用yum安裝,因為依賴關係比較多,自己不好找

知識圖譜大資料環境知識工程的機遇和挑戰

導讀:知識圖譜已經成為推動人工智慧發展的核心驅動力之一。本文選自清華大學電腦科學與技術系教授、清

高併發高併發環境詭異的加鎖問題(你加的鎖未必安全)

宣告 特此宣告:文中有關支付寶賬戶的說明,只是用來舉例,實際支付寶賬戶要比文中描述的複雜的多。也與文中描述的完全不同。 前言 很多網友留言說:在編寫多執行緒併發程式時,我明明對共享資源加鎖了啊?為什麼還是出問題呢?問題到底出在哪裡呢?其實,我想說的是:你的加鎖姿勢正確嗎?你真的會使用鎖嗎?錯誤的加鎖方式不但

高併發高併發環境如何防止Tomcat記憶體溢位?看完我懂了!!

寫在前面 隨著系統併發量越來越高,Tomcat所佔用的記憶體就會越來越大,如果對Tomcat的記憶體管理不當,則可能會引發Tomcat記憶體溢位的問題,那麼,如何防止Tomcat記憶體溢位呢?我們今天就來一起探討下這個問題。 防止Tomcat記憶體溢位可以總結為兩個方案:一個是設定Tomcat啟動的初始記

高併發高併發環境構建快取服務需要注意哪些問題?我和阿里P9聊了很久!

## 寫在前面 > 週末,跟阿里的一個朋友(去年晉升為P9了)聊了很久,聊的內容幾乎全是技術,當然了,兩個技術男聊得最多的話題當然就是技術了。從基礎到架構,從演算法到AI,無所不談。中間又穿插著不少天馬行空的想象,雖然現在看起來不太實際,但是隨著技術的進步,相信五年、十年之後都會實現的。 > &

docker環境MYSQL PXC叢集熱備份和還原

之前搭建了在docker上搭建了一套MySQL的PXC叢集,當時沒有做備份處理,今天搭建了一套備份方案。 MySQL的資料備份方式有很多種,如自帶的MySQLDUMP命令,或者直接拷貝資料檔案等等方式,但是這些方式都是系統的冷備份,即需要停機服務進行備份,這種方式我沒有采用。 本次備份方

Linux環境mysql資料庫定時備份

作為web後端開發,一直都是在windows系統上對mysql進行增刪改查的工作,對於如何備份以及在linux環境下如何定時備份一直都沒有深入的去了解過;這次正好藉著專案需求,研究一下。 1、mysql資料庫的備份命令:/usr/bin/mysqldump -uroot -

windows環境 Mysql資料庫自動備份

確定mysqldump 命令是否可用1,在 dos模式 下,進入對應mysql bin 目錄。 如 本例為 C:\Program Files\MySQL\MySQL Server 5.7\bin2,輸入如下命令C:\Program Files\MySQL\MySQL Serv

Learing-Python0:Windows環境Python2和Python3的安裝

一行 str rip 打開 spa ont exe 分享圖片 tps 一、下載 可以在官網下載最新版本, 也可以在以下鏈接中找想安裝的版本下載下來,這裏以Python3.6和Python2.7為例 https://www.python.org/ftp/python/

Python0:windows環境 安裝python3

瞭解Python 首先·····Python是一門解釋性語言,這是他的特點,這讓Python似乎與“高效”無緣。然而你知道嗎,著名的Instagram伺服器就是是用Python+Django搭建的,而且月活使用者超過7億。要知道Python+Django是一個以速度慢著稱的web框架,一定是python的某

LinuxCentOS 7環境安裝中文字型庫

JAVA畫圖時常用到Font 類物件 這樣的物件依賴於本地的欄位。新裝的linux沒有安裝欄位庫,和相應的字型。 1、fc-list檢視字型庫 2、yum -y install fontconfig安裝 3、安裝好後/usr/share目錄下多兩個目錄fonts和fo

REACT NATIVE 系列教程之十執行報錯COMMAND /BIN/SH FAILED WITH EXIT CODE 1 的解決方法

Himi最近在真機執行遇到  Command /bin/sh failed with exit code 1  的錯誤, 模擬器執行沒有任何問題。此問題已解決,這裡分享下解決方案。先來看下錯誤日誌,如下圖:主要是劃線的部分:1.PhaseScriptExecution Bundle\ React\ Nativ

RACrac環境資料庫備份與還原

【RAC】rac環境下的資料庫備份與還原 一.1 BLOG文件結構圖 一.2 前言部分 一.2.1 導讀 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所

數據庫3.0 ‘’Windows系統環境MySQL安裝

數據庫 alt 壓縮 article 免安裝配置 acm image mysql my.ini 1.0 我的操作系統是window10 專業版 64位。,不過至少windows7以上系統都是一樣的。 關於MySQL如何下載,請參考博文: 【數據庫】2.0 如何獲得MySQL

親測可行Centos 7環境離線安裝Docker

在Centos中安裝Docker需要注意Centos的版本和Docker的版本,Docker的不同版本要求對應的Centos版本才行(雖然可以安裝成功,但是啟動容器是會報錯的) 一般執行容器看到這樣的錯誤: docker: Error response from daem

iOS測試及佈署Code Sign error問題總結

除此之外可能的情況: Code Sign error: Certificate identity 'iPhone Developer: idf (XR9HN3TD7E)' appears more than once in the keychain. The code