วันพุธที่ 26 สิงหาคม พ.ศ. 2558

Percona XtraDB Cluster 5.6 (3 node) With Docker

ไม่มีความคิดเห็น

Percona XtraDB Cluster 5.6 (3 node) With Docker


    ในช่วงนี้ต้องบอกว่ายุคของ containers ผมก็เลยลองทำ Docker สักหน่อย อยากทำเป็น database cluster เลยเลือก Percona XtraDB Cluster 5.6 เพราะเป็น open source มาทำ (กำลังศึกษา อาจอธิบายอะไรผิดพลาดต้องขออภัยด้วยนะครับ ปล.ต้องขอบคุณคอร์สเอื้ออาทรสุดๆจาก Links Innovation)

1.ทำการ pull image ของ ubuntu มาก่อน
2.สร้าdirectoryไว้สำหรับเก็บ image ของเรา เช่น
mkdir ubuntu-percona
cd ubuntu-percona
3.สร้าง Dockerfile ที่จะรวมคำสั่งในการสร้าง image ของเราขึ้นมา
vi Dockerfile

FROM ubuntu:trusty
MAINTAINER GuutonG credit by [Percona.com]
CMD ["/bin/bash"]
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
ADD percona.list /etc/apt/sources.list.d/percona.list
RUN apt-get update
RUN apt-get install -y percona-xtradb-cluster-56 qpress xtrabackup
RUN apt-get install -y python-software-properties vim wget curl netcat

และสร้าง percona.list สำหรับลง มำ repo ไปยัง percona
vi percona.list
deb http://repo.percona.com/apt trusty main
deb-src http://repo.percona.com/apt trusty main
4.ทำการbuild Dockerfile ที่เราสร้างไว้
docker build -t ubuntu:gtpxc .
5. ทำการ run ubuntu:gtpxc ออกมา3 containner

for n in {1..3}; do docker run --name gtpxc$n -i -t -d ubuntu:gtpxc bash; done
6.เรียกดู docker ที่ทำงานอยู่

docker ps
7.เช็คIP ของแต่ละ container
docker inspect gtpxc1 | grep IPAddress
docker inspect gtpxc2 | grep IPAddress
docker inspect gtpxc3 | grep IPAddress
ในที่นี้จะได้ IP

8.เปิด Docker Terminal ขึ้นมาใหม่ 3 อัน แล้วใช้คำสั่ง docker attach [name]เพื่อ remote เข้าไปยัง container

docker attach gtpxc1
docker attach gtpxc2
docker attach gtpxc3


Ubuntu:[gtpxc1]

vi /etc/mysql/my.cnf

#GT-PXC Node1
[mysqld]
user = mysql
default_storage_engine = InnoDB
basedir = /usr
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
innodb_autoinc_lock_mode = 2
log_queries_not_using_indexes = 1
max_allowed_packet = 128M
binlog_format = ROW

wsrep_provider = /usr/lib/libgalera_smm.so
wsrep_cluster_name="docker-gtpxc"
#IP node1,node2,node3
wsrep_cluster_address = gcomm://[IP node1],[IP node2],[IP node3]
#Name node1
wsrep_node_address = [IP node1]
wsrep_node_name = gtpxc1
wsrep_slave_threads = 4
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = gtuser:gtpassword

[sst]
streamfmt = xbstream

[xtrabackup]
compress
compact
parallel = 2
compress_threads = 2

rebuild_threads = 2

ใช้คำสั่งเพื่อ start percona xtradb cluster
/etc/init.d/mysql bootstrap-pxc
และสร้าง user pass กลางสำหรับใช้ร่วมกัน

mysql>CREATE USER 'gtuser'@'localhost' IDENTIFIED BY 'gtpassword';
mysql>GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'gtuser'@'localhost';
mysql>FLUSH PRIVILEGES;
ตรวจสอบค่าต่างของ cluster
mysql>show global status like 'wsrep%';
Ubuntu:[gtpxc2]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
vi /etc/mysql/my.cnf
/etc/init.d/mysql start
Ubuntu:[gtpxc3]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
#vi /etc/mysql/my.cnf
#/etc/init.d/mysql start
Ubuntu:[gtpxc1]

mysql>show global status like 'wsrep%';

+------------------------------+------------------------------------------------
--+
| Variable_name | Value
|
+------------------------------+------------------------------------------------
--+
| wsrep_local_state_uuid | 1bb5bf25-4c05-11e5-b0af-ebfa440f9b9e
|
| wsrep_incoming_addresses | 172.17.0.4:3306,172.17.0.5:3306,172.17.0.6:3306
|
| wsrep_evs_repl_latency | 0.00041831/0.000710346/0.000908118/0.000180007/
4 |
| wsrep_evs_state | OPERATIONAL
|
| wsrep_gcomm_uuid | 1bb555bd-4c05-11e5-95a6-cfcc3cc31436
|
| wsrep_cluster_conf_id | 3
|
| wsrep_cluster_size | 3
|
| wsrep_cluster_state_uuid | 1bb5bf25-4c05-11e5-b0af-ebfa440f9b9e
|
| wsrep_cluster_status | Primary
|
| wsrep_connected | ON
|
| wsrep_local_bf_aborts | 0
|
| wsrep_local_index | 0
|
| wsrep_provider_name | Galera
|
| wsrep_provider_vendor | Codership Oy
|
| wsrep_provider_version | 3.11(r93aca2d)
|
| wsrep_ready | ON
|
+------------------------------+------------------------------------------------
--+
[TEST]


Time
Ubuntu:[gtpxc1] Ubuntu:[gtpxc2] Ubuntu:[gtpxc3]
1
create database gtpxcDB;



2


show databases;
+--------------------+
| Database |
+--------------------+
| gtpxcDB |
+--------------------+


3




gtpxcDB;
create table tbl1 (id INT PRIMARY KEY, name VARCHAR(30));
INSERT INTO gtpxcDB.tbl1 VALUES (1, 'gtpxc1');
INSERT INTO gtpxcDB.tbl1 VALUES (2, 'gtpxc2');
INSERT INTO gtpxcDB.tbl1 VALUES (3, 'gtpxc3');
4
show tables;
+-------------------+
| Tables_gtpxcDB |
+-------------------+
| tbl1 |
+-------------------+




5


use gtpxcDB;
select * from tbl1;
+----+--------+
| id | name |
+----+--------+
| 1 | gtpxc1 |
| 2 | gtpxc2 |
| 3 | gtpxc3 |
+----+--------+






credit by: Docker,Percona XtraDB Cluster 5.6 Documentation,Jericho Rivera