天天看點

利用mysql-cluster軟體實作mysql叢集

                                                         mysql叢集

一、準備系統壞境

        使用5台機器redhat linux 5 配置一個mysql叢集

        資源配置設定

    IP                                Description                                                             主機名

192.168.0.199            Management Node  管理節點                             Management

192.168.0.191              SQL Node               執行sql語句的節點             sqlnodeA

192.168.0.133               SQL Node              執行sql語句的節點            sqlnodeB

192.168.0.196               Data Node             存儲資料的節點                 datanodeA

192.168.0.17                Data Node               存儲資料的節點               datanodeB

二、軟體準備

     現在新版本有7.的了。從mysql網站可以下載下傳到。

  mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz 

三、準備配置。

    1、配置管理節點。

[root@localhost local]# tar xzvf mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz  

[root@localhost local]# mv mysql-cluster-gpl-6.3.20-linux-i686-glibc23 mysql

其實管理節點隻需要ndbd_mgmd ,ndbd_mgm倆個程式,可以把所有的包都使用,也可以從其他4個節點拷貝這倆個程式過來就可以了。

建立使用者: 此步驟在其他4個節點執行相同的操作。

[root@Management ~]# useradd mysql

修改軟體的使用者群組

[root@Management local]# chown mysql:mysql -R mysql

編輯配置檔案,由于配置檔案不存在,是以需要手動建立。

[root@Management cluster-conf]# pwd

/usr/local/mysql/cluster-conf

[root@Management cluster-conf]# cat config.ini 

#此選項是對資料節點的配置

[ndbd default]

NoOfReplicas=2    # 資料複制的分數

DataMemory=80M    # 配置設定資料記憶體

IndexMemory=18M   # 配置設定索引使用記憶體

# 管理節點選項:

[ndb_mgmd]

id=1

hostname=192.168.0.199           # 這個是管理節點的IP位址

datadir=/var/lib/mysql-cluster   # 管理所有點點日志的檔案目錄

#資料節點A配置

[ndbd]

id=2

hostname=192.168.0.196             #datanodeA的IP位址

datadir=/usr/local/mysql/ndbdata   #目錄如果不存在需要手動建立,在datanodeA從建立

#資料節點B配置

id=3

hostname=192.168.0.17             #datanodeB的IP位址

datadir=/usr/local/mysql/ndbdata   #目錄如果不存在需要手動建立,在datanodeB從建立

#SQL節點A配置

[mysqld]

id=4

hostname=192.168.0.191              #sql節點A的IP位址

#SQL節點B配置

id=5

hostname=192.168.0.133             #sql節點B的IP位址

#其中id=項不是必須配置的,如果不配置mysql也會自動配置設定一個。·

[root@Management cluster-conf]#

管理節點配置完成,下面配置sql,data節點。

首先将軟體環境準備好,直接拷貝mysql目錄到其他4個節點。

1、配置sql節點,A和B配置一樣。配置完A後将配置檔案拷貝就可以了。

在192.168.0.191和192.168.0.133上配置

[root@sqlnodeA ~]# useradd mysql

[root@sqlnodeA ~]# chown mysql:mysql -R /usr/local/mysql/ 

[root@sqlnodeA ~]# vi /etc/my.cnf 

#SQL½節點A的配置檔案

ndbcluster   #配置資料的存儲引擎

ndb-connectstring=192.168.0.199        #管理伺服器

[mysql_cluster]

ndb_connectstring=192.168.0.199         #管理伺服器

[root@sqlnodeA ~]# chown mysql:mysql /etc/my.cnf

[root@sqlnodeA ~]# scp /etc/my.cnf 192.168.0.133:/etc/

#sqlnodeB的配置簡化。

[root@sqlnodeB ~]# useradd mysql

[root@sqlnodeB ~]# chown mysql:mysql /etc/my.cnf 

[root@sqlnodeB ~]# chown mysql:mysql /usr/local/mysql/ -R

配置完成後,初始話mysql。

[root@sqlnodeA mysql]# pwd

/usr/local/mysql

[root@sqlnodeA mysql]# ./scripts/mysql_install_db --user=mysql

WARNING: The host 'sqlnodeA' could not be looked up with resolveip.

This probably means that your libc libraries are not 100 % compatible

with this binary MySQL version. The MySQL daemon, mysqld, should work

normally with the exception that host name resolving will not work.

This means that you should use IP addresses instead of hostnames

when specifying MySQL privileges !

Installing MySQL system tables...

OK

Filling help tables...

SQL節點B也執行相同的操作。

[root@sqlnodeB mysql]# ./scripts/mysql_install_db --user=mysql

SQL節點配置完成,下面配置資料節點

在192.168.0.196和192.168.0.17上配置。A和B配置一樣。配置完A後将配置檔案拷貝就可以了。

[root@datanodeA ~]# useradd mysql

[root@datanodeA ~]# vi /etc/my.cnf

#這是資料節點A的配置檔案

datadir=/usr/local/mysql/ndbdata   #資料存放目錄,一定要和管理節點寫的一樣

ndbcluster                         #運作的資料庫引擎

ndb-connectstring=192.168.0.199     #管理節點

ndb-connectstring=192.168.0.199

"/etc/my.cnf" [New] 8L, 299C written

[root@datanodeA ~]# mkdir /usr/local/mysql/ndbdata

[root@datanodeA ~]# chown mysql:mysql /usr/local/mysql/ -R

[root@datanodeA ~]# chown mysql:mysql /etc/my.cnf

将配置檔案給資料節點B

[root@datanodeA ~]# scp /etc/my.cnf 192.168.0.17:/etc/

my.cnf                                                         100%  299     0.3KB/s   00:00   

資料節點B配置簡化 

[root@datanodeB ~]# useradd mysql

[root@datanodeB ~]# mkdir /usr/local/mysql/ndbdata

[root@datanodeB ~]# chown mysql:mysql -R /usr/local/mysql/ndbdata/

[root@datanodeB ~]# chown mysql:mysql /etc/my.cnf 

全部配置完成,下面開始啟動測試

首先啟動管理節點。

#啟動報錯,沒目錄建立一個

[root@Management mysql]# ./bin/ndb_mgmd -f cluster-conf/config.ini 

Cannot become daemon: /var/lib/mysql-cluster/ndb_1.pid: open for write failed: No such file or directory

[root@Management mysql]# mkdir /var/lib/mysql-cluster

[root@Management mysql]# ./bin/ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

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

[ndbd(NDB)]     2 node(s)

id=2 (not connected, accepting connect from 192.168.0.196)

id=3 (not connected, accepting connect from 192.168.0.17)

[ndb_mgmd(MGM)] 1 node(s)

id=1    @192.168.0.199  (mysql-5.1.30 ndb-6.3.20)

[mysqld(API)]   2 node(s)

id=4 (not connected, accepting connect from 192.168.0.191)

id=5 (not connected, accepting connect from 192.168.0.133)

ndb_mgm>

用ndb_mgm指令進入互動模式,輸入show指令可以檢視到節點的狀态,因為現在其他節點都沒有啟動,所有狀态都是 not connected的。

下面啟動各個節點的mysqld服務。

1、啟動sql節點。AB啟動方法相同。

[root@sqlnodeA mysql]# ./bin/mysqld_safe -user=mysql &

[root@sqlnodeB mysql]# pwd

[root@sqlnodeB mysql]# ./bin/mysqld_safe -user=mysql &

啟動完成後可以用netstat指令,檢視3306端口已經啟動。

2、啟動資料節點。無需啟動mysqld服務。

[root@datanodeA ~]# cd /usr/local/mysql/

[root@datanodeA mysql]# ./bin/ndbd

[root@datanodeB ~]# cd /usr/local/mysql/

[root@datanodeB mysql]# ./bin/ndbd

3、啟動完成,再從管理節點檢視下狀态

ndb_mgm> 

id=2    @192.16

8.0.196  (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0, Master)

id=3    @192.168.0.17  (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0)

id=4    @192.168.0.191  (mysql-5.1.30 ndb-6.3.20)

id=5    @192.168.0.133  (mysql-5.1.30 ndb-6.3.20)

可以看到所有節點都連結正常了

4、測試

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

[root@sqlnodeA mysql]# ./bin/mysql -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> show databases ;

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

| Database           |

| information_schema | 

| mysql              | 

| test               | 

3 rows in set (0.01 sec)

mysql> create database cluster ;

Query OK, 1 row affected (0.18 sec)

mysql> use cluster ;

Database changed

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

Query OK, 0 rows affected (0.03 sec)

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

Query OK, 1 row affected (0.00 sec)

mysql> select * from test1 ;

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

| id   | name    |

|    1 | zhaoyun | 

1 row in set (0.00 sec)

mysql>

現在是在SQL節點A上建立的資料庫,下面從SQL節點B登入,檢視效果。

[root@sqlnodeB mysql]# ./bin/mysql -uroot

Your MySQL connection id is 4

Server version: 5.1.30-ndb-6.3.20-cluster-gpl MySQL Cluster Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

| cluster            | 

4 rows in set (0.00 sec)

mysql> use cluster

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

mysql> show tables ;

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

| Tables_in_cluster |

| test1             | 

mysql> show create table test1 ;

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

| Table | Create Table                                                                                                                     |

| test1 | CREATE TABLE `test1` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(10) DEFAULT NULL

) ENGINE=ndbcluster DEFAULT CHARSET=latin1 | 

mysql> insert into test1 values(2,'zhao');

|    2 | zhao    | 

2 rows in set (0.00 sec)

現在看來,在SQL節點B登入,可以看到sql節點A建立的内容。那麼,再從B建立内容看A是否能看到。

2 rows in set (0.00 sec)  在A節點也可以看到從B節點插入的資料了。

說明現在sql節點已經工作正常,因為資料存放在資料節點,任何一個壞掉,都不影響使用。

本文轉自zhaoyun00 51CTO部落格,原文連結:http://blog.51cto.com/zhaoyun/738435

上一篇: shell知識
下一篇: 屬性檔案