SlideShare a Scribd company logo
1 of 56
Download to read offline
café.naver.com/mysqlpg
1
Spider Architecture
날짜 : 2016.03.21
Ver. 1.0
작성 : DB실 전수진
café.naver.com/mysqlpg
 Spider Setup
 Architecture
 Topology
Agenda
café.naver.com/mysqlpg
 Spider Setup
 Architecture
 Topology
Agenda
café.naver.com/mysqlpg
Setup
café.naver.com/mysqlpg
Setup
café.naver.com/mysqlpg
Setup
■ Server Spec
café.naver.com/mysqlpg
Setup
■ MySQL Install
Sandbox : http://mysqlsandbox.net/
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 1. 사전 요구 프로그램 설치
sudo su -
yum install -y gcc automake autoconf libtool make cpan libstdc*
yum install -y perl-CPAN
yum install -y --skip-broken perl*
cpan YAML
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 2. 그룹(mysql)/계정(maria) 생성
sudo su -
mkdir -p /usr1/program
mkdir -p /usr1/mysql/dba/tools
groupadd -g 900 mysql
cat /etc/group | grep -E 'mysql|maria'
useradd maria -g mysql -d /home/maria -u 901 -c mysql_user
echo 'maria:oracle' | chpasswd
cat /etc/passwd | grep -E 'mysql|maria'
chown -R maria:mysql /usr1
ls -l /usr1
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 3. Sandbox Download & Compile
sudo su -
cd /usr1/program
wget http://search.cpan.org/CPAN/authors/id/G/GM/GMAX/MySQL-Sandbox-3.1.05.tar.gz
ls -l MySQL-Sandbox*
tar xvfz MySQL-Sandbox-3.1.05.tar.gz
cd MySQL-Sandbox-3.1.05
perl Makefile.PL
make && make test
make install
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 4. MariaDB 10.1 (SpiderNode) / MySQL 5.7 (DataNode) Binary Download
su - maria
cd /usr1/program/
wget http://ftp.kaist.ac.kr/mariadb//mariadb-10.1.12/bintar-linux-glibc_214-x86_64/mariadb-10.1.12-linux-glibc_214-x86_64.tar.gz
tar xvfz mariadb-10.1.12-linux-glibc_214-x86_64.tar.gz
mv mariadb-10.1.12-linux-glibc_214-x86_64 /usr1/mysql/10.1.12
wget https://downloads.mariadb.com/archives/mysql-5.7/mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz
tar zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.11-linux-glibc2.5-x86_64 /usr1/mysql/5.7.11
ls -l /usr1/mysql
chown -R maria:mysql /usr1
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 5. Multi Instance Install (Spider : 4, Data : 6)
su - maria
cd /usr1/mysql
mkdir -p /usr1/mysql/sandboxes
make_multiple_sandbox -r spider_node 10.1.12 --upper_directory=/usr1/mysql/sandboxes --how_many_nodes=4
make_multiple_sandbox -r data_node 5.7.11 --upper_directory=/usr1/mysql/sandboxes --how_many_nodes=6
ps -ef | awk -F ' ' '{print $2, $9;}' | grep mysqld_safe
6479 /usr1/mysql/10.1.12/bin/mysqld_safe
…
7604 /usr1/mysql/5.7.11/bin/mysqld_safe
…
netstat -nap | grep LISTEN | grep mysql
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 5. Multi Instance Install
# Port 변경 (Spider Node)
cd /usr1/mysql/sandboxes/spider_node && ./stop_all
cd /usr1/mysql/sandboxes/spider_node/node1 && ./change_ports 3306
cd /usr1/mysql/sandboxes/spider_node/node2 && ./change_ports 3307
cd /usr1/mysql/sandboxes/spider_node/node3 && ./change_ports 9906
cd /usr1/mysql/sandboxes/spider_node/node4 && ./change_ports 9907
cd /usr1/mysql/sandboxes/spider_node && ./start_all
cd /usr1/mysql/sandboxes/spider_node && ./status_all
cd /usr1/mysql/sandboxes/spider_node && ./use_all -e " select version()"
netstat -nap | grep LISTEN | grep mysql
3306
10001
10002
10003
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 5. Multi Instance Install
# Port 변경 (Data Node)
cd /usr1/mysql/sandboxes/data_node && ./stop_all
cd /usr1/mysql/sandboxes/data_node/node1 && ./change_ports 10001
cd /usr1/mysql/sandboxes/data_node/node2 && ./change_ports 10002
cd /usr1/mysql/sandboxes/data_node/node3 && ./change_ports 10003
cd /usr1/mysql/sandboxes/data_node/node4 && ./change_ports 20001
cd /usr1/mysql/sandboxes/data_node/node5 && ./change_ports 20002
cd /usr1/mysql/sandboxes/data_node/node6 && ./change_ports 20003
cd /usr1/mysql/sandboxes/data_node && ./start_all
cd /usr1/mysql/sandboxes/data_node && ./status_all
cd /usr1/mysql/sandboxes/data_node && ./use_all -e " select version()"
netstat -nap | grep LISTEN | grep mysql
3306
10001
10002
10003
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 6. Define an easy way to access the nodes from the MariaDB or MySQL client
su - maria
alias spider1='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=3306 --socket=/tmp/mysql_sandbox3306.sock'
alias spider2='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=3307 --socket=/tmp/mysql_sandbox3307.sock'
alias spider3='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=9906 --socket=/tmp/mysql_sandbox9906.sock'
alias spider4='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=9907 --socket=/tmp/mysql_sandbox9907.sock'
alias backend1='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10001 --socket=/tmp/mysql_sandbox10001.sock
alias backend2='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10002 --socket=/tmp/mysql_sandbox10002.sock
alias backend3='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10003 --socket=/tmp/mysql_sandbox10003.sock
alias backend11='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20001 --socket=/tmp/mysql_sandbox20001.sock'
alias backend12='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20002 --socket=/tmp/mysql_sandbox20002.sock'
alias backend13='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20003 --socket=/tmp/mysql_sandbox20003.sock'
$ spider1 -e "select version()"
+-----------------+
| version() |
+-----------------+
| 10.1.12-MariaDB |
+-----------------+
$ backend1 -e "select version()"
+------------+
| version() |
+------------+
| 5.7.11-log |
+------------+
café.naver.com/mysqlpg
Setup
■ MySQL Install
Step 6. Define an easy way to access the nodes from the MariaDB or MySQL client
su – maria
cd /usr1/mysql/dba
café.naver.com/mysqlpg
Setup
Spider_node general_log
data_node1 general_log
data_node2 general_log
café.naver.com/mysqlpg
Setup
café.naver.com/mysqlpg
 Spider Setup
 Architecture
 Topology
Agenda
café.naver.com/mysqlpg
Architecture
■ Type
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
# Federation # Sharding # High Availability
café.naver.com/mysqlpg
Architecture
■ Federation
Without connection pool or MariaDB thread pool, HaProxy and Spider have been protecting the tcp socket overflow without specific TCP tuning.
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
backend1 << EOF
DROP DATABASE IF EXISTS backend ;
CREATE DATABASE backend;
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
DESC backend.sbtest;
EOF
①
café.naver.com/mysqlpg
Architecture
■ Federation
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
DROP SERVER IF EXISTS backend1;
CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘
, DATABASE 'backend‘
, USER 'msandbox‘
, PASSWORD 'msandbox‘
, PORT 10001);
EOF②
café.naver.com/mysqlpg
Architecture
■ Federation
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE DATABASE IF NOT EXISTS test;
DROP TABLE IF EXISTS test.sbtest;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=spider COMMENT='wrapper "mysql",srv "backend1"';
SELECT * FROM test.sbtest LIMIT 10;
EOF
③
café.naver.com/mysqlpg
Architecture
■ Federation & HA
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
backend1 << EOF
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
EOF
backend2 << EOF
…
EOF
backend3 << EOF
…
EOF
①①
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘
, DATABASE 'backend‘
, USER 'msandbox‘
, PASSWORD 'msandbox‘
, PORT 10001);
CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql
…
CREATE SERVER backend3 FOREIGN DATA WRAPPER mysql
…
EOF
■ Federation & HA
②
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE DATABASE IF NOT EXISTS test;
DROP TABLE IF EXISTS test.sbtest;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=spider COMMENT='wrapper "mysql",srv "backend1 backend2 backend3"';
SELECT * FROM test.sbtest LIMIT 10;
EOF
■ Federation & HA
③
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
TRUNCATE TABLE test.sbtest;
Insert into test.sbtest values (1, 100, 'A', 'A1');
Insert into test.sbtest values (2, 200, 'A', 'A1');
Insert into test.sbtest values (3, 300, 'A', 'A1');
Insert into test.sbtest values (4, 400, 'A', 'A1');
Insert into test.sbtest values (5, 500, 'A', 'A1');
SELECT * FROM test.sbtest;
EOF
backend1 -e"select count(*) from backend.sbtest;"
backend2 -e"select count(*) from backend.sbtest;"
backend3 -e"select count(*) from backend.sbtest;"
+----------+
| count(*) |
+----------+
| 5 |
+----------+
■ Federation & HA
④
동일한 데이터를 확인할 수 있음 !
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
cd /usr1/mysql/sandboxes/data_node/node2 && ./stop
spider1 -e "Insert into test.sbtest values (11, 1100, 'A', 'A1');"
-- ERROR 1429 (HY000) at line 1:
Unable to connect to foreign data source: backend2
backend1 -e"select count(*) from backend.sbtest;"
-- 5
backend2 -e"select count(*) from backend.sbtest;"
-- ERROR 2002 (HY000):
Can't connect to local MySQL server through socket '/tmp/mysql_sandbox100
backend3 -e"select count(*) from backend.sbtest;"
-- 5
■ Federation & HA
Datanode2 장애유발!
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
■ Federation & HA
spider1 << EOF
DROP TABLE IF EXISTS test.sbtest;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=spider COMMENT='wrapper "mysql",srv "backend1 backend3"';
EOF
spider1 -e "Insert into test.sbtest values (11, 1100, 'A', 'A1');"
backend1 -e"select count(*) from backend.sbtest;"
backend3 -e"select count(*) from backend.sbtest;"
-- 6
-- 6
복구방법 :
테이블의 정의를 변경함
으로써 빠르게 복구 가능
café.naver.com/mysqlpg
Architecture
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
backend1 << EOF
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
EOF
backend2 << EOF
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
EOF
■ Sharding
Data Sharding
②①
café.naver.com/mysqlpg
Architecture
■ Sharding
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘
, DATABASE 'backend‘
, USER 'msandbox‘
, PASSWORD 'msandbox‘
, PORT 10001);
CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘
, DATABASE 'backend‘
, USER 'msandbox‘
, PASSWORD 'msandbox‘
, PORT 10002);
EOF
③ ④
café.naver.com/mysqlpg
Architecture
■ Sharding
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE DATABASE IF NOT EXISTS test;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'
PARTITION BY KEY (id)
(
PARTITION pt1 COMMENT = 'srv "backend1"'
, PARTITION pt2 COMMENT = 'srv "backend2"'
);
SELECT count(*) FROM test.sbtest LIMIT 10;
EOF
⑤
café.naver.com/mysqlpg
Architecture
■ Sharding
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
TRUNCATE TABLE test.sbtest;
Insert into test.sbtest values (1, 100, 'A', 'A1');
Insert into test.sbtest values (2, 200, 'A', 'A1');
Insert into test.sbtest values (3, 300, 'A', 'A1');
Insert into test.sbtest values (4, 400, 'A', 'A1');
Insert into test.sbtest values (5, 500, 'A', 'A1');
SELECT * FROM test.sbtest;
EOF
backend1 -e"select count(*) from backend.sbtest;"
-- 3
backend2 -e"select count(*) from backend.sbtest;"
-- 2
⑥
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
backend1 << EOF
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
CREATE TABLE backend_rpl.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
EOF
backend2 << EOF
CREATE TABLE backend.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
CREATE TABLE backend_rpl.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=InnoDB;
EOF
②①
back1 back1_rpl back2 back2_rpl
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
spider1 << EOF
CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend‘ , … , PORT 10001);
CREATE SERVER backend1_rpl FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend_rpl‘, … , PORT 10001);
CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend‘ , … , PORT 10002);
CREATE SERVER backend2_rpl FOREIGN DATA WRAPPER mysql
OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend_rpl‘, … , PORT 10002);
EOF
back1 back1_rpl back2 back2_rpl
④③
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
spider1 << EOF
CREATE DATABASE IF NOT EXISTS test;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
, k int unsigned NOT NULL DEFAULT '0'
, c char(100) NOT NULL DEFAULT ''
, pad char(60) NOT NULL DEFAULT ''
, PRIMARY KEY (id)
, KEY k (k)
)
ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'
PARTITION BY KEY (id)
(
PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl"'
, PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl"'
);
INSERT INTO test.sbtest select 10000001, 0, '' ,'replicas test';
EOF
⑤
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
backend1 -e "SELECT * FROM backend.sbtest WHERE id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
backend2 -e "SELECT * FROM backend.sbtest where id=10000001";
backend2 -e "SELECT * FROM backend_rpl.sbtest where id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
⑥
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
spider1 << EOF
insert into test.sbtest values (1, 100, 'A', 'A1');
insert into test.sbtest values (2, 200, 'A', 'A1');
insert into test.sbtest values (3, 300, 'A', 'A1');
insert into test.sbtest values (4, 400, 'A', 'A1');
insert into test.sbtest values (5, 500, 'A', 'A1');
EOF
backend1 -e "select (select count(*) from backend.sbtest) as cnt1
, (select count(*) from backend_rpl.sbtest) as cnt2"
+------+------+
| cnt1 | cnt2 |
+------+------+
| 4 | 2 |
+------+------+
backend2 -e "select (select count(*) from backend.sbtest) as cnt1
, (select count(*) from backend_rpl.sbtest) as cnt2"
+------+------+
| cnt1 | cnt2 |
+------+------+
| 2 | 4 |
+------+------+
⑦
⑧
4 42 2
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
spider1 -e "SELECT * FROM test.sbtest where id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
cd /usr1/mysql/sandboxes/data_node/node1 && ./stop
backend1 -e "SELECT * FROM backend.sbtest where id=10000001"
-- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox10001.sock'
spider1 -e "SELECT * FROM test.sbtest where id=10000001";
-- ERROR 1429 (HY000): Unable to connect to foreign data source: backend1_rpl
spider1 -e "SELECT * from mysql.spider_tables order by link_id, server";
cd /usr1/mysql/sandboxes/data_node/node1 && ./start
spider1 -e "SELECT * FROM test.sbtest where id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
⑨
⑩
4 42 2
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
-- Data Node Replica 모니터링 등록
spider1 << EOF
DROP TABLE IF EXISTS test.sbtest;
CREATE TABLE test.sbtest (
id int unsigned NOT NULL AUTO_INCREMENT
…
)
ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'
PARTITION BY KEY (id)
(
PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "0 0"'
, PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 0"'
);
CREATE SERVER mon FOREIGN DATA WRAPPER mysql
OPTIONS ( HOST '127.0.0.1', DATABASE 'test', … , PORT 3306);
INSERT INTO mysql.spider_link_mon_servers VALUES ('%','%','%',1,'mon‘
,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL);
SELECT * FROM mysql.spider_link_mon_servers;
SELECT spider_flush_table_mon_cache();
EOF
HA 모니터링을 관장할
서버의 @@Service_ID
- Spider_Node : 1, 2
- Data_Node : 101, 102
Node Status
1 : 정상, 3 : 중지
2 : 관리 작업 중
@@server_id = 1
@@server_id = 101
@@server_id = 102
⑪
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
spider1 -e "SELECT * FROM test.sbtest where id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
cd /usr1/mysql/sandboxes/data_node/node1 && ./stop
backend1 -e "SELECT * FROM backend.sbtest where id=10000001"
-- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox10001.sock'
spider1 -e "SELECT * FROM test.sbtest where id=10000001";
+----------+---+---+---------------+
| id | k | c | pad |
+----------+---+---+---------------+
| 10000001 | 0 | | replicas test |
+----------+---+---+---------------+
spider1 -e "SELECT * from mysql.spider_tables order by link_id, server";
+---------+--------------+--------------+-------------+
| link_id | server | table_name | link_status |
+---------+--------------+--------------+-------------+
| 0 | backend1 | sbtest#P#pt1 | 3 |
| 1 | backend1_rpl | sbtest#P#pt2 | 3 |
| 0 | backend2 | sbtest#P#pt2 | 1 |
| 1 | backend2_rpl | sbtest#P#pt1 | 1 |
+---------+--------------+--------------+-------------+
데이터 조회는 되었지만,
실제는 fail 상태로 존재함
⑫
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
cd /usr1/mysql/sandboxes/data_node/node1 && ./start
spider1 << EOF
select * from mysql.spider_tables order by link_id, server, table_name;
-- link status 변경 : fail -> maintenance
ALTER TABLE test.sbtest
ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'
PARTITION BY KEY (id)
(
PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "2 0"'
, PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 2"'
);
select * from mysql.spider_tables order by link_id, server, table_name;
+---------+--------------+--------------+-------------+
| link_id | server | table_name | link_status |
+---------+--------------+--------------+-------------+
| 0 | backend1 | sbtest#P#pt1 | 2 |
| 1 | backend1_rpl | sbtest#P#pt2 | 2 |
| 0 | backend2 | sbtest#P#pt2 | 1 |
| 1 | backend2_rpl | sbtest#P#pt1 | 1 |
+---------+--------------+--------------+-------------+
⑬
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
select * from mysql.spider_tables order by link_id, server, table_name;
+---------+--------------+--------------+-------------+
| link_id | server | table_name | link_status |
+---------+--------------+--------------+-------------+
| 0 | backend1 | sbtest#P#pt1 | 2 |
| 1 | backend1_rpl | sbtest#P#pt2 | 2 |
| 0 | backend2 | sbtest#P#pt2 | 1 |
| 1 | backend2_rpl | sbtest#P#pt1 | 1 |
+---------+--------------+--------------+-------------+
select spider_copy_tables('test.sbtest#P#pt1','1','0');
-- 1
select spider_copy_tables('test.sbtest#P#pt2','0','1');
-- 1
⑭
café.naver.com/mysqlpg
Architecture
■ High Availability
What is happening if we stop one backend?
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
-- link status 변경 : maintenance -> live
ALTER TABLE test.sbtest
ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'
PARTITION BY KEY (id)
(
PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "1 0"'
, PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 1"'
);
select * from mysql.spider_tables order by link_id, server, table_name;
+---------+--------------+--------------+-------------+
| link_id | server | table_name | link_status |
+---------+--------------+--------------+-------------+
| 0 | backend1 | sbtest#P#pt1 | 1 |
| 1 | backend1_rpl | sbtest#P#pt2 | 1 |
| 0 | backend2 | sbtest#P#pt2 | 1 |
| 1 | backend2_rpl | sbtest#P#pt1 | 1 |
+---------+--------------+--------------+-------------+
⑮
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
back1 back1_rpl back2 back2_rpl
spider1 << EOF
insert into test.sbtest values (1, 100, 'A', 'A1');
insert into test.sbtest values (2, 200, 'A', 'A1');
insert into test.sbtest values (3, 300, 'A', 'A1');
insert into test.sbtest values (4, 400, 'A', 'A1');
insert into test.sbtest values (5, 500, 'A', 'A1');
EOF
backend1 -e "select (select count(*) from backend.sbtest) as cnt1
, (select count(*) from backend_rpl.sbtest) as cnt2"
+------+------+
| cnt1 | cnt2 |
+------+------+
| 4 | 2 |
+------+------+
backend2 -e "select (select count(*) from backend.sbtest) as cnt1
, (select count(*) from backend_rpl.sbtest) as cnt2"
+------+------+
| cnt1 | cnt2 |
+------+------+
| 2 | 4 |
+------+------+
café.naver.com/mysqlpg
Architecture
■ High Availability
Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/
select link_id, server, table_name, link_status
from mysql.spider_tables
order by link_id, server, table_name
café.naver.com/mysqlpg
Architecture
■ High Availability
café.naver.com/mysqlpg
Architecture
café.naver.com/mysqlpg
 Spider Setup
 Architecture
 Topology
Agenda
café.naver.com/mysqlpg
Topology
FrontDB
Master1 Slave1
Master2 Slave2
Master3 Slave3
café.naver.com/mysqlpg
Topology
FrontDB
Master1 Slave1
Master2 Slave2
Master3 Slave3
Master1 Slave1
Master2 Slave2
Master3 Slave3
CollectDB
(ETL)
café.naver.com/mysqlpg
Topology
Master1 Slave1
Master2 Slave2
Master3 Slave3
FrontDB1
FrontDB2
CollectDB1
(admintool)
CollectDB2
(ETL)
café.naver.com/mysqlpg
Topology
Master3
Master3a
Master1
Master1a
Master2
Master2a
FrontDB1
FrontDB2
CollectDB
FrontDB
Master1 Slave1
Master2 Slave2
Master3 Slave3
Master1 Slave1
Master2 Slave2
Master3 Slave3
CollectDB
(ETL)
Master1 Slave1
Master2 Slave2
Master3 Slave3
FrontDB1
FrontDB2
CollectDB1
(admintool)
CollectDB2
(ETL)
café.naver.com/mysqlpg
Topology
FrontDB
Master1 Slave1
Master2 Slave2
Master3 Slave3
Master1 Slave1
Master2 Slave2
Master3 Slave3
Master1 Slave1
Master2 Slave2
Master3 Slave3
FrontDB1
FrontDB2
Master1
Master1a
Master2
MAster2a
Master3
Master3a
FrontDB1
FrontDB2
&
CollectDB
CollectDB
(ETL)
CollectDB1
(admintool)
CollectDB2
(ETL)
Master3
Master3a
Master1
Master1a
Master2
Master2a
FrontDB1
FrontDB2
café.naver.com/mysqlpg
Topology
FrontShard1 FrontShard2
Master1 Master1a
Master2 MAster2a
Spec : 12Core / 32GB
 Spider : 1GB
 Data1 : 6GB
 Data2 : 6GB
 DB Connection 수에 주의 !!!
Dev, QA
Live 1단계
FrontShard1 FrontShard2
Master1 Master1a
Master2 MAster2a
DB 부하 및 서비스 오픈 전략에 맞춰 서버 배치 진행
Live 2단계
café.naver.com/mysqlpg

More Related Content

What's hot

Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumScyllaDB
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestI Goo Lee
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Zero Downtime Schema Changes - Galera Cluster - Best Practices
Zero Downtime Schema Changes - Galera Cluster - Best PracticesZero Downtime Schema Changes - Galera Cluster - Best Practices
Zero Downtime Schema Changes - Galera Cluster - Best PracticesSeveralnines
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineScaleGrid.io
 
Project calico - introduction
Project calico - introductionProject calico - introduction
Project calico - introductionHazzim Anaya
 
Oracle Extended Clusters for Oracle RAC
Oracle Extended Clusters for Oracle RACOracle Extended Clusters for Oracle RAC
Oracle Extended Clusters for Oracle RACMarkus Michalewicz
 
Zabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesZabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesHenrique Haag Ribacki
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...DataStax
 
Understanding kube proxy in ipvs mode
Understanding kube proxy in ipvs modeUnderstanding kube proxy in ipvs mode
Understanding kube proxy in ipvs modeVictor Morales
 
ModSecurity and NGINX: Tuning the OWASP Core Rule Set
ModSecurity and NGINX: Tuning the OWASP Core Rule SetModSecurity and NGINX: Tuning the OWASP Core Rule Set
ModSecurity and NGINX: Tuning the OWASP Core Rule SetNGINX, Inc.
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlMydbops
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
Using eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthUsing eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthScyllaDB
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Claus Ibsen
 
MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바NeoClova
 
PostgreSQL continuous backup and PITR with Barman
 PostgreSQL continuous backup and PITR with Barman PostgreSQL continuous backup and PITR with Barman
PostgreSQL continuous backup and PITR with BarmanEDB
 

What's hot (20)

Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
 
Hadoop and OpenStack
Hadoop and OpenStackHadoop and OpenStack
Hadoop and OpenStack
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Zero Downtime Schema Changes - Galera Cluster - Best Practices
Zero Downtime Schema Changes - Galera Cluster - Best PracticesZero Downtime Schema Changes - Galera Cluster - Best Practices
Zero Downtime Schema Changes - Galera Cluster - Best Practices
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
 
Project calico - introduction
Project calico - introductionProject calico - introduction
Project calico - introduction
 
Oracle Extended Clusters for Oracle RAC
Oracle Extended Clusters for Oracle RACOracle Extended Clusters for Oracle RAC
Oracle Extended Clusters for Oracle RAC
 
Zabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesZabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões Regulares
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
 
Understanding kube proxy in ipvs mode
Understanding kube proxy in ipvs modeUnderstanding kube proxy in ipvs mode
Understanding kube proxy in ipvs mode
 
ModSecurity and NGINX: Tuning the OWASP Core Rule Set
ModSecurity and NGINX: Tuning the OWASP Core Rule SetModSecurity and NGINX: Tuning the OWASP Core Rule Set
ModSecurity and NGINX: Tuning the OWASP Core Rule Set
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in Postgresql
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
Using eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthUsing eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster Health
 
How to Design Indexes, Really
How to Design Indexes, ReallyHow to Design Indexes, Really
How to Design Indexes, Really
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
 
MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바
 
PostgreSQL continuous backup and PITR with Barman
 PostgreSQL continuous backup and PITR with Barman PostgreSQL continuous backup and PITR with Barman
PostgreSQL continuous backup and PITR with Barman
 
Pub/Sub Messaging
Pub/Sub MessagingPub/Sub Messaging
Pub/Sub Messaging
 

Similar to MySQL Spider Architecture

X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newYiwei Ma
 
MySQL for Beginners - part 1
MySQL for Beginners - part 1MySQL for Beginners - part 1
MySQL for Beginners - part 1Ivan Zoratti
 
SnortReport Presentation
SnortReport PresentationSnortReport Presentation
SnortReport Presentationwebhostingguy
 
Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册Yiwei Ma
 
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...NETWAYS
 
Introduction to cloudforecast
Introduction to cloudforecastIntroduction to cloudforecast
Introduction to cloudforecastMasahiro Nagano
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardwayDave Pitts
 
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey GordeychikCODE BLUE
 
Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016StackIQ
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
在Aix6.1上安装11g r2 rac grid infrastructure集群
在Aix6.1上安装11g r2 rac grid infrastructure集群在Aix6.1上安装11g r2 rac grid infrastructure集群
在Aix6.1上安装11g r2 rac grid infrastructure集群maclean liu
 
An Express Guide ~ Cacti for IT Infrastructure Monitoring & Graphing
An Express Guide ~ Cacti for IT Infrastructure Monitoring & GraphingAn Express Guide ~ Cacti for IT Infrastructure Monitoring & Graphing
An Express Guide ~ Cacti for IT Infrastructure Monitoring & GraphingAbhishek Kumar
 
OpenStack Tokyo Meeup - Gluster Storage Day
OpenStack Tokyo Meeup - Gluster Storage DayOpenStack Tokyo Meeup - Gluster Storage Day
OpenStack Tokyo Meeup - Gluster Storage DayDan Radez
 
MongoDB - Sharded Cluster Tutorial
MongoDB - Sharded Cluster TutorialMongoDB - Sharded Cluster Tutorial
MongoDB - Sharded Cluster TutorialJason Terpko
 
MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017Antonios Giannopoulos
 

Similar to MySQL Spider Architecture (20)

X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 new
 
MySQL for Beginners - part 1
MySQL for Beginners - part 1MySQL for Beginners - part 1
MySQL for Beginners - part 1
 
SnortReport Presentation
SnortReport PresentationSnortReport Presentation
SnortReport Presentation
 
Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
 
Introduction to cloudforecast
Introduction to cloudforecastIntroduction to cloudforecast
Introduction to cloudforecast
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
 
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik
[CB20] Vulnerabilities of Machine Learning Infrastructure by Sergey Gordeychik
 
Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016Salesforce at Stacki Atlanta Meetup February 2016
Salesforce at Stacki Atlanta Meetup February 2016
 
Memcached Study
Memcached StudyMemcached Study
Memcached Study
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
在Aix6.1上安装11g r2 rac grid infrastructure集群
在Aix6.1上安装11g r2 rac grid infrastructure集群在Aix6.1上安装11g r2 rac grid infrastructure集群
在Aix6.1上安装11g r2 rac grid infrastructure集群
 
An Express Guide ~ Cacti for IT Infrastructure Monitoring & Graphing
An Express Guide ~ Cacti for IT Infrastructure Monitoring & GraphingAn Express Guide ~ Cacti for IT Infrastructure Monitoring & Graphing
An Express Guide ~ Cacti for IT Infrastructure Monitoring & Graphing
 
MySQLinsanity
MySQLinsanityMySQLinsanity
MySQLinsanity
 
OpenStack Tokyo Meeup - Gluster Storage Day
OpenStack Tokyo Meeup - Gluster Storage DayOpenStack Tokyo Meeup - Gluster Storage Day
OpenStack Tokyo Meeup - Gluster Storage Day
 
Sharded cluster tutorial
Sharded cluster tutorialSharded cluster tutorial
Sharded cluster tutorial
 
MongoDB - Sharded Cluster Tutorial
MongoDB - Sharded Cluster TutorialMongoDB - Sharded Cluster Tutorial
MongoDB - Sharded Cluster Tutorial
 
MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017MongoDB – Sharded cluster tutorial - Percona Europe 2017
MongoDB – Sharded cluster tutorial - Percona Europe 2017
 

More from I Goo Lee

MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항I Goo Lee
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOI Goo Lee
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQLI Goo Lee
 
From MSSQL to MariaDB
From MSSQL to MariaDBFrom MSSQL to MariaDB
From MSSQL to MariaDBI Goo Lee
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기I Goo Lee
 
Backup automation in KAKAO
Backup automation in KAKAO Backup automation in KAKAO
Backup automation in KAKAO I Goo Lee
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축I Goo Lee
 
Federated Engine 실무적용사례
Federated Engine 실무적용사례Federated Engine 실무적용사례
Federated Engine 실무적용사례I Goo Lee
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
MySQL 5.7 NF – Optimizer Improvement
 MySQL 5.7 NF – Optimizer Improvement MySQL 5.7 NF – Optimizer Improvement
MySQL 5.7 NF – Optimizer ImprovementI Goo Lee
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용I Goo Lee
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)I Goo Lee
 
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개I Goo Lee
 
AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론I Goo Lee
 
AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분I Goo Lee
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTI Goo Lee
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKI Goo Lee
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKI Goo Lee
 
PostgreSQL 이야기
PostgreSQL 이야기PostgreSQL 이야기
PostgreSQL 이야기I Goo Lee
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)I Goo Lee
 

More from I Goo Lee (20)

MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIO
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
From MSSQL to MariaDB
From MSSQL to MariaDBFrom MSSQL to MariaDB
From MSSQL to MariaDB
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기
 
Backup automation in KAKAO
Backup automation in KAKAO Backup automation in KAKAO
Backup automation in KAKAO
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축
 
Federated Engine 실무적용사례
Federated Engine 실무적용사례Federated Engine 실무적용사례
Federated Engine 실무적용사례
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
MySQL 5.7 NF – Optimizer Improvement
 MySQL 5.7 NF – Optimizer Improvement MySQL 5.7 NF – Optimizer Improvement
MySQL 5.7 NF – Optimizer Improvement
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
 
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
 
AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론
 
AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMT
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELK
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELK
 
PostgreSQL 이야기
PostgreSQL 이야기PostgreSQL 이야기
PostgreSQL 이야기
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)
 

Recently uploaded

Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneCall girls in Ahmedabad High profile
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirtrahman018755
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Roomdivyansh0kumar0
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Servicesexy call girls service in goa
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Gram Darshan PPT cyber rural in villages of india
Gram Darshan PPT cyber rural  in villages of indiaGram Darshan PPT cyber rural  in villages of india
Gram Darshan PPT cyber rural in villages of indiaimessage0108
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Callshivangimorya083
 
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service PuneVIP Call Girls Pune Madhuri 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service PuneCall girls in Ahmedabad High profile
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersDamian Radcliffe
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Sheetaleventcompany
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Roomdivyansh0kumar0
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 

Recently uploaded (20)

Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Gram Darshan PPT cyber rural in villages of india
Gram Darshan PPT cyber rural  in villages of indiaGram Darshan PPT cyber rural  in villages of india
Gram Darshan PPT cyber rural in villages of india
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service PuneVIP Call Girls Pune Madhuri 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Madhuri 8617697112 Independent Escort Service Pune
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 

MySQL Spider Architecture

  • 1. café.naver.com/mysqlpg 1 Spider Architecture 날짜 : 2016.03.21 Ver. 1.0 작성 : DB실 전수진
  • 2. café.naver.com/mysqlpg  Spider Setup  Architecture  Topology Agenda
  • 3. café.naver.com/mysqlpg  Spider Setup  Architecture  Topology Agenda
  • 8. café.naver.com/mysqlpg Setup ■ MySQL Install Step 1. 사전 요구 프로그램 설치 sudo su - yum install -y gcc automake autoconf libtool make cpan libstdc* yum install -y perl-CPAN yum install -y --skip-broken perl* cpan YAML
  • 9. café.naver.com/mysqlpg Setup ■ MySQL Install Step 2. 그룹(mysql)/계정(maria) 생성 sudo su - mkdir -p /usr1/program mkdir -p /usr1/mysql/dba/tools groupadd -g 900 mysql cat /etc/group | grep -E 'mysql|maria' useradd maria -g mysql -d /home/maria -u 901 -c mysql_user echo 'maria:oracle' | chpasswd cat /etc/passwd | grep -E 'mysql|maria' chown -R maria:mysql /usr1 ls -l /usr1
  • 10. café.naver.com/mysqlpg Setup ■ MySQL Install Step 3. Sandbox Download & Compile sudo su - cd /usr1/program wget http://search.cpan.org/CPAN/authors/id/G/GM/GMAX/MySQL-Sandbox-3.1.05.tar.gz ls -l MySQL-Sandbox* tar xvfz MySQL-Sandbox-3.1.05.tar.gz cd MySQL-Sandbox-3.1.05 perl Makefile.PL make && make test make install
  • 11. café.naver.com/mysqlpg Setup ■ MySQL Install Step 4. MariaDB 10.1 (SpiderNode) / MySQL 5.7 (DataNode) Binary Download su - maria cd /usr1/program/ wget http://ftp.kaist.ac.kr/mariadb//mariadb-10.1.12/bintar-linux-glibc_214-x86_64/mariadb-10.1.12-linux-glibc_214-x86_64.tar.gz tar xvfz mariadb-10.1.12-linux-glibc_214-x86_64.tar.gz mv mariadb-10.1.12-linux-glibc_214-x86_64 /usr1/mysql/10.1.12 wget https://downloads.mariadb.com/archives/mysql-5.7/mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz tar zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz mv mysql-5.7.11-linux-glibc2.5-x86_64 /usr1/mysql/5.7.11 ls -l /usr1/mysql chown -R maria:mysql /usr1
  • 12. café.naver.com/mysqlpg Setup ■ MySQL Install Step 5. Multi Instance Install (Spider : 4, Data : 6) su - maria cd /usr1/mysql mkdir -p /usr1/mysql/sandboxes make_multiple_sandbox -r spider_node 10.1.12 --upper_directory=/usr1/mysql/sandboxes --how_many_nodes=4 make_multiple_sandbox -r data_node 5.7.11 --upper_directory=/usr1/mysql/sandboxes --how_many_nodes=6 ps -ef | awk -F ' ' '{print $2, $9;}' | grep mysqld_safe 6479 /usr1/mysql/10.1.12/bin/mysqld_safe … 7604 /usr1/mysql/5.7.11/bin/mysqld_safe … netstat -nap | grep LISTEN | grep mysql
  • 13. café.naver.com/mysqlpg Setup ■ MySQL Install Step 5. Multi Instance Install # Port 변경 (Spider Node) cd /usr1/mysql/sandboxes/spider_node && ./stop_all cd /usr1/mysql/sandboxes/spider_node/node1 && ./change_ports 3306 cd /usr1/mysql/sandboxes/spider_node/node2 && ./change_ports 3307 cd /usr1/mysql/sandboxes/spider_node/node3 && ./change_ports 9906 cd /usr1/mysql/sandboxes/spider_node/node4 && ./change_ports 9907 cd /usr1/mysql/sandboxes/spider_node && ./start_all cd /usr1/mysql/sandboxes/spider_node && ./status_all cd /usr1/mysql/sandboxes/spider_node && ./use_all -e " select version()" netstat -nap | grep LISTEN | grep mysql 3306 10001 10002 10003
  • 14. café.naver.com/mysqlpg Setup ■ MySQL Install Step 5. Multi Instance Install # Port 변경 (Data Node) cd /usr1/mysql/sandboxes/data_node && ./stop_all cd /usr1/mysql/sandboxes/data_node/node1 && ./change_ports 10001 cd /usr1/mysql/sandboxes/data_node/node2 && ./change_ports 10002 cd /usr1/mysql/sandboxes/data_node/node3 && ./change_ports 10003 cd /usr1/mysql/sandboxes/data_node/node4 && ./change_ports 20001 cd /usr1/mysql/sandboxes/data_node/node5 && ./change_ports 20002 cd /usr1/mysql/sandboxes/data_node/node6 && ./change_ports 20003 cd /usr1/mysql/sandboxes/data_node && ./start_all cd /usr1/mysql/sandboxes/data_node && ./status_all cd /usr1/mysql/sandboxes/data_node && ./use_all -e " select version()" netstat -nap | grep LISTEN | grep mysql 3306 10001 10002 10003
  • 15. café.naver.com/mysqlpg Setup ■ MySQL Install Step 6. Define an easy way to access the nodes from the MariaDB or MySQL client su - maria alias spider1='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=3306 --socket=/tmp/mysql_sandbox3306.sock' alias spider2='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=3307 --socket=/tmp/mysql_sandbox3307.sock' alias spider3='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=9906 --socket=/tmp/mysql_sandbox9906.sock' alias spider4='/usr1/mysql/10.1.12/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=9907 --socket=/tmp/mysql_sandbox9907.sock' alias backend1='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10001 --socket=/tmp/mysql_sandbox10001.sock alias backend2='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10002 --socket=/tmp/mysql_sandbox10002.sock alias backend3='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=10003 --socket=/tmp/mysql_sandbox10003.sock alias backend11='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20001 --socket=/tmp/mysql_sandbox20001.sock' alias backend12='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20002 --socket=/tmp/mysql_sandbox20002.sock' alias backend13='/usr1/mysql/5.7.11/bin/mysql --user=msandbox --password=msandbox --host=localhost --port=20003 --socket=/tmp/mysql_sandbox20003.sock' $ spider1 -e "select version()" +-----------------+ | version() | +-----------------+ | 10.1.12-MariaDB | +-----------------+ $ backend1 -e "select version()" +------------+ | version() | +------------+ | 5.7.11-log | +------------+
  • 16. café.naver.com/mysqlpg Setup ■ MySQL Install Step 6. Define an easy way to access the nodes from the MariaDB or MySQL client su – maria cd /usr1/mysql/dba
  • 19. café.naver.com/mysqlpg  Spider Setup  Architecture  Topology Agenda
  • 20. café.naver.com/mysqlpg Architecture ■ Type Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ # Federation # Sharding # High Availability
  • 21. café.naver.com/mysqlpg Architecture ■ Federation Without connection pool or MariaDB thread pool, HaProxy and Spider have been protecting the tcp socket overflow without specific TCP tuning. Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ backend1 << EOF DROP DATABASE IF EXISTS backend ; CREATE DATABASE backend; CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; DESC backend.sbtest; EOF ①
  • 22. café.naver.com/mysqlpg Architecture ■ Federation Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF DROP SERVER IF EXISTS backend1; CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘ , DATABASE 'backend‘ , USER 'msandbox‘ , PASSWORD 'msandbox‘ , PORT 10001); EOF②
  • 23. café.naver.com/mysqlpg Architecture ■ Federation Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE DATABASE IF NOT EXISTS test; DROP TABLE IF EXISTS test.sbtest; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=spider COMMENT='wrapper "mysql",srv "backend1"'; SELECT * FROM test.sbtest LIMIT 10; EOF ③
  • 24. café.naver.com/mysqlpg Architecture ■ Federation & HA Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ backend1 << EOF CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; EOF backend2 << EOF … EOF backend3 << EOF … EOF ①①
  • 25. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘ , DATABASE 'backend‘ , USER 'msandbox‘ , PASSWORD 'msandbox‘ , PORT 10001); CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql … CREATE SERVER backend3 FOREIGN DATA WRAPPER mysql … EOF ■ Federation & HA ②
  • 26. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE DATABASE IF NOT EXISTS test; DROP TABLE IF EXISTS test.sbtest; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=spider COMMENT='wrapper "mysql",srv "backend1 backend2 backend3"'; SELECT * FROM test.sbtest LIMIT 10; EOF ■ Federation & HA ③
  • 27. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF TRUNCATE TABLE test.sbtest; Insert into test.sbtest values (1, 100, 'A', 'A1'); Insert into test.sbtest values (2, 200, 'A', 'A1'); Insert into test.sbtest values (3, 300, 'A', 'A1'); Insert into test.sbtest values (4, 400, 'A', 'A1'); Insert into test.sbtest values (5, 500, 'A', 'A1'); SELECT * FROM test.sbtest; EOF backend1 -e"select count(*) from backend.sbtest;" backend2 -e"select count(*) from backend.sbtest;" backend3 -e"select count(*) from backend.sbtest;" +----------+ | count(*) | +----------+ | 5 | +----------+ ■ Federation & HA ④ 동일한 데이터를 확인할 수 있음 !
  • 28. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ cd /usr1/mysql/sandboxes/data_node/node2 && ./stop spider1 -e "Insert into test.sbtest values (11, 1100, 'A', 'A1');" -- ERROR 1429 (HY000) at line 1: Unable to connect to foreign data source: backend2 backend1 -e"select count(*) from backend.sbtest;" -- 5 backend2 -e"select count(*) from backend.sbtest;" -- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox100 backend3 -e"select count(*) from backend.sbtest;" -- 5 ■ Federation & HA Datanode2 장애유발!
  • 29. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ ■ Federation & HA spider1 << EOF DROP TABLE IF EXISTS test.sbtest; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=spider COMMENT='wrapper "mysql",srv "backend1 backend3"'; EOF spider1 -e "Insert into test.sbtest values (11, 1100, 'A', 'A1');" backend1 -e"select count(*) from backend.sbtest;" backend3 -e"select count(*) from backend.sbtest;" -- 6 -- 6 복구방법 : 테이블의 정의를 변경함 으로써 빠르게 복구 가능
  • 30. café.naver.com/mysqlpg Architecture Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ backend1 << EOF CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; EOF backend2 << EOF CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; EOF ■ Sharding Data Sharding ②①
  • 31. café.naver.com/mysqlpg Architecture ■ Sharding Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘ , DATABASE 'backend‘ , USER 'msandbox‘ , PASSWORD 'msandbox‘ , PORT 10001); CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘ , DATABASE 'backend‘ , USER 'msandbox‘ , PASSWORD 'msandbox‘ , PORT 10002); EOF ③ ④
  • 32. café.naver.com/mysqlpg Architecture ■ Sharding Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE DATABASE IF NOT EXISTS test; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"' PARTITION BY KEY (id) ( PARTITION pt1 COMMENT = 'srv "backend1"' , PARTITION pt2 COMMENT = 'srv "backend2"' ); SELECT count(*) FROM test.sbtest LIMIT 10; EOF ⑤
  • 33. café.naver.com/mysqlpg Architecture ■ Sharding Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF TRUNCATE TABLE test.sbtest; Insert into test.sbtest values (1, 100, 'A', 'A1'); Insert into test.sbtest values (2, 200, 'A', 'A1'); Insert into test.sbtest values (3, 300, 'A', 'A1'); Insert into test.sbtest values (4, 400, 'A', 'A1'); Insert into test.sbtest values (5, 500, 'A', 'A1'); SELECT * FROM test.sbtest; EOF backend1 -e"select count(*) from backend.sbtest;" -- 3 backend2 -e"select count(*) from backend.sbtest;" -- 2 ⑥
  • 34. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ backend1 << EOF CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; CREATE TABLE backend_rpl.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; EOF backend2 << EOF CREATE TABLE backend.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; CREATE TABLE backend_rpl.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=InnoDB; EOF ②① back1 back1_rpl back2 back2_rpl
  • 35. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ spider1 << EOF CREATE SERVER backend1 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend‘ , … , PORT 10001); CREATE SERVER backend1_rpl FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend_rpl‘, … , PORT 10001); CREATE SERVER backend2 FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend‘ , … , PORT 10002); CREATE SERVER backend2_rpl FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1‘, DATABASE 'backend_rpl‘, … , PORT 10002); EOF back1 back1_rpl back2 back2_rpl ④③
  • 36. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl spider1 << EOF CREATE DATABASE IF NOT EXISTS test; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT , k int unsigned NOT NULL DEFAULT '0' , c char(100) NOT NULL DEFAULT '' , pad char(60) NOT NULL DEFAULT '' , PRIMARY KEY (id) , KEY k (k) ) ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"' PARTITION BY KEY (id) ( PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl"' , PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl"' ); INSERT INTO test.sbtest select 10000001, 0, '' ,'replicas test'; EOF ⑤
  • 37. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl backend1 -e "SELECT * FROM backend.sbtest WHERE id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ backend2 -e "SELECT * FROM backend.sbtest where id=10000001"; backend2 -e "SELECT * FROM backend_rpl.sbtest where id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ ⑥
  • 38. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl spider1 << EOF insert into test.sbtest values (1, 100, 'A', 'A1'); insert into test.sbtest values (2, 200, 'A', 'A1'); insert into test.sbtest values (3, 300, 'A', 'A1'); insert into test.sbtest values (4, 400, 'A', 'A1'); insert into test.sbtest values (5, 500, 'A', 'A1'); EOF backend1 -e "select (select count(*) from backend.sbtest) as cnt1 , (select count(*) from backend_rpl.sbtest) as cnt2" +------+------+ | cnt1 | cnt2 | +------+------+ | 4 | 2 | +------+------+ backend2 -e "select (select count(*) from backend.sbtest) as cnt1 , (select count(*) from backend_rpl.sbtest) as cnt2" +------+------+ | cnt1 | cnt2 | +------+------+ | 2 | 4 | +------+------+ ⑦ ⑧ 4 42 2
  • 39. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl spider1 -e "SELECT * FROM test.sbtest where id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ cd /usr1/mysql/sandboxes/data_node/node1 && ./stop backend1 -e "SELECT * FROM backend.sbtest where id=10000001" -- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox10001.sock' spider1 -e "SELECT * FROM test.sbtest where id=10000001"; -- ERROR 1429 (HY000): Unable to connect to foreign data source: backend1_rpl spider1 -e "SELECT * from mysql.spider_tables order by link_id, server"; cd /usr1/mysql/sandboxes/data_node/node1 && ./start spider1 -e "SELECT * FROM test.sbtest where id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ ⑨ ⑩ 4 42 2
  • 40. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl -- Data Node Replica 모니터링 등록 spider1 << EOF DROP TABLE IF EXISTS test.sbtest; CREATE TABLE test.sbtest ( id int unsigned NOT NULL AUTO_INCREMENT … ) ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"' PARTITION BY KEY (id) ( PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "0 0"' , PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 0"' ); CREATE SERVER mon FOREIGN DATA WRAPPER mysql OPTIONS ( HOST '127.0.0.1', DATABASE 'test', … , PORT 3306); INSERT INTO mysql.spider_link_mon_servers VALUES ('%','%','%',1,'mon‘ ,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL); SELECT * FROM mysql.spider_link_mon_servers; SELECT spider_flush_table_mon_cache(); EOF HA 모니터링을 관장할 서버의 @@Service_ID - Spider_Node : 1, 2 - Data_Node : 101, 102 Node Status 1 : 정상, 3 : 중지 2 : 관리 작업 중 @@server_id = 1 @@server_id = 101 @@server_id = 102 ⑪
  • 41. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl spider1 -e "SELECT * FROM test.sbtest where id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ cd /usr1/mysql/sandboxes/data_node/node1 && ./stop backend1 -e "SELECT * FROM backend.sbtest where id=10000001" -- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql_sandbox10001.sock' spider1 -e "SELECT * FROM test.sbtest where id=10000001"; +----------+---+---+---------------+ | id | k | c | pad | +----------+---+---+---------------+ | 10000001 | 0 | | replicas test | +----------+---+---+---------------+ spider1 -e "SELECT * from mysql.spider_tables order by link_id, server"; +---------+--------------+--------------+-------------+ | link_id | server | table_name | link_status | +---------+--------------+--------------+-------------+ | 0 | backend1 | sbtest#P#pt1 | 3 | | 1 | backend1_rpl | sbtest#P#pt2 | 3 | | 0 | backend2 | sbtest#P#pt2 | 1 | | 1 | backend2_rpl | sbtest#P#pt1 | 1 | +---------+--------------+--------------+-------------+ 데이터 조회는 되었지만, 실제는 fail 상태로 존재함 ⑫
  • 42. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl cd /usr1/mysql/sandboxes/data_node/node1 && ./start spider1 << EOF select * from mysql.spider_tables order by link_id, server, table_name; -- link status 변경 : fail -> maintenance ALTER TABLE test.sbtest ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"' PARTITION BY KEY (id) ( PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "2 0"' , PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 2"' ); select * from mysql.spider_tables order by link_id, server, table_name; +---------+--------------+--------------+-------------+ | link_id | server | table_name | link_status | +---------+--------------+--------------+-------------+ | 0 | backend1 | sbtest#P#pt1 | 2 | | 1 | backend1_rpl | sbtest#P#pt2 | 2 | | 0 | backend2 | sbtest#P#pt2 | 1 | | 1 | backend2_rpl | sbtest#P#pt1 | 1 | +---------+--------------+--------------+-------------+ ⑬
  • 43. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl select * from mysql.spider_tables order by link_id, server, table_name; +---------+--------------+--------------+-------------+ | link_id | server | table_name | link_status | +---------+--------------+--------------+-------------+ | 0 | backend1 | sbtest#P#pt1 | 2 | | 1 | backend1_rpl | sbtest#P#pt2 | 2 | | 0 | backend2 | sbtest#P#pt2 | 1 | | 1 | backend2_rpl | sbtest#P#pt1 | 1 | +---------+--------------+--------------+-------------+ select spider_copy_tables('test.sbtest#P#pt1','1','0'); -- 1 select spider_copy_tables('test.sbtest#P#pt2','0','1'); -- 1 ⑭
  • 44. café.naver.com/mysqlpg Architecture ■ High Availability What is happening if we stop one backend? Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl -- link status 변경 : maintenance -> live ALTER TABLE test.sbtest ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"' PARTITION BY KEY (id) ( PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl", mbk "2", mkd "2", msi "1", link_status "1 0"' , PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl", mbk "2", mkd "2", msi "1", link_status "0 1"' ); select * from mysql.spider_tables order by link_id, server, table_name; +---------+--------------+--------------+-------------+ | link_id | server | table_name | link_status | +---------+--------------+--------------+-------------+ | 0 | backend1 | sbtest#P#pt1 | 1 | | 1 | backend1_rpl | sbtest#P#pt2 | 1 | | 0 | backend2 | sbtest#P#pt2 | 1 | | 1 | backend2_rpl | sbtest#P#pt1 | 1 | +---------+--------------+--------------+-------------+ ⑮
  • 45. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ back1 back1_rpl back2 back2_rpl spider1 << EOF insert into test.sbtest values (1, 100, 'A', 'A1'); insert into test.sbtest values (2, 200, 'A', 'A1'); insert into test.sbtest values (3, 300, 'A', 'A1'); insert into test.sbtest values (4, 400, 'A', 'A1'); insert into test.sbtest values (5, 500, 'A', 'A1'); EOF backend1 -e "select (select count(*) from backend.sbtest) as cnt1 , (select count(*) from backend_rpl.sbtest) as cnt2" +------+------+ | cnt1 | cnt2 | +------+------+ | 4 | 2 | +------+------+ backend2 -e "select (select count(*) from backend.sbtest) as cnt1 , (select count(*) from backend_rpl.sbtest) as cnt2" +------+------+ | cnt1 | cnt2 | +------+------+ | 2 | 4 | +------+------+
  • 46. café.naver.com/mysqlpg Architecture ■ High Availability Reference : https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/ select link_id, server, table_name, link_status from mysql.spider_tables order by link_id, server, table_name
  • 49. café.naver.com/mysqlpg  Spider Setup  Architecture  Topology Agenda
  • 51. café.naver.com/mysqlpg Topology FrontDB Master1 Slave1 Master2 Slave2 Master3 Slave3 Master1 Slave1 Master2 Slave2 Master3 Slave3 CollectDB (ETL)
  • 52. café.naver.com/mysqlpg Topology Master1 Slave1 Master2 Slave2 Master3 Slave3 FrontDB1 FrontDB2 CollectDB1 (admintool) CollectDB2 (ETL)
  • 53. café.naver.com/mysqlpg Topology Master3 Master3a Master1 Master1a Master2 Master2a FrontDB1 FrontDB2 CollectDB FrontDB Master1 Slave1 Master2 Slave2 Master3 Slave3 Master1 Slave1 Master2 Slave2 Master3 Slave3 CollectDB (ETL) Master1 Slave1 Master2 Slave2 Master3 Slave3 FrontDB1 FrontDB2 CollectDB1 (admintool) CollectDB2 (ETL)
  • 54. café.naver.com/mysqlpg Topology FrontDB Master1 Slave1 Master2 Slave2 Master3 Slave3 Master1 Slave1 Master2 Slave2 Master3 Slave3 Master1 Slave1 Master2 Slave2 Master3 Slave3 FrontDB1 FrontDB2 Master1 Master1a Master2 MAster2a Master3 Master3a FrontDB1 FrontDB2 & CollectDB CollectDB (ETL) CollectDB1 (admintool) CollectDB2 (ETL) Master3 Master3a Master1 Master1a Master2 Master2a FrontDB1 FrontDB2
  • 55. café.naver.com/mysqlpg Topology FrontShard1 FrontShard2 Master1 Master1a Master2 MAster2a Spec : 12Core / 32GB  Spider : 1GB  Data1 : 6GB  Data2 : 6GB  DB Connection 수에 주의 !!! Dev, QA Live 1단계 FrontShard1 FrontShard2 Master1 Master1a Master2 MAster2a DB 부하 및 서비스 오픈 전략에 맞춰 서버 배치 진행 Live 2단계