構建MySQL叢集

來源:互聯網
上載者:User

標籤:mysql 叢集


MySQL叢集作用:解決MySQLProxy 伺服器的缺點單點故障資料備份


結構圖如下:

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/88/5C/wKiom1fyFs6gtx6XAACycUylU2U172.png" title="234.png" alt="wKiom1fyFs6gtx6XAACycUylU2U172.png" />

使用6台RHEL6.4虛擬機器,sqlA和sqlB作為SQL節點,ndbA和ndbB作為資料節點,mgmd作為管理節點,這5個節點構成MySQLCluster體系;而另一台虛擬機器192.168.4.120作為MySQL測試客戶機。


角色說明:

用戶端(client)    :訪問叢集主機

管理叢集的主機(mgmd):管理叢集中所有主機,載入自己的主設定檔,設定叢集中所有主機的角色

SQL結點(sql)      :供使用者訪問和執行SQL語句,儲存表結構(2台以上)

資料結點(ndbd節點)  :儲存表中的記錄(2台以上)

 

MySQL叢集提供三進程:

mgmd    管理進程      運行在管理機上    config.ini

mysqld   資料庫服務     運行在sql節點上  /etc/my.cnf

ndbd   資料存放區服務   運行在ndbd節點   /etc/my.cnf

 

1、公用配置(要保留RHEL內建的mysql-libs包)

A、關閉防火牆、selinux,停止mysql資料庫服務,移走設定檔/etc/my.cnf


B、卸載衝突的軟體包(所有節點)

 # rpm -qa | grep -i mysql       //查看原有的mysql包

 # yum -y remove .....


C、安裝叢集軟體(所有節點)

 # tar -xf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar 

 # rpm -Uvh MySQL-Cluster-*.rpm   //預設路徑/var/lib/mysql

 # rpm -qa | grep MySQL-Cluster



D、修改密碼

  # cat /root/.mysql_secret

  # the root user at Tue Dec24 15:24:50 2013 (local time): Z3Qw2OWJ  

  # mysql -u root -p Z3Qw2OWJ

  mysql> SET PASSWORD FOR ‘root‘@‘localhost‘=PASSWORD(‘123‘);

 

2、組態管理主機mgm

啟動管理進程時,調用設定檔/etc/my-cluster.ini,知道叢集中主機的角色(設定檔要自己編輯,不允許有空行)

# mkdir -p /var/log/mysql-cluster  //建立工作資料夾

# vim /etc/my-cluster.ini                                           

[ndbd default]      //定義資料結點的公用配置                         NoOfReplicas=2     //指定一份資料備份幾份(資料結點數或能被資料節點數整除)

DataMemory=80M      //資料記憶體(儲存使用者執行過的SQL語句和查詢結果,通常是實體記憶體的1/3) IndexMemory=18M     //儲存索引的記憶體                                   [ndb_mgmd]               //指定管理主機                           nodeid=1                //指定編號(管理標識),值不允許重複           hostname=192.168.4.100     //管理主機的IP                               datadir=/var/log/mysql-cluster  //路徑在mgm上,用於存放叢集中主機的資訊,路徑需自己建立   [ndbd]                  //指定資料結點1             

nodeid =30                                                       hostname=192.168.4.30            //資料結點的IP                         Datadir=/var/lib/mysql-cluster/data  //路徑在資料結點上要存在,該目錄用於存放表中的記錄   [ndbd]                     //指定資料結點2             

nodeid =40                                                       hostname=192.168.4.40                                               Datadir=/var/lib/mysql-cluster/data                                     [mysqld]                   //指定sql結點1               

nodeid =10                                                       hostname=192.168.4.10           //sql結點的IP                           [mysqld]                   //指定sql結點2                           nodeid =20                                                       hostname=192.168.4.20                                                    

3、配置資料結點ndb(在 .30 .40上操作)

1)建立儲存表中記錄的目錄

  # mkdir -p /var/lib/mysql-cluster/data  

                     

2)編輯設定檔/etc/my.cnf(與mysqld的主設定檔同名)

 若原來已存在my.cnf檔案,則先做改名

# mv /etc/my.cnf /etc/my.cnf.bak 

# vi /etc/my.cnf                                                 [mysqld]                   //設定資料結點                         datadir=/var/lib/mysql-cluster/data //將記錄儲存在原生哪個目錄下,與管理主機上的設定一致 ndb-connectstring=192.168.4.100   //管理主機的IP

ndbcluster                  //指定啟動並執行儲存引擎        

[mysql_cluster]              //設定管理叢集的主機 

ndb-connectstring=192.168.4.100   //管理主機的IP                              

4、配置SQL結點sql (在.10  .20上操作)

1)編輯設定檔/etc/my.cnf

# mv /etc/my.cnf /etc/my.cnf.bak 

# vi /etc/my.cnf                                                   [mysqld]                      //設定sql結點                   

ndbcluster                    //指定表的儲存引擎               

default-storage-engine=ndbcluster                           

[mysql_cluster]                //設定管理叢集的主機
ndb-connectstring=192.168.4.100     //管理主機的IP                            

5、啟動(注意啟動順序)

*正確的啟動順序:管理節點 --> 資料節點 --> SQL節點。

*關閉順序:    SQL節點 --> 資料節點 --> 管理節點。

*資料節點、SQL節點都正常運行後,理論上管理節點可關閉(無監控等任務的話)

        

1)啟動管理進程

 # ndb_mgmd -f /etc/my-cluster.ini --nodaemon    //啟動管理進程指令碼

 # pgrep mgmd          //查看進程是否開啟,可用pkill -9 mgmd 結束管理進程  

 # ndb_mgm            //執行登入管理介面的指令碼                        ndb_mgm>show        //查看叢集資訊                                                      

 # netstat -atunp | grep ndb

 tcp   0  0 0.0.0.0:1186    0.0.0.0:*  LISTEN   4965/ndb_mgmd   


設定為開機自啟動

#vim /etc/rc.local

ndb_mgmd -f /etc/my-cluster.ini  --nodaemon

 

關於管理節點的啟動,有以下幾個需要注意的地方:

ndb_mgmd 預設以後台模式運行(--daemon),調試過程中可添加選項--nodaemon來禁用後台模式;

ndb_mgmd 初次啟動成功以後,會自動儲存叢集配置,以後再啟動時會忽略-f指定的設定檔,除非添加--inital選項(比如向叢集中添加新的節點時,就應該重新初始化)。

 

2)啟動資料結點進程

MySQL Cluster資料節點的對應服務程式為ndbd(單線程的)、ndbmtd(多線程的),初次開機或重新初始化時加 --initial選項,以後不用加。

 

# ndbd --initial-start      //啟動資料結點進程    

# pgrep ndbd             //查看進程,可用pkill -9 ndbd 結束管理進程           

# vim /etc/rc.local        //設定為開機自啟動

 ndbd

                                                 

3)啟動sql結點的資料庫服務進程

 # pgrep mysqld

 # pkill -9 mysql

 # service mysql start

 # chkconfig mysql on 


檢查sql節點預設儲存引擎,確保已支援ndbcluster且作為預設儲存引擎:

# mysql -u root -p123456  //本機帳號登入

mysql> show engines\G;

Engine: ndbcluster

Support: DEFAULT

 

管理節點查看叢集狀態

#ndb_mgm          //進入群集管理環境

ndb_mgm> show         //若能看到如下資訊就說明叢集建立成功

Cluster Configuration

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

[ndbd(NDB)]  2node(s)

id=30 @192.168.4.30  (mysql-5.6.14 ndb-7.3.3, starting, Nodegroup:0)

id=40 @192.168.4.40  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)

 

[ndb_mgmd(MGM)] 1 node(s)

id=1  @192.168.4.100  (mysql-5.6.14 ndb-7.3.3)

 

[mysqld(API)]   2node(s)

id=10 @192.168.4.10  (mysql-5.6.14 ndb-7.3.3)

id=20 @192.168.4.20  (mysql-5.6.14 ndb-7.3.3)

 

6、sql結點授權用戶端使用者(兩點節點都要)

mysql>grant all on *.* to [email protected]‘192.168.4.%‘ identified by ‘123‘;

 

7、MySQL叢集的高可用性測試(驗證叢集)

**如果預設引擎未設為ndbcluster,則建表操作末尾需手工指定儲存引擎**

**不能自動切換兩個節點→mysql-mmm 解決**

        

1)資料同步(自動備份)測試

用戶端登入 mysql節點.10 和.20 ( .10和.20的資料會同步)

# mysql -h192.168.4.10 -uroot -p123

mysql> create database ndb;

mysql> use ndb;

mysql> create table ndb01(idint);

mysql> insert into ndb01values(100);

mysql> select * from ndb01;

+------+

| id  |

+------+

| 100 |

| 100 |

從客戶機訪問20,確認結果(能看到從10上所建的庫、表、表記錄)

# mysql -h192.168.4.20 -uroot-p123

 

2)高可用性測試(單點故障)(關閉一台資料節點)

**只要還有一台資料節點可用,MYSQL資料庫整體就仍然可用**

關閉資料節點.30上的ndbd進程:

# pkill -9 ndbd

# netstat -antup | grep ndbd  //確認


ndb_mgm> show   //此時從管理節點上查看叢集狀態,會發現ndbA已中斷連線

id=30 (not connected, acceptingconnect from 192.168.4.30)


然後從客戶機訪問sqlA或sqlB,仍然可讀、寫資料庫。

 

驗證故障恢複過程

重新啟動.30上的ndbd服務進程,稍待片刻後強制關閉.40上的ndbd服務進程。然後再次訪問.30或.40節點,查詢ndb01表的記錄,發現與前面添加的結果一致:

以上測試成立說明:因故障中斷的資料節點(.30)恢複後,會立即從正常的資料節點(.40)同步資料,確保資料一致性。


3)高可用性測試(關閉一台SQL節點)

這個比較好理解:當MySQL叢集內有多個SQL節點時,只要有一台SQL節點可用,就可以通過它來訪問MySQL資料庫中儲存的表資料。

比如說,關閉sqlA、sqlB中的任何一台以後,還可以通過另外一台來訪問mydb庫


完畢!

本文出自 “Dave-技術部落格” 部落格,請務必保留此出處http://davewang.blog.51cto.com/6974997/1858594

構建MySQL叢集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.