MySQL-Cluster 搭建

節點 IP
* 數據節點:10.0.8.54, 10.0.8.81
* SQL Node:10.0.3.242
* 管理節點:10.0.0.229

SQL nodes

實際跑 mysqld 的機器

將安裝包部署到機器上

# 將安裝包拷貝到遠程機器上
scp /home/yuzx/data/download/mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz yuzx@10.0.3.242:/home/yuzx/data/download/
scp /home/yuzx/data/download/mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz yuzx@10.0.8.81:/home/yuzx/data/download/
scp /home/yuzx/data/download/mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz yuzx@10.0.8.54:/home/yuzx/data/download/
# 解壓到 /usr/local
sudo tar -xf /home/yuzx/data/download/mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz -C /usr/local 
# 創建軟鏈接
sudo ln -sf -T /usr/local/mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64 /usr/local/mysql

創建用戶

# 創建 mysql 用戶組和用戶 
groupadd mysql
useradd -g mysql -s /bin/false mysql

my.cnf 是關鍵,解決問題的根本之道,因爲本機已經安裝過 mysql 的單機版,所以這裏定義了端口爲 3308,實際部署改爲 3306 即可

# 不要加 ndb 存儲引擎配置,因爲集羣還沒有準備好
sudo vim /usr/local/mysql/my.cnf

# Options for mysqld process
[mysqld]
basedir = "/usr/local/mysql"
datadir = "/usr/local/mysql/data"
socket = /tmp/mysql.sock
user = mysql
port = 3308
lower_case_table_names = 1
symbolic-links = 0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 創建系統數據庫,所以結構是存儲在 SQL Node 上,數據是存儲在數據節點
cd /usr/local/mysql
sudo scripts/mysql_install_db --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data \
  --defaults-file=/usr/local/mysql/my.cnf

# 更改 MySQL Server 目錄和 data 目錄的權限
cd /usr/local/mysql
sudo chown -R root .
sudo chown -R mysql data
sudo chgrp -R mysql .

自啓動支持,可不做

# 增加開啓自啓動支持,因爲不同的 OS 甚至不同版本都可能不同,可先不做
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

Data nodes

  • 不需要跑 mysqld
  • 需要 MySQL Cluster data node executable
    • ndbd 單線程版
    • ndbmtd 多線程版
cd /home/yuzx/data/download
tar -xf mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz
cd mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64
sudo cp bin/ndbd /usr/local/bin/ndbd
sudo cp bin/ndbmtd /usr/local/bin/ndbmtd
# 賦予二者可執行權限
sudo chmod +x /usr/local/bin/ndb*
ls -lh /usr/local/bin/ndb*

Management nodes

  • 不需要跑 mysqld
  • 需要 MySQL Cluster management server(ndb_mgmd)
  • 需要 MySQL Cluster management client(ndb_mgm)
cd /home/yuzx/data/download
tar -xf mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64.tar.gz
cd mysql-cluster-gpl-7.4.8-linux-glibc2.5-x86_64
sudo cp bin/ndb_mgm* /usr/local/bin/
# 賦予二者可執行權限
sudo chmod +x /usr/local/bin/ndb_mgm*
ls -lh /usr/local/bin/ndb_mgm*

初始化配置

數據節點/SQL 節點需要 my.cnf
* connection string, 如何找到管理節點
* 開啓 NDBCLUSTER 存儲引擎

管理節點需要 config.ini
* 維護的副本數
* 數據節點的內存分配(針對數據和索引)
* 怎麼找到數據節點,數據節點數據存在哪
* 怎麼找到 SQL 節點

SQL nodes
主要是在上面的基礎上增加配置

一旦在 my.cnf 中增加 [mysqld] ndbcluster [mysql_cluster] ndb-connectstring 配置,沒有實際啓動 cluster 而直接啓動 mysqld,不能執行 create table 和 alter table

sudo vim /usr/local/mysql/my.cnf

# Options for mysqld process
[mysqld]
basedir = "/usr/local/mysql"
datadir = "/usr/local/mysql/data"
socket = /tmp/mysql.sock
user = mysql
port = 3308
lower_case_table_names = 1
symbolic-links = 0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# run NDB storage engine
ndbcluster
ndb-connectstring=yuzx-pc
# Options for MySQL Cluster processes
[MYSQL_CLUSTER]
# location of management server
ndb-connectstring=10.0.0.229

Data nodes
因爲本機存在 /usr/local/mysql/my.cnf,所以換個位置

mkdir /home/yuzx/data/mysql-cluster
sudo vim /home/yuzx/data/mysql-cluster/my.cnf

[mysqld]
# Options for mysqld process:
ndbcluster                      # run NDB storage engine

[mysql_cluster]
# Options for MySQL Cluster processes:
ndb-connectstring=10.0.0.229  # location of management server
mkdir /home/yuzx/data/mysql-cluster
vim /home/yuzx/data/mysql-cluster/config.ini

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2  # Number of replicas
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.
# Transaction Parameters
MaxNoOfConcurrentTransactions: 4096
MaxNoOfConcurrentOperations: 100000
MaxNoOfLocalOperations: 100000

[tcp default]
# TCP/IP options:
portnumber=2202  # This the default; however, you can use any
# port that is free for all the hosts in the cluster
# Note: It is recommended that you do not specify the port
# number at all and simply allow the default value to be used
# instead

[ndb_mgmd]
# Management process options:
hostname=10.0.0.229  # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster  # Directory for MGM node log files
configdir=/home/yuzx/data/mysql-cluster

[ndbd]
# Options for data node "A":
# (one [ndbd] section per data node)
hostname=10.0.8.54  # Hostname or IP address
datadir=/home/yuzx/data/mysql-cluster  # Directory for this data node's data files
FileSystemPath=/home/yuzx/data/mysql-cluster

[ndbd]
# Options for data node "B":
hostname=10.0.8.81  # Hostname or IP address
datadir=/home/yuzx/data/mysql-cluster  # Directory for this data node's data files
FileSystemPath=/home/yuzx/data/mysql-cluster

[mysqld]
# SQL node options:
hostname=10.0.3.242  # Hostname or IP address
# (additional mysqld connections can be specified for this node for various
# purposes such as running ndb_restore)

Initial Startup of MySQL Cluster

# 1. management node
ndb_mgmd -f /home/yuzx/data/mysql-cluster/config.ini --configdir=/home/yuzx/data/mysql-cluster
# 查看文檔,有個 restart type,如果爲 N,則說明只需要重新 reload 即可生效
ndb_mgmd --reload -f /home/yuzx/data/mysql-cluster/config.ini --configdir=/home/yuzx/data/mysql-cluster


# 2. data node
# sudo mkdir -p /usr/local/mysql/data
sudo ndbd --defaults-file=/home/yuzx/data/mysql-cluster/my.cnf
sudo ndbd --defaults-file=/home/yuzx/data/mysql-cluster/my.cnf

# 3. sql node
cd /usr/local/mysql
sudo bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf --user=mysql

# 3. management node
ndb_mgm
>> show

SQL node

# 設置 root 密碼
bin/mysqladmin -h 127.0.0.1 -P 3308 -u root password mysql1
./bin/mysql -h 127.0.0.1 -P 3308 -u root -pmysql1 mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mysql1' WITH GRANT OPTION;
FLUSH PRIVILEGES;
select host, user from user;

關閉集羣

# 管理節點
ndb_mgm -e shutdown

# SQL node
mysqladmin -uroot shutdown

存儲引擎測試

DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=NDBCLUSTER DEFAULT CHARSET=latin1;

INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);


select * from city t;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章