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 ของเรา เช่น
และสร้าง percona.list สำหรับลง มำ repo ไปยัง percona
8.เปิด Docker Terminal ขึ้นมาใหม่ 3 อัน แล้วใช้คำสั่ง docker attach [name]เพื่อ remote เข้าไปยัง container
Ubuntu:[gtpxc1]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
credit by: Docker,Percona XtraDB Cluster 5.6 Documentation,Jericho Rivera
2.สร้าง directoryไว้สำหรับเก็บ image ของเรา เช่น
mkdir ubuntu-percona cd ubuntu-percona3.สร้าง 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
vi percona.list deb http://repo.percona.com/apt trusty main deb-src http://repo.percona.com/apt trusty main4.ทำการ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; done6.เรียกดู docker ที่ทำงานอยู่
docker ps7.เช็ค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
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
/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 startUbuntu:[gtpxc3]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
#vi /etc/mysql/my.cnf #/etc/init.d/mysql startUbuntu:[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