Percona Xtradb 이용한 MySQL클러스터

Percona Xtradb 이용한 MySQL클러스터

Percona는 MySQL에서 근무하던 엔지니어 몇 명이 설립한 MYSQL 개발 및 컨설팅 회사입니다. Percona Xtradb는 mysql 엔진인 innodb에 Galera패치 등을 적용한 DB엔진입니다. Percona를 이용해서 클러스터를 구축하게 된 이유는 MariaDB보다 먼저 Galera를 포함한 패키지를 배포했기 때문입니다.

Percoan Xtradb Cluster는 Active/active의 고가용성을 지원하는 솔루션이며 클러스터를 구축하기 위한 핵심 기술인 Codership Galera 라이브러리를 포함하고 있습니다. percona XtraDB 클러스터의 기능 중 가장 중요한 기능은 Multi-master replication 및 Synchronous replication 지원한다는 것입니다.

그럼 percona를 이용한 클러스터의 설치 방법 및 동작방식에 대해서 설명을 드리도록 하겠습니다.

Percona의 동작방식을 이해하기 위해선 Galera 클러스터에 대한 이해가 필요합니다.

http://galeracluster.com/에서 제공되는 오픈소스로 Synchronous replication를 지원하는데, Synchronous replication를 지원하기 위해서는 Galera cluster Architecture에 대한 이해가 필요하며, Galera는 아래의 그림처럼 Certification Based Replication방식으로 동기화 처리를 합니다.

 7참고) http://galeracluster.com/documentation-webpages/galera-documentation.pdf

Certification Based Replication은 트랜잭션을 지원하는 innodb기반에서만 지원을 하는 모델이며, 트랜잭션이 실행이 되면 클러스터에 참여하고 있는 다른 노드에 해당 트랜잭션(Global trx ID)의 처리 가능여부 확인 후 각 노도에 동시에 처리되는 모델입니다.

Percona Xtradb 이용한 Cluster 설치하기.

클러스터를 구성하기 위해서는 서버3대를 기본으로 추전하며 각각의 노도의 Host설정을 다음과 같이 합니다.

node #1

hostname: percona1

IP: 192.168.20.234

node #2

hostname: percona2

IP: 192.168.20.235

node #3

hostname: percona3

IP: 192.168.20.236

설치 전 필요조건은 기본적으로 CentOS6.x버전 설치, 방화벽에서 3306,4444,4567,4568을 오픈하고, SELinux는 disable시키는 것입니다.

설치방법은 RPM기준이며 Centos의 yum repository를 등록합니다.

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Percona-XtraDB-Cluster-56설치

yum install Percona-XtraDB-Cluster-56

node별 설정

node1의 my.cnf

[mysqld]

datadir=/var/lib/mysql

user=mysql

# Path to Galera library

wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3

wsrep_cluster_address=gcomm://192.168.20.234,192.168.20.235,192.168.20.236

# In order for Galera to work correctly binlog format should be ROW

binlog_format=ROW

# MyISAM storage engine has only experimental support

default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

innodb_autoinc_lock_mode=2

# Node #1 address

wsrep_node_address=192.168.20.234

# SST method

wsrep_sst_method=xtrabackup-v2

# Cluster name

wsrep_cluster_name=my_centos_cluster

# Authentication for SST method

wsrep_sst_auth=”sstuser:s3cret”

node1 mysql start시 bootstrap-pxc옵션으로 Cluster를 시작

[root@percona1 ~]# /etc/init.d/mysql bootstrap-pxc

아래의 명령으로 cluster가 정상적으로 start되었는지 확인이 가능합니다.

mysql> show status like ‘wsrep%’;

+—————————-+————————————–+

| Variable_name              | Value                                                  |

+—————————-+————————————–+

| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |

| wsrep_local_state          | 4                                                        |

| wsrep_local_state_comment  | Synced                                  |

| wsrep_cluster_size         | 1                                                        |

| wsrep_cluster_status       | Primary                                         |

| wsrep_connected            | ON                                                    |

| wsrep_ready                | ON                                                         |

+—————————-+————————————–+

Percoan Cluster의 경우 State Snapshot Transfer(SST)를 지원합니다. 즉 node간 데이터 불일치가 발생하는 경우 서로간 sync를 하기 위한 도구를 지원하는데 이를 위한 계정을 생성해야 합니다.

mysql@percona1> CREATE USER ‘sstuser’@’localhost’ IDENTIFIED BY ‘s3cret’;

mysql@percona1> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘sstuser’@’localhost’;

mysql@percona1> FLUSH PRIVILEGES;

node2 , node3 의 설정(해당 IP설정만 각각 다름)

[mysqld]

datadir=/var/lib/mysql

user=mysql

# Path to Galera library

wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3

wsrep_cluster_address=gcomm://192.168.20.234,192.168.20.235,192.168.20.236

# In order for Galera to work correctly binlog format should be ROW

binlog_format=ROW

# MyISAM storage engine has only experimental support

default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

innodb_autoinc_lock_mode=2

# Node #2 address

wsrep_node_address=192.168.20.235

# Cluster name

wsrep_cluster_name=my_centos_cluster

# SST method

wsrep_sst_method=xtrabackup-v2

#Authentication for SST method

wsrep_sst_auth=”sstuser:s3cret”

node2 , node3 의 mysql start

[root@percona2 ~]# /etc/init.d/mysql start

[root@percona3 ~]# /etc/init.d/mysql start

Node1 , node2 , node3 모두 정상적으로 start가 되면 아래와 같은 정보가 확인됩니다.

show status like ‘wsrep%’;

| wsrep_local_state                        | 4

| wsrep_local_state_comment    | Synced

| wsrep_cert_index_size               | 8

| wsrep_cert_bucket_count         | 1752

| wsrep_gcache_pool_size           | 205253

| wsrep_causal_reads                    | 0

| wsrep_cert_interval                    | 0.000000

| wsrep_incoming_addresses      | 192.168.20.234:3306,192.168.20.235:3306,192.168.20.236:3306

| wsrep_evs_delayed                    | e0f7c8af-b9b4-11e5-abf4-de445764f39f:tcp://192.168.20.236:4567:1 |

| wsrep_evs_evict_list                 |

| wsrep_evs_repl_latency           | 0/0/0/0/0

| wsrep_evs_state                         | OPERATIONAL

| wsrep_gcomm_uuid                 | 3f1bad43-b99f-11e5-a4d4-568b56afefef

| wsrep_cluster_conf_id           | 11

| wsrep_cluster_size                  | 3

| wsrep_cluster_state_uuid     | e6819dce-af5b-11e5-9568-9f48b7ed2555

| 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 <info@codership.com>                               |

| wsrep_provider_version       | 3.12.2(rf3e626d)

| wsrep_ready                            | ON

간단 테스트(node1)

mysql> CREATE DATABASE percona;

Query OK, 1 row affected (0.01 sec)

mysql> use percona;

mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

mysql> INSERT INTO percona.example VALUES (1, ‘percona1’);

Query OK, 1 row affected (0.00 sec)

mysql> select * from percona.example ;

+———+———–+

| node_id | node_name |

+———+———–+

|       1 | percona1  |

+———+———–+

1 row in set (0.00 sec)

Node2의 DB에서 Node1에서 생성한 DB 및 table의 정보를 확인하실 수 있습니다.

mysql>

mysql>

mysql> use percona ;

Database changed

mysql> show tables ;

+——————-+

| Tables_in_percona |

+——————-+

| example           |

+——————-+

1 row in set (0.00 sec)

mysql> select * from example ;

+———+———–+

| node_id | node_name |

+———+———–+

|       1 | percona1  |

+———+———–+

1 row in set (0.00 sec)

mysql>

여기까지 percoan Xtradb를 이용한 클러스터 구축 간단 설치 방법이었습니다.

<참고문서>

https://www.percona.com/doc/percona-xtradb-cluster/5.6/howtos/centos_howto.html

https://www.percona.com/doc/percona-xtradb-cluster/5.6/installation/yum_repo.html