純軟件方式搭建mysql集羣

 

Mysql集羣
一、       MySQL Cluster概述:
     MySQL Cluster 是一種技術,該技術允許在無共享的系統中部署“內存中”數據庫的 Cluster 。通過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由於每個組件有自己的內存和磁盤,不存在單點故障。
     MySQL Cluster 由一組計算機構成,每臺計算機上均運行着多種進程,包括MySQL服務器,NDB Cluster 的數據節點,管理服務器,以及(可能)專門的數據訪問程序。
二、       Mysql集羣架構:

所有的這些節點構成一個完成的MySQL集羣體系。數據保存在“NDB存儲服務器”的存儲引擎中,表(結構)則保存在“MySQL服務器”中。應用程序通過“MySQL服務器”訪問這些數據表,集羣管理服務器通過管理工具(ndb_mgmd)來管理“NDB存儲服務器”。
三、       MySQL Cluster 基本概念
        “NDB” 是一種“內存中”的存儲引擎,它具有可用性高和數據一致性好的特點。
         MySQL Cluster 能夠使用多種故障切換和負載平衡選項配置NDB存儲引擎,但在 Cluster 級別上的存儲引擎上做這個最簡單。MySQL Cluster的NDB存儲引擎包含完整的數據集,僅取決於 Cluster本身內的其他數據。
        目前,MySQL Cluster的 Cluster部分可獨立於MySQL服務器進行配置。在MySQL Cluster中, Cluster的每個部分被視爲1個節點。
·         管理(MGM)節點:這類節點的作用是管理MySQL Cluster內的其他節點,如提供配置數據、啓動並停止節點、運行備份等。由於這類節點負責管理其他節點的配置,應在啓動其他節點之前首先啓動這類節點。管理節點節點是用命令“ndb_mgmd”啓動的。
·         數據節點:這類節點用於保存 Cluster的數據。數據節點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本有兩個片段,那麼就有4個數據節點。不過沒有必要設置多個副本。NDBD是用命令“ndbd”啓動的。
·         SQL節點:這是用來訪問 Cluster數據的節點。對於MySQL Cluster,客戶端節點是使用NDB Cluster存儲引擎的傳統MySQL服務器。通常,SQL節點是使用命令“mysqld –ndbcluster”啓動的,或將“ndbcluster”添加到“my.cnf”後使用“mysqld”啓動。
        管理服務器(MGM節點)負責管理 Cluster配置文件和 Cluster日誌。 Cluster中的每個節點從管理服務器檢索配置數據,並請求確定管理服務器所在位置的方式。當數據節點內出現新的事件時,節點將關於這類事件的信息傳輸 到管理服務器,然後,將這類信息寫入 Cluster日誌。
四、       開始準備mysql-cluster:
1.準備服務器:
現在,我計劃建立有5個節點的MySQL CLuster體系,因此需要用到5臺機器,分別做如下用途:

節點(用途)
Ip地址(主機名)
管理節點(MGM)
192.168.169.66(mgm)
數據節點1(NDBD1)
192.168.80.111(ndb1)
數據節點2(NDBD2)
192.168.80.112(ndb2)
SQL節點1(SQL1)
192.168.80.113(sql1)
SQL節點2(SQL2)
192.168.80.114(sql2)
2.注意事項:
       每個節點的操作系統都是CentOS5.5,下面的描述中將使用主機名錶示。由於MySQL Cluster採用TCP/IP方式連接,並且節點之間的數據傳輸沒有加密,因此這個體系用於公網的時候需要考慮數據的加密這一塊,以及傳輸速率這一塊。
3.使用mysql數據包:
   mysql-cluster-gpl-7.1.15a-linux-i686-glibc23.tar
五、       Mysql-cluster的安裝:
1、把軟件mysql-cluster-gpl-7.1.15a-linux-i686-glibc23.tar分別上傳到以上5個服務器的上,我是上傳到mnt目錄;
2、在服務上都創建mysql組與用戶:
groupadd mysql;
Useradd mysql -g mysq;
3、分別在以上5臺機器解壓軟件(軟件都統一放到/usr/local下):
這裏有兩種:NDBD與SQL、MGM
NDBD與SQL:
cd /mnt;
tar xzvf mysql-cluster-gpl-7.1.15a-linux-i686-glibc23.tar;
mv -f mysql-cluster-gpl-7.1.15a-linux-i686-glibc23 /usr/local/
cd /usr/local
ln -s mysql-cluster-gpl-7.1.15a-linux-i686-glibc23  mysql
MGM(只需要把ndb*相關的命令放到/usr/local/bin下即可):
cd /mnt;
tar xzvf mysql-cluster-gpl-7.1.15a-linux-i686-glibc23.tar.gz;
cd mysql-cluster-gpl-7.1.15a-linux-i686-glibc23/bin
cp -rf ./ndb* /usr/local/bin
4、創建數據,日誌存放目錄:
這裏分三種:在MGM、NDBD、SQL上;
MGM:
mkdir /var/lib/mysql/logs #日誌目錄
mkdir /var/lib/mysql/cluster #集羣管理配置文件目錄
NDBD:
mkdir -p /var/lib/mysql
mkdir -p /var/lib/mysql/data #存放數據
mkdir -p /var/lib/mysql/ndbdata #集羣數據目錄
mkdir -p /var/lib/mysql/logs #日誌目錄
chown -R mysql.mysql /var/lib/mysq #轉換爲mysql用戶與組
MGM:與NDBD相同
1)、MGM:(192.168.169.66)
1.1)、在/var/lib/mysql/cluster創建config.ini集羣管理文件:
在文件中添加內容如下:
# Options affecting ndbd processes on all data nodes:
[ndbd default]
NoOfReplicas=2     #每份數據存放2份
DataMemory=80M    # How much memory to allocate for data storage
IndexMemory=18M   # How much memory to allocate for index storage
                     # For DataMemory and IndexMemory, we have used the
                     # default values. Since the "world" database takes up
                     # only about 500KB, this should be more than enough for
                     # this example Cluster setup.
# Management process options:
[NDB_MGMD DEFAULT]
PortNumber=1186
Datadir=/var/lib/mysql/ndbdata
ArbitrationRank=1
[TCP DEFAULT]     
portnumber=2202 
#MGM
[ndb_mgmd]
id=1
Hostname=192.168.169.66           # Hostname or IP address of management node
Datadir=/var/lib/mysql/logs #Directory for management node log files
# NDBD1,這裏的Datadir必須在IP111中存在
[ndbd]
id=2
Hostname=192.168.80.111           # Hostname or IP address
Datadir=/var/lib/mysql/ndbdata # Directory for this data node's data files
# NDBD2,這裏的Datadir必須在IP112中存在
[ndbd]
id=3
Hostname=192.168.80.112
Datadir=/var/lib/mysql/ndbdata
# sql1服務接點
[mysqld]
id=4
Hostname=192.168.80.113         # Hostname or IP address
# sql2服務接點
[mysqld]
id=5
Hostname=192.168.80.114
1.2)、在etc/下創建mysql配置文件my.cnf
添加內容如下:
[mysqld]
ndbcluster
ndb-connectstring=192.168.169.66
[mysql_cluster]
ndb-connectstring=nodeid=1,192.168.169.66
注:這裏的nodeid=1是在config.ini中管理端的id
2)、NDBD:(192.168.80.111-112)
以下是在111上安裝,112基本一樣,只是在my.cnf中nodeid應改3
2.1)、在/etc/下添加my.cnf配置文件,內容如下:
[client]
#password       = your_password
port            = 3306
socket          = /var/lib/mysql/mysql.sock
[mysqld]
port            = 3306
pid-file        = /var/lib/mysql/mysqld.pid
socket          = /var/lib/mysql/mysql.sock
log             = /var/lib/mysql/log/query.log
log_slow_queries= /var/lib/mysql/log/slow_query.log
datadir         = /var/lib/mysql/data
max_connections = 2000
skip-locking
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
#這個記服務啓動時,直接把cluster啓動
ndbcluster
ndb-connectstring=192.168.169.66
#支持ndb
[mysql_cluster]
ndb-connectstring=nodeid=2,192.168.169.66
注:上面的nodeid=2是在config.ini中定義,每個節點不一樣,my.cnf內容可以根據需要修改與添加其它項;
2.2)、安裝SQL文件
            cd /usr/local/mysql
 scripts/mysql_install_db --user=mysql #安裝
2.3)、設置自動啓動和環境變量
#加到系統服務裏
cp support-files/mysql.server /etc/rc.d/init.d/
chkconfig --add mysql.server
cd
vi .bash_profile
修改PATH爲如下
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
3)、SQL管理節點(192.168.80.113-114)
以下是在113上安裝,114基本一樣,只是在my.cnf中nodeid應改5
3.1)、在/etc/下添加my.cnf配置文件
內容與數據節點的my.cnf一樣的,只是nodeid改爲4即可
3.2)、安裝SQL文件
步驟與數據節點的一樣
3.3)、設置自動啓動和環境變量
步驟與數據節點的一樣
六、          啓動Mysql-cluster
        較爲合理的啓動順序是,首先啓動管理節點服務器,然後啓動存儲節點服務器,最後才啓動SQL節點服務器:
1.在管理節點服務器上,執行以下命令啓動MGM節點進程:
# /usr/local/mysql/ndb_mgmd -f /var/lib/mysql/config.ini
必須用參數“-f”或“--config-file”告訴 ndb_mgm 配置文件所在位置,默認是在ndb_mgmd相同目錄下。
2.在每臺存儲節點服務器上,如果是第一次啓動ndbd進程的話,必須先執行以下命令:
# /usr/local/mysql/bin/ndbd --initial
注意,僅應在首次啓動ndbd時,或在備份/恢復數據或配置文件發生變化後重啓ndbd時使用“--initial”參數。因爲該參數會使節點刪除由早期ndbd實例創建的、用於恢復的任何文件,包括用於恢復的日誌文件。
    如果不是第一次啓動,直接運行如下命令即可:
# /usr/local/mysql/bin/ndbd
3.最後,運行以下命令啓動SQL節點服務器:
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &
          注:這裏如果啓動不了mysql可以查看/var/lib/mysql是否有mysql用戶的執行權限。
        如果一切順利,也就是啓動過程中沒有任何錯誤信息出現,那麼就在管理節點服務器上運行如下命令:
         [root@mgm ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.169.66:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.80.111 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0, Master)
id=3    @192.168.80.112 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0)
 
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.169.66 (mysql-5.1.56 ndb-7.1.15)
 
[mysqld(API)]   2 node(s)
id=4    @192.168.80.113 (mysql-5.1.56 ndb-7.1.15)
id=5    @192.168.80.114 (mysql-5.1.56 ndb-7.1.15)
 
ndb_mgm>
具體的輸出內容可能會略有不同,這取決於你所使用的MySQL版本。現在應能在MySQL Cluster中處理數據庫,表和數據。
七、       創建數據庫表
        與沒有使用 Cluster的MySQL相比,在MySQL Cluster內操作數據的方式沒有太大的區別。執行這類操作時應記住兩點:
·         表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創建,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內複製它們。如果使用mysqldump的輸出從已有數據庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何表創建語句,或 用這類選項之一替換任何已有的ENGINE(或TYPE)選項。
·         另外還請記住,每個NDB表必須有一個主鍵。如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(註釋:該隱含 鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的內存來容納這些自動創建的鍵,出現問題並不罕見)。
下面是一個例子:
在sql1上創建數據表,插入數據:
[root@sql1 mnt]# mysql -u root hao
mysql> create table city(
    -> id mediumint unsigned not null auto_increment primary key,
    -> name varchar(20) not null default ''
    -> ) engine = ndbcluster default charset utf8;
Query OK, 0 rows affected (0.68 sec)
 
mysql> insert into city values(1,'chao1');
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into city values(2,'chao2');
Query OK, 1 row affected (0.00 sec)
 
mysql>
         在sql2上查詢數據:
             [root@sql2 ~]# mysql -u root
mysql> use hao;
Database changed
mysql> select * from city;
+----+-------+
| id | name |
+----+-------+
| 1 | chao1 |
| 2 | chao2 |
+----+-------+
2 rows in set (0.00 sec)
 
mysql>
八、       安全關閉
    要想關閉 Cluster,可在MGM節點所在的機器上,在Shell中簡單地輸入下述命令:
[root@mgm ~]# ndb_mgm -e shutdown
運行以下命令關閉SQL節點的mysqld服務:
[root@sql1 ~]# mysqladmin –u root shutdown
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章