[MySQL] - Zone上實作MySQL Cluster

以前是把MySQL cluster部署在物理節點上,我今天把MySQL部署在solaris的zone中
1.創建zone
由於我僅僅是想驗證功能 ,因此我在一台機器上面建立了5個zone
1個zone做管理節點
2個zone做MySQL API
2個zone做數據節點
先建立zone1,然後克隆其它四個zone
mkdir /export/home/zones/zone1
mkdir /export/home/zones/zone2
mkdir /export/home/zones/zone3
mkdir /export/home/zones/zone4
mkdir /export/home/zones/zone5
chmod 700 /export/home/zones/zone1
chmod 700 /export/home/zones/zone2
chmod 700 /export/home/zones/zone3
chmod 700 /export/home/zones/zone4
chmod 700 /export/home/zones/zone5
zonecfg –z zone1
zonecfg:zone1> set zonepath=/export/home/zones/zone1
zonecfg:zone1> set autoboot=true
zonecfg:zone1> add net
zonecfg:zone1:net> set physical=e100g0
zonecfg:zone1:net> set address=10.0.0.1/24
zonecfg:zone1>info
zonecfg:zone1>verify
zonecfg:zone1> commit
zonecfg:zone1>exit
安裝zone1
zoneadm –z zone1 install
zoneadm –z zone1 boot
zlogin –C zone1
然後對zone1進行一系列的配置即可

然後在zone1中安裝MySQL
1)下載webstack1.4
http://www.opensolaris.org/os/project/webstack/
2)解壓並安裝
例如,
gunzip webstack-native-1.4-b06-solaris-i586.tar.gz
tar –xvf webstack-native-1.4-b06-solaris-i586.tar
pkgadd –d ./ sun-mysql50.pkg
3)vi /etc/my.cnf
[mysqld]
port=3306
socket=/tmp/mysql.sock
basedir=/opt/webstack/mysql
datadir=/disk2/zone1
4)chown –R mysql:mysql /opt/webstack/mysql
/opt/webstack/mysql/bin/mysql_install_db
chown –R mysql:mysql /disk2/zone1
/opt/webstack/mysql/bin/mysqld_safe &

檢查mysql是否正常啟動
ps –ef | grep mysql

克隆zone2,zone3,zone4,zone5
(1).停止作為克隆模版的zone(例如,zone1)
#zoneadm -z zone1 halt
(2).把zone1的配置導入文件中
mkdir /test
cd /test
mkfile -nv 100M file1
zonecfg -z zone1 export -f /test/file1
(3).編輯 /test/file1
#vi /test/file1
zonepath=/export/home/zones/zone2
set pool=pool2
add net
set address=10.0.0.2/24
set physical=e1000g0
end

根 據實際自己調整配置,(如果可以給每個網口(e1000g0,e1000g1,e1000g2,e1000g3)都提供一個IP的話,可以為不同的 zone綁定不 同的物理網口,給zone一個單獨的物理網口可以為zone提供較大的網絡帶寬,提高網絡的能力),只需要保證其關鍵信息(zonepath,IP, special=/disk1/cache/zone1-cache等)不與別的zone重複即可。

(4).用/test/files中的命令創建zone2
zonecfg -z zone2 -f /test/file1
(5).用zone1的配置安裝zone2
zoneadm -z zone2 clone zone1
(6).zoneadm -z zone2 boot
(7).登陸zone2
zlogin -C zone2

同理,克隆其它的zone

然後在各個zone中編輯 /etc/hosts文件,把各個zone的IP地址放入該文件
10.0.0.1 zone1
10.0.0.2 zone2
10.0.0.3 zone3
10.0.0.4 zone4
10.0.0.5 zone5
然後根據實際情況調整/etc/my.cnf的配置參數,例如,datadir=/disk2/zone1
檢查是否均能正常啟動MySQL

2. 建立MySQL cluster
zone1(10.0.0.1)是管理節點
zone2(10.0.0.2),zone5(10.0.0.5)是SQL節點
zone3(10.0.0.3),zone4(10.0.0.4)是數據存儲節點
1)安裝管理節點(zone1)
# vi /etc/config.ini
[NDBD DEFAULT]
NoOfReplicas=2
[TCP DEFAULT]
portnumber=3306
[NDB_MGMD]
hostname=zone1
datadir=/disk2/zone1
[NDBD]
hostname=zone3
datadir=/disk2/zone3
[NDBD]
hostname=zone4
datadir=/disk2/zone4
[MYSQLD]
hostname=zone2
[MYSQLD]
hostname=zone5
2)配置SQL節點(zone2,zone5)
# vi /etc/my.cnf
[mysqld]
user=mysql
port=3306
socket=/tmp/mysql.sock
basedir=/opt/webstack/mysql
datadir=/disk2/zone2
ndbcluster
ndb-connectstring=zone1
[MYSQL_CLUSTER]
ndb-connectstring=zone1
ndb-mgmd-host=zone1
注意:在zone5上需要修改datadir
3)配置存儲節點(NDB節點,zone3,zone4)
# vi /etc/my.cnf
[mysqld]
port=3306
socket=/tmp/mysql.sock
basedir=/opt/webstack/mysql
datadir=/disk2/zone3
Ndbcluster
ndb-connectstring=zone1
[MYSQL_CLUSTER]
ndb-connectstring=zone1
ndb-mgmd-host=zone1
注意:在zone4上需要修改datadir
4)啟動MySQL Cluster
較為合理的啟動順序是,首先啟動管理節點服務器,然後啟動存儲節點服務器,最後才啟動SQL節點服務器:

在管理節點服務器上,執行以下命令啟動MGM節點進程:
# /opt/webstack/mysql/bin/ndb_mgmd -f /etc/config.ini
必須用參數「-f」或「--config-file」告訴 ndb_mgm 配置文件所在位置,默認是在ndb_mgmd相同目錄下。

在每台存儲節點服務器上,如果是第一次啟動ndbd進程的話,必須先執行以下命令:
# /opt/webstack/mysql/bin/ndbd --initial
注意,僅應在首次啟動ndbd時,或在備份/恢復數據或配置文件發生變化後重啟ndbd時使用「--initial」參數。因為該參數會使節點刪除由早期ndbd實 例創建的、用於恢復的任何文件,包括用於恢復的日誌文件。
如果不是第一次啟動,直接運行如下命令即可:
# /opt/webstack/mysql/bin/ndbd

最後,運行以下命令啟動SQL節點服務器:
#/opt/webstack/mysql/bin/mysqld_safe &

如果一切順利,也就是啟動過程中沒有任何錯誤信息出現,那麼就在管理節點服務器上運行如下命令:
# /opt/webstack/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 @10.0.0.3 (Version: 5.0.67, Nodegroup: 0, Master)
id=3 @10.0.0.4 (Version: 5.0.67, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.1 (Version: 5.0.67)

[mysqld(API)] 2 node(s)
id=4 @10.0.0.2 (Version: 5.0.67)
id=5 @10.0.0.5 (Version: 5.0.67)
具體的輸出內容可能會略有不同,這取決於你所使用的MySQL版本。
5)創建數據庫表
與沒有使用 Cluster的MySQL相比,在MySQL Cluster內操作數據的方式沒有太大的區別。執行這類操作時應記住兩點:
(1) 表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創建,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內複製它們。如果使用mysqldump的輸出從已有數據庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何表創建語句,或 用這類選項之一 替換任何已有的ENGINE(或TYPE)選項。
(2)另外還請記住,每個NDB表必須有一個主鍵。如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(註釋:該隱含鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的內存來容納這些自動創建的鍵,出現問題並不罕見 )。

下面是一個例子:
在zone2上,創建數據表,插入數據:
# mysql
mysql> create database testdb;
mysql> use testdb;
mysql> create table city(
mysql> id mediumint unsigned not null auto_increment primary key,
mysql> name varchar(20) not null default ''
mysql> ) engine = ndbcluster default charset utf8;
mysql> insert into city values(1, 'city1');
mysql> insert into city values(2, 'city2');

在zone5上,查詢數據:
# mysql
mysql> create database testdb;
mysql> select * from city;
+-----------+
|id | name |
+-----------+
|1 | city1 |
+-----------+
|2 | city2 |
+-----------+

檢查mysql cluster
停掉數據存儲節點zone3,在管理節點上可以看到zone4接替服務
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from zone3)
id=3 @10.0.0.4 (Version: 5.0.67, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.1 (Version: 5.0.67)

[mysqld(API)] 2 node(s)
id=4 @10.0.0.2 (Version: 5.0.67)
id=5 @10.0.0.5 (Version: 5.0.67)

這時我再停掉zone5,可以看到zone2還在服務
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from zone3)
id=3 @10.0.0.4 (Version: 5.0.67, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.1 (Version: 5.0.67)

[mysqld(API)] 2 node(s)
id=4 @10.0.0.2 (Version: 5.0.67)
id=5 (not connected, accepting connect from zone5)

因此,配置正確

6)安全關閉
要想關閉 Cluster,可在MGM節點所在的機器上,輸入下述命令:
# /opt/webstack/mysql/bin/ndb_mgm -e shutdown
在SQL節點上運行以下命令關閉SQL節點的mysqld服務:
#/opt/webstack/mysql/bin/mysqladmin –u root shutdown

沒有留言:

張貼留言