[MySQL] 部署MySQL在Solaris的zone上

以前是把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)
  1. 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)
  2. 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)
  3. 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節點進程:
  1. /opt/webstack/mysql/bin/ndb_mgmd -f /etc/config.ini
    必須用參數「f」或「-config-file」告訴 ndb_mgm 配置文件所在位置,默認是在ndb_mgmd相同目錄下。
在每台存儲節點服務器上,如果是第一次啟動ndbd進程的話,必須先執行以下命令:
  1. /opt/webstack/mysql/bin/ndbd --initial
    注意,僅應在首次啟動ndbd時,或在備份/恢復數據或配置文件發生變化後重啟ndbd時使用「--initial」參數。因為該參數會使節點刪除由早期ndbd實 例創建的、用於恢復的任何文件,包括用於恢復的日誌文件。
    如果不是第一次啟動,直接運行如下命令即可:
  2. /opt/webstack/mysql/bin/ndbd
最後,運行以下命令啟動SQL節點服務器:
#/opt/webstack/mysql/bin/mysqld_safe &
如果一切順利,也就是啟動過程中沒有任何錯誤信息出現,那麼就在管理節點服務器上運行如下命令:
  1. /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上,創建數據表,插入數據:
  1. 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上,查詢數據:
  1. mysql
    mysql> create database testdb;
    mysql> select * from city;
    -----------
    idname
    -----------
    1city1
    -----------
    2city2
    -----------
檢查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節點所在的機器上,輸入下述命令:
  1. /opt/webstack/mysql/bin/ndb_mgm -e shutdown
    在SQL節點上運行以下命令關閉SQL節點的mysqld服務:
    #/opt/webstack/mysql/bin/mysqladmin -u root shutdown