- สิ่งที่ต้องเตรียม ได้แก่ Ubuntu Server 16.04 (รุ่น x86_64 architecture) จำนวนอย่างน้อย 4 เครื่อง (แต่ควรอย่างน้อย 6 เครื่อง), IP Address 4 IP, Software MySQL Cluster โหลดที่ https://edelivery.oracle.com/ (ต้องสมัครสมาชิกให้เรียบร้อยก่อน) ใช้คำค้นว่า MySQL Cluster (จะมีรุ่น 7.5.5 ให้โหลด) โดยไฟล์ที่ใช้งานชื่อว่า V840854-01.zip MySQL Cluster 7.5.5 TAR for Generic Linux (glibc2.5) x86 (64bit)
- 4 เครื่องประกอบด้วยอะไรบ้าง
2 x data nodes เปลี่ยน IP ให้ตรงกับที่ใช้งาน
192.168.106.32 Data-node1
192.168.106.33 Data-node2
1 x SQL/NoSQL Application Node
192.168.106.42 SQL-Node
1 x Management Node
192.168.106.40 Management-node - เริ่มที่ Management Node
- ssh 192.168.106.40 -l sudo_user (user ที่เรียกใช้คำสั่ง sudo ได้)
- คลายแฟ้ม V840854-01.zip ด้วยคำสั่ง
unzip V840854-01.zip
(อาจต้องติดตั้งเพิ่มเติมด้วยคำสั่งsudo apt install unzip
) - จะได้แฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
tar zxvf mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
- เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
- คัดลอกแฟ้ม mysql/bin/ndb_mgmd และ mysql/bin/ndb_mgm ไปไว้ที่ /usr/local/bin
cp mysql/bin/ndb_mgm* /usr/local/bin/
- สร้างโฟลเดอร์ /var/lib/mysql-cluster และสร้างแฟ้ม /var/lib/mysql-cluster/config.ini
sudo mkdir -p /var/lib/mysql-cluster/ - เพื่อเป็นการบอก Management node ว่า Data Node และ SQL Node มีใครบ้าง ให้สร้าง config.ini ไว้ที่ /var/lib/mysql-cluster ด้วยคำสั่ง
cat<< EOF | sudo tee /var/lib/mysql-cluster/config.ini
เพิ่มข้อความต่อไปนี้ลงไป
# Cluster Control / Management node[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[mysqld default]
[ndb_mgmd default]
[tcp default]
[ndb_mgmd]
hostname=192.168.106.40# Data Node 1
[ndbd]
hostname=192.168.106.32
DataDir= /var/lib/mysql-cluster# Data Node 2
[ndbd]
HostName=192.168.106.33
DataDir=/var/lib/mysql-cluster# SQL Node
[mysqld]
hostname=192.168.106.42# If you to add new SQL Node
[mysqld]EOF
- เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
/var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0 ตัวอย่าง /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
exit 0
- สั่งคำสั่ง
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
ต้องเห็นข้อความว่า MySQL Cluster Management Server mysql-5.7.17 ndb-7.5.5 แปลว่า management node ทำงานแล้ว
- สามารถตรวจสอบด้วยคำสั่งอื่นๆ
netstat -plntu
ได้ผลดังภาพ สังเกตุบรรทัดที่เขียนว่า tcp 0 0 0.0.0.0:1186 แปลว่า management node ทำงานแล้ว
- สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มีเพียงเครื่องเดียว
- ส่งแฟ้ม
mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
ให้ SQL node
cd
scp mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz sudo_user@192.168.106.42
- ติดตั้ง SQL Node
- ssh
192.168.106.42
-l sudo_user (User ที่สามารถเรียกใช้คำสั่ง sudo ได้) - ติดตั้ง Package ที่จำเป็น
sudo apt install libaio1
- สร้าง user และ group
sudo groupadd mysql
sudo useradd -g mysql mysql
คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
tar zxvf mysql-cluster-advanced-7.5.5-เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
/var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0 ตัวอย่าง /etc/rc.locallinux-glibc2.5-x86_64.tar.gz- เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
- ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
sudo mv mysql /usr/local
- สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
sudo mkdir /usr/local/mysql/data
sudo mkdir /var/lib/mysql-files
sudo chown mysql:mysql /var/lib/mysql-files
sudo chown mysql:mysql /usr/local/mysql/data
- สร้างแฟ้ม /etc/my.cnf ด้วยคำสั่ง
cat << EOF | sudo tee /etc/my.cnf
เพิ่มข้อความต่อไปนี้ลงไป
# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.106.40
[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.106.40
# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EOF
- สั่งคำสั่งต่อไปนี้เพื่อเตรียมฐานข้อมูล ในขั้นตอนนี้จะมีการสร้าง passwd ของ root ให้ด้วยโดยอัตโนมัติ *จดไว้ด้วย*
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
- เพื่อให้ตัวควบคุมฐานข้อมูลทำงานอัตโนมัติสั่งคำสั่งต่อไปนี้
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo systemctl enable mysqld.service
sudo systemctl start mysqld
- สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มี SQL Node เพียงเครื่องเดียว
- ส่งแฟ้ม
mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
ให้ SQL node
cd
scp mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz sudo_user@192.168.106.32
- ssh
- ติดตั้ง Data Node
- ssh sudo_user@192.168.106.32 (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
- สร้างแฟ้ม /etc/my.cnf ด้วยคำสั่ง
cat << EOF | sudo tee /etc/my.cnf
เพิ่มข้อความต่อไปนี้เข้าไป
# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.106.40
[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.106.40
# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EOF
- ติดตั้ง Package ที่จำเป็น
sudo apt install libaio1
- สร้าง user และ group
sudo groupadd mysql
sudo useradd -g mysql mysql
- คลายแฟ้ม mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz ด้วยคำสั่ง
tar zxvf mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64.tar.gz
- เปลี่่ยนชื่อ mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 เป็น mysql
mv mysql-cluster-advanced-7.5.5-linux-glibc2.5-x86_64 mysql
- ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
sudo mv mysql /usr/local
- สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
sudo mkdir /usr/local/mysql/data
sudo mkdir /var/lib/mysql-files
sudo mkdir /var/lib/mysql-cluster
sudo chown mysql:mysql /var/lib/mysql-files
sudo chown mysql:mysql /usr/local/mysql/data - สั่ง start service ด้วยคำสั่ง
sudo /usr/local/mysql/bin/ndbd - เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/rc.local
/usr/local/mysql/bin/ndbd โดยเพิ่มให้อยู่บรรทัดก่อนคำว่า exit 0
ตัวอย่าง /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/usr/local/mysql/bin/ndbd
exit 0
- ทำซ้ำสำหรับ Data Node2 (ไม่จำกัด)
- ทดสอบ Cluster
- พิมพ์คำสั่ง
sudo /usr/local/mysql/bin/ndb_mgm
เมื่อได้ prompt พิมพ์คำว่า show ได้ผลดังภาพ
- แปลว่าทำงานถูกต้องแล้ว..
- พิมพ์คำสั่ง
- เชื่อมต่อกับ SQL Node เพื่อเปลี่ยนรหัสผ่าน root
- ssh sudo_user@192.168.106.42 (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
- พิมพ์คำสั่งต่อไปนี้เพื่อสร้าง link ไปยัง mysql client
sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
- เรียกใช้งาน mysql
mysql -u root -p
ใส่ passwd ที่จดไว้ในข้อ 4 ข้อย่อย 9 แล้วเปลี่ยนใหม่ด้วยคำสั่ง
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘newPassw0rd’
- ทุกครั้งที่จะทำอะไรผ่าน mysql client ต้องติดต่อกับ SQL Node เท่านั้นซึ่งตามตัวอย่างนี้มีเพียงเครื่องเดียวจึงไม่มีการทำ replicate data ใดๆ ทั้งสิ้นจำเป็นต้องเพิ่ม SQL Node เข้าไปอีก
- จบ.. ขอให้สนุกครับ
อ้างอิง
https://www.howtoforge.com/tutorial/how-to-install-a-mysql-cluster-on-ubuntu-16-04/
https://medium.com/@ophasnoname_44358/mysql-cluster-7-5-5-on-ubuntu-16-04-step-by-step-9132cf76d5b8