Oracle MySQL Cluster :- The shared-nothing architecture (Manual Installation)

  1. สิ่งที่ต้องเตรียม ได้แก่ 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)

  2. 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
  3. เริ่มที่ Management Node
    1. ssh 192.168.106.40 -l sudo_user (user ที่เรียกใช้คำสั่ง sudo ได้)
    2. คลายแฟ้ม V840854-01.zip ด้วยคำสั่ง
      unzip V840854-01.zip (อาจต้องติดตั้งเพิ่มเติมด้วยคำสั่ง sudo apt install unzip)
    3. จะได้แฟ้ม  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
    4. เปลี่่ยนชื่อ 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
    5. คัดลอกแฟ้ม mysql/bin/ndb_mgmd และ mysql/bin/ndb_mgm ไปไว้ที่ /usr/local/bin
      cp mysql/bin/ndb_mgm* /usr/local/bin/
    6. สร้างโฟลเดอร์ /var/lib/mysql-cluster และสร้างแฟ้ม /var/lib/mysql-cluster/config.ini
      sudo mkdir -p /var/lib/mysql-cluster/
    7. เพื่อเป็นการบอก Management node ว่า Data Node และ SQL Node มีใครบ้าง ให้สร้าง config.ini ไว้ที่ /var/lib/mysql-cluster ด้วยคำสั่ง
      cat<< EOF | sudo tee /var/lib/mysql-cluster/config.ini
      เพิ่มข้อความต่อไปนี้ลงไป
      [ndbd default]
      NoOfReplicas=2
      DataMemory=80M
      IndexMemory=18M
      [mysqld default]
      [ndb_mgmd default]
      [tcp default]
      # Cluster Control / Management node
      [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

    8. เพิ่มข้อความต่อไปนี้ในแฟ้ม /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
    9. สั่งคำสั่ง
      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 ทำงานแล้ว
    10. สามารถตรวจสอบด้วยคำสั่งอื่นๆ
      netstat -plntu
      ได้ผลดังภาพ สังเกตุบรรทัดที่เขียนว่า tcp 0 0 0.0.0.0:1186 แปลว่า management node ทำงานแล้ว
    11. สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มีเพียงเครื่องเดียว
    12. ส่งแฟ้ม 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
  4. ติดตั้ง SQL Node
    1. ssh 192.168.106.42 -l sudo_user (User ที่สามารถเรียกใช้คำสั่ง sudo ได้)
    2. ติดตั้ง Package ที่จำเป็น
      sudo apt install libaio1
    3. สร้าง user  และ group
      sudo groupadd mysql
      sudo useradd -g mysql mysql
    4. คลายแฟ้ม 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
    5. เปลี่่ยนชื่อ 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
    6. ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
      sudo mv mysql /usr/local
    7. สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
      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
    8. สร้างแฟ้ม /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
    9. สั่งคำสั่งต่อไปนี้เพื่อเตรียมฐานข้อมูล ในขั้นตอนนี้จะมีการสร้าง passwd ของ root ให้ด้วยโดยอัตโนมัติ  *จดไว้ด้วย*
      sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
    10. เพื่อให้ตัวควบคุมฐานข้อมูลทำงานอัตโนมัติสั่งคำสั่งต่อไปนี้
      sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
      sudo systemctl enable mysqld.service
      sudo systemctl start mysqld
    11. สามารถทำซ้ำได้อีกเครื่อง (ไม่จำกัด) แต่ในตัวอย่างนี้มี SQL Node เพียงเครื่องเดียว
    12. ส่งแฟ้ม 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
  5. ติดตั้ง Data Node
    1. ssh sudo_user@192.168.106.32  (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
    2. สร้างแฟ้ม /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
    3. ติดตั้ง Package ที่จำเป็น
      sudo apt install libaio1
    4. สร้าง user  และ group
      sudo groupadd mysql
      sudo useradd -g mysql mysql
    5. คลายแฟ้ม 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
    6. เปลี่่ยนชื่อ 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
    7. ย้าย mysql ไปที่ /usr/local/ ด้วยคำสั่ง
      sudo mv mysql /usr/local
    8. สร้างโฟลเดอร์และสั่งคำสั่งต่อไปนี้
      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
    9. สั่ง start service ด้วยคำสั่ง
      sudo  /usr/local/mysql/bin/ndbd
    10. เพิ่มข้อความต่อไปนี้ในแฟ้ม /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
    11. ทำซ้ำสำหรับ Data Node2 (ไม่จำกัด)
  6. ทดสอบ Cluster
    1. พิมพ์คำสั่ง
      sudo /usr/local/mysql/bin/ndb_mgm
      เมื่อได้ prompt พิมพ์คำว่า show ได้ผลดังภาพ
    2. แปลว่าทำงานถูกต้องแล้ว..
  7. เชื่อมต่อกับ SQL Node เพื่อเปลี่ยนรหัสผ่าน root
    1. ssh sudo_user@192.168.106.42  (sudo_user คือ user ที่เรียกใช้คำสั่ง sudo ได้)
    2. พิมพ์คำสั่งต่อไปนี้เพื่อสร้าง link ไปยัง mysql client
      sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
    3. เรียกใช้งาน mysql
      mysql -u root -p
      ใส่ passwd ที่จดไว้ในข้อ 4 ข้อย่อย 9 แล้วเปลี่ยนใหม่ด้วยคำสั่ง
      ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘newPassw0rd’
  8. ทุกครั้งที่จะทำอะไรผ่าน mysql client ต้องติดต่อกับ SQL Node เท่านั้นซึ่งตามตัวอย่างนี้มีเพียงเครื่องเดียวจึงไม่มีการทำ replicate data ใดๆ ทั้งสิ้นจำเป็นต้องเพิ่ม SQL Node เข้าไปอีก
  9. จบ.. ขอให้สนุกครับ

อ้างอิง

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