MariaDB Galera Cluster 10.1 บน CentOS 7

MariaDB Galera Cluster เวอร์ชัน 10.1 จะมีความแตกต่างกับ MariaDB Galera Cluster เวอร์ชัน 5.5 พอสมควร ทั้งในส่วนของไฟล์คอนฟิก และคำสั่งที่ใช้ในการสตาร์ท Cluster มีอะไรเปลี่ยนแปลงบ้างมาดูกันครับ

ตัวอย่างที่จะนำเสนอ จะมีคอมพิวเตอร์ 3 เครื่อง

Node1 –> IP 192.168.1.11

Node2 –> IP 192.168.1.12

Node3 –> IP 192.168.1.13

ติดตั้ง MariaDB10.1

ทำทั้ง 3 เครื่อง เพิ่มแหล่งดาวน์โหลด MariaDB 10.1 จาก
https://downloads.mariadb.org/mariadb/repositories

# MariaDB 10.1 CentOS repository list - created 2016-06-18 07:03 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

บันทึกไฟล์ ชื่อไฟล์ MariaDB.repo ไว้ที่ /etc/yum.repos.d

เสร็จแล้วใช้คำสั่ง

# yum install MariaDB-server

สำหรับเวอร์ชัน 10.1 แค่สั่ง yum install MariaDB-server แพ็กเก็จอื่นๆ ที่จำเป็นเกี่ยวกับ Cluster ก็จะถูกติดตั้งให้เองทั้งหมด ไม่ว่าจะเป็น galera rsync หรืออื่นๆ

 

คอนฟิก MariaDB 10.1
ทำเหมือนกันทั้ง 3 เครื่อง

หลังจากที่ติดตั้งเสร็จ ให้ mysql ทำงาน ด้วยคำสั่ง

# systemctl start mariadb.service

หลังจากนั้นรันคำสั่ง

# mysql_secure_installation

Enter current password for root (enter for none): กรณีที่ยังไม่ได้ตั้งรหัสผ่าน ให้ Enter ผ่าน
ให้ตอบคำถามของ mysql_secure_installation ดังต่อไปนี้

Set root password? [Y/n] y # ในที่นี้ตั้งระหัสผ่าน 123456

Remove anonymous users? [Y/n]} y

Disallow root login remotely? [Y/n] n

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n]} y

เสร็จแล้วสั่ง

#systemctl stop mariadb.service
#systemctl disable mariadb.service

ในการทำ Cluster เราจำเป็นต้องสั่งให้ Cluster ทำงาน ด้วยตัวเราเอง ไม่ให้ระบบสตาร์ท MariaDB เอง จึงจำเป็นต้องใช้คำสั่ง
#systemctl disable mariadb.service

****ย้ำทำขั้นตอนที่กล่าวมาทั้ง 3 เครื่อง

 

ไฟล์คอนฟิก Cluster

ไฟล์คอนฟิก /etc/my.cnf ทั้ง 3 เครื่อง ต้องมี บรรทัดนี้

!includedir /etc/my.cnf.d

ไฟล์คอนฟิก /etc/my.cnf.d/server.cnf ของ Node1

[mariadb-10.1]

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
query_cache_type=0
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0

wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.1.11,192.168.1.12,192.168.1.13
wsrep_cluster_name='mycluster'
wsrep_node_address='192.168.1.11'
wsrep_node_name='node1'
wsrep_sst_method=rsync
wsrep_sst_auth=root:123456

ไฟล์คอนฟิก /etc/my.cnf.d/server.cnf ของ Node2

[mariadb-10.1]

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
query_cache_type=0
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0

wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.1.11,192.168.1.12,192.168.1.13
wsrep_cluster_name='mycluster'
wsrep_node_address='192.168.1.12'
wsrep_node_name='node2'
wsrep_sst_method=rsync
wsrep_sst_auth=root:123456

ไฟล์คอนฟิก /etc/my.cnf.d/server.cnf ของ Node3

[mariadb-10.1]

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
query_cache_type=0
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0

wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.1.11,192.168.1.12,192.168.1.13
wsrep_cluster_name='mycluster'
wsrep_node_address='192.168.1.13'
wsrep_node_name='node3'
wsrep_sst_method=rsync
wsrep_sst_auth=root:123456

เมื่อคอนฟิกเสร็จแล้ว

Node1 สั่งสตาร์ท Cluster ด้วยคำสั่ง

# galera_new_cluster

Node2

# systemctl start mariadb.service

Node 3
ก่อนสตาร์ท Node 3 ต้องรอดูให้ Node 2 ดึงข้อมูลมาจาก Node1 ให้หมดก่อน นั่นก็คือสังเกตุจาก การขึ้น prompt หรือ การทำงานของ rsync หยุดลงก่อน ซึ่งจะช้าหรือเร็วขึ้นอยู่กับปริมาณข้อมูลใน Node1

cluster

แล้วค่อยสั่งสตาร์ท

# systemctl start mariadb.service

ที่ Node3 จะสตาร์ทสำเร็จก็ดูได้เช่นเดียวกับ Node2

 

ตรวจสอบว่า Cluster สตาร์ทได้สำเร็จจริงหรือไม่

ตรวจสอบที่เครื่อง Node ไหนก็ได้ โดยใช้คำสั่ง mysql

MariaDB [(none)]> show status like 'wsrep%';

ถ้าได้ผลดังภาพก็ถือว่าสตาร์ท Cluster ได้สำเร็จ คือมี IP ทั้งสามเข้ามาเป็นสมาชิกของ Cluster

cluster1

แต่ถ้าให้ชัวร์กว่านั้นให้ ทดลองสร้างฐานข้อมูลที่ Node ใด Node หนึ่ง แล้ว ไป show databases; ที่โหนดอื่น ถ้ามี Database ครบทุก Node ก็สำเร็จครับ

 

อ้างอิง : https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

Loading

Facebook Comments

Leave a reply