109
2016년 JavaCafe 강사준비팀 3기 Keynote MariaDB 서버 구축 개발자가 도전하는

개발자가 도전하는 MariaDB 서버구축

  • Upload
    -

  • View
    5.238

  • Download
    10

Embed Size (px)

Citation preview

Page 1: 개발자가 도전하는 MariaDB 서버구축

2016년��JavaCafe��강사준비팀�3기

Keynote

MariaDB 서버 구축개발자가 도전하는

Page 2: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. 도전! MariaDB 설치2. Storage Engine의 결정3. Master Slave 구조4. MariaDB High Available5. Galera Cluster

Page 3: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

INTRO

Page 4: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 신규 DBMS(Database Management System) 도입.

Page 5: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 신규 DBMS의 Spec

미안합니다. Full Stack 개발자는 모두 해내야 합니다.

Page 6: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 신규 DBMS의 Spec

1. Open Source DBMS - 공짜 중요.

3. 동시 접속자 100명 이상.

4. 동시접속 제어 가능해야 함.

5. 트랜잭션 지원.

6. Commit, Rollback등이 가능해야 함.

7. 장애 대비 High Available(고가용성) 서버 준비.

Page 7: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 신규 DBMS의 Spec

Page 8: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. 도전! MariaDB 설치

Page 9: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - MaraiDB의 특징

1. Storage Engine마다 용도를 다양하게 쓸 수 있음.

2. 기존 MySQL대비 많은 성능이 개선됨

3. 상용 DBMS(Oracle, DB2, MS-SQL등)대비 못지않는 많은 기능들을 제공함.

4. 클러스터링 기능을 제공함

5. 버그와 성능을 꾸준히 개선시키고 있음.

6. MariaDB를 도입한 기업들 Facebook, Twitter, Wikipedia 그리고 국내에는 Kakao, 티켓몬스터가 있고, 부광약품에서 ERP를 Oracle이나 MSSQL이 아닌 MariaDB로 구축

https://mariadb.com/kb/ko/mariadb-vs-mysql-features/

Page 10: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치

▪ 주소 : https://mariadb.org/

Page 11: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치

▪ 주소 : https://mariadb.org/

Page 12: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Windows 설치

▪ 다운로드

Page 13: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 14: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 15: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

Check클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 16: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 17: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

UTF-8로 사용시 클릭

root 암호 입력

원격 접속 허용시 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 18: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

기본설정

버퍼풀 설정

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 19: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Next 클릭

MariaDB에 피드백 전송시 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 20: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Install 클릭

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 21: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치진행

Page 22: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치완료

Page 23: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

MariaDB를 실행시킬 수 있는 CMD

MariaDB Client

■ 도전! MariaDB 설치 - Windows 설치

▪ 설치 후 화면

Page 24: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

암호입력

생성된 Database 보기

■ 도전! MariaDB 설치 - Windows 설치

▪ 로그인 및 Database화면 보기

Page 25: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

위에서 설정한 서비스 이름 등록됨.

■ 도전! MariaDB 설치 - Windows 설치

▪ 서비스 이름 확인

Page 26: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 주소 : https://mariadb.org/

Page 27: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 다운로드 위치

Page 28: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 다운로드 위치

Page 29: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 다운로드 항목

Page 30: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 다운로드 해야 할 파일 리스트

MariaDB-10.1.9-centos6-x86_64-client.rpm MariaDB-10.1.9-centos6-x86_64-common.rpm MariaDB-10.1.9-centos6-x86_64-compat.rpm MariaDB-10.1.9-centos6-x86_64-devel.rpm MariaDB-10.1.9-centos6-x86_64-server.rpm MariaDB-10.1.9-centos6-x86_64-test.rpm galera-25.3.9-1.rhel6.el6.x86_64.rpm jemalloc-3.6.0-1.el6.x86_64.rpm jemalloc-devel-3.6.0-1.el6.x86_64.rpm

Page 31: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

▪ 설치전 OS에 설치되어야 하는 필요 패키지 및 USER와 Group

1. 필요패키지perl-Time-HiResperl-DBIncnmap

3. User 및 Groupgroup : mysqluser : mysql

Page 32: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB]# rpm -ivh galera* [root@mdb01 MariaDB]# rpm -ivh jemalloc* [root@mdb01 MariaDB]# rpm -ivh MariaDB*

▪ 설치 방법

Page 33: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB] # /etc/init.d/mysql start [root@mdb01 MariaDB] # /usr/bin/mysqladmin -u root password ‘암호’ [root@mdb01 MariaDB] # mysql -uroot -p암호

▪ 기초 환경 설정 - MariaDB 시작 및 root 암호 설정

Page 34: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB] # mysql -uroot -p’mariadb!’

▪ 기초 환경 설정 - 로그인

Page 35: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB] # create database REPLICATION; [root@mdb01 MariaDB] # show databases;

▪ 기초 환경 설정 - Database 생성

Page 36: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB] # use REPLICATION [root@mdb01 MariaDB] # create table TAB1(SNO int, NAME char(10)) ENGINE=InnoDB; [root@mdb01 MariaDB] # show tables;

▪ 기초 환경 설정 - Table 생성 테스트

Page 37: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

[root@mdb01 MariaDB] # insert into TAB1 values(1,'mihoke');

▪ 기초 환경 설정 - Insert 테스트

Page 38: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 도전! MariaDB 설치 - Linux 설치

Page 39: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

2. Storage engine 결정

Page 40: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Storage Engine의 결정

1. 이래저래 해서 신규로 DBMS를 구축했습니다. 사용자들에게 IP를 알려주고 접속정보를 알려주었습니다.

2. 그런데 사용자가 늘어날수록 DBMS에 먼가 문제가 생기는것 같습니다. 사용자가 늘어날수록 Query 실행시 응답속도가 느려지고 있습니다.

3. 설상 가상으로 트랜잭션 유실이 발생합니다.

4. 어서 장애를 인식하고 문제를 해결해야 합니다.

Page 41: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

정답은 Storage Engine의 이해 부족. MariaDB는 Storage Engine의 특성을 이해하여야 한다.

■ Storage Engine의 결정

Page 42: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

▪ Storage 엔진 설명

1. 이전에 MySQL[버전 5.0 이하]의 기본 스토리지 엔진은 MyISAM이라는 Storage Engine이 기본이었습니다.

2. 위에서 얘기한 장애 현상은 MyISAM이란 Storage engine의 특성입니다.

3. 그래서 그만큼 Storage Engine의 선택이 중요합니다.

4. Storage엔진은 어떤것들이 있는지 알아보고 적합한 Storage Enigne을 선택해 보도록 하겠습니다.

■ Storage Engine의 결정

Page 43: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

▪ Storage 엔진 - 사전지식 [Object Lock]

순위 가수 노래제목 트랙

1 빅뱅 히트곡1 4

2 AOA 히트곡2 2

3 EXID 히트곡3 8

4 카라 히트곡3 3

5 소녀시대 히트곡4 6

6 FX 히트곡5 2

7 다비치 히트곡6 1

테이블 Lock

ROW Lock

■ Storage Engine의 결정

Page 44: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - MyISAM(Aria)

1. Table 단위의 Lock이 걸려 동시성이 현저히 낮음.

2. 테이블의 데이터는 OS에 있는 File로 된 테이블에 직접적으로 쓰게 됨.

3. 따라서 OS의 Filesystem에 대해 종속됨.

Page 45: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - TokuDB

1. Percona라는 단체에서 개발중.

2. B-Tree Index의 단점을 보완한 프렉탈 트리(Fractal Tree)인덱스를 지원함.

3. 인덱스에 새로운 레코드를 추가하는 작업이 상당히 빠름. 예를 들어 10억건의 레코드가 B-Tree 대비 Fractal Tree는1,000배 빠름.

4. 압축을 해서 저장하기 때문에 디스크 절약도 가능.

Page 46: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - Memory

1. Heap 스토리지 엔진이라고도 함.

2. 데이터의 크기가 작고 아주 빠른 처리가 필요한 경우 적합함.

3. MEMORY 엔진도 Table 단위의 Lock만 지원.

4. 고정길이 칼럼만 지원되며 LOB타입 지원 안됨.

5. 주요 사용 용도는 임시 테이블로 많이 사용됨.

Page 47: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - InnoDB(XtraDB)

Page 48: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - InnoDB(XtraDB)

Buffer Pool

Prefetcher, Cleaner Table Space

Disk

읽기

쓰기Prefetcher : 읽기에 사용되는 DBMS I/O

Cleaner : 쓰기에 사용되는 DBMS I/O

Client

Query

MariaDB Engine

Page 49: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Storage 엔진 소개 - InnoDB(XtraDB)

1. 프라이머리 키에 의한 클러스터링 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장.

2. 잠금이 필요 없는 일관된 읽기(Non-locking consistent read) MVCC라는 기술을 이용해 락을 걸지 않고 읽기 작업을 수행(Undo 활용)

3. 외래 키 지원 4. 자동 데드락 감지 5. 자동화된 장애 복구 6. 오라클의 아키텍처 적용

Oracle DBMS와 비슷한 부분이 많다.(UNDO, SYSTEM TBS, TBS 등)

Page 50: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB Architecture 소개

Engine

Storage

Hardware

Page 51: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MyISAM(Aria) 트랜잭션이 작고 이용자가 별로 없다면 MyISAM 백업이 쉽다. - Mariadb 서버를 내리고 파일을 그대로 복사하면 백업 완료. 물론 mysqldump를 이용한 Backup 가능. 또한 내부적으로 대량 정렬때 이 Storage Engine이 사용됨.

■ InnoDB(XtraDB) - 기본 Default!!!!!!! Oracle에서 Engine 단위에서 지원되는 대부분의 기능을 지원한다. MVCC를 이용한 특성 때분에 대부분 이 Storage Engine으로 Table을 생성한다. OLTP서버(대표적으로 Web용 Database)로 이용된다.

■ 결론 - 어떤 Storage Engine 을 사용할 것인가?

Page 52: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 결론 - 어떤 Storage Engine 을 사용할 것인가?

■ Memory Memory Storage는 메모리를 이용한 Storage로 임시 테이블이나 고속의 속도를 요구할 때 쓰이는 Storage Engine이다. 그러나 Memory Storage에서 알 수 있듯이 직접 물리 메모리를 할당하는 Engine으로서 MariaDB 서버가 내려가거나 서버 Rebooting시 소멸된다. 내부적으로 일정량의 정렬이 일어날시 임시적으로 사용되기도 함.

■ TokuDB SNS기반의 대용량 테이블, 실시간 웹페이지 분석, 웹서버나 게임 서버의 로그분석 고성능 웹 클롤링, Datawarehouse같은 곳에 이용하면 좋다.

Page 53: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

3. 부하를 분산시켜라!!!!Master - Slave 구조

Page 54: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

1. 사업이 잘되어 신규 부서가 생기고 신규 업무가 점점 늘어나고 있습니다. 데이터가 점점 쌓이고 시스템 부하가 높아지고 있습니다.

2. 주서버가 장애가 생길때를 대비해 여유서버를 만들어 두기는 했는데 이 서버를 이용해서 부하 분산을 시도해 야 할 것 같습니다.

3. 여유 서버를 활용할 방법을 알아봅니다.

Page 55: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

Insert Update Delete

Select

■ Master - Slave 구조

▪ 기초 환경 설정

Page 56: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. Master - Slave구조를 다른 말로 복제기술이라고 합니다. Master의 데이터를 Slave에 똑같이 복제하기 때문입니다.

2. 복제를 이용하기 위해선 다음과 같은 선제조건이 충족되어야 합니다.

3. 트랜잭션 지원, Lock 지원이 필수 기본 Storage Engine 중 TokuDB, InnoDB, MyISAM Storage가 지원됨.

■ Master - Slave 구조

▪ 기초 환경 설정

Page 57: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. 앞에서 배웠던 내용을 토대로 MariaDB 서버를 한대 더 준비합니다.

2. Master DB를 백업 후 Slave서버에 Restore합니다.

3. Master가 될 서버에 slave가 사용할 User 하나를 추가합니다. 이 계정을 이용해서 Master서버의 DML내용을 Slave서버로 복제합니다.

■ Master - Slave 구조

▪ 기초 환경 설정 - 순서

Page 58: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ MariaDB 서버 환경설정

Master Slave

Server-id = 1 log-bin = master_1_bin sync_binlog = 5M max_binlog_size = 512M log-bin-trust-function-creators = 1

server-id = 2 relay-log = slave_1_bin relay_log_purge = TRUE read_only

- /etc/my.cnf.d/server.cnf 환경파일 설정- [mysqld] 라는 섹션에 추가해 줍니다.

Page 59: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ MariaDB 서버 환경설정

- /etc/my.cnf.d/server.cnf 환경파일 설정 - [mysqld] 라는 섹션에 추가해 줍니다.

Page 60: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. Master 서버 - Database 백업 [root@mdb01 MariaDB] # mysqldump -uroot -p암호 hadb > DB이름.sql

2. Slave 서버 - 위에서 백업한 Database dump를 슬레이브로 가져옴. - 데이터 베이스 생성 mysql> create database hadb - Database dump를 Import [root@mdb01 MariaDB] # mysql -uroot -p암호 hadb < DB이름.sql

■ Master - Slave 구조

▪ Database Backup & Restore

Page 61: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

1. Master 서버에서 실행

2. User 추가 및 권한 설정 Master 서버에서 설정 mysql> create user 'repl_user'@'%' identified by 'slavepass'; mysql> grant replication slave on *.* to ‘repl_user'@'%';

3. 현제 Log Position 확인 show master status\G; 현제 Log File 이름 및 Log Position 확인.

■ Master - Slave 구조

▪ 복제용 계정 설정 및 Master Log Position 확인

Page 62: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 복제 서버 설정

1. Slave 서버에서 설정

2. 복제 환경 설정 mysql> change master to master_host='192.168.0.100', master_user='repl_user', master_password='templer', master_port=3306, master_log_file='master_1_bin.00005', master_log_pos=247883551;

Page 63: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 복제 서버 설정

1. Slave 서버에서 확인

2. 복제 준비가 되었는지 확인 mysql > show slave status\G; ...... Slave_IO_Running: No Slave_SQL_Running: No ...... Seconds_Behind_Master: NULL ......

Page 64: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 복제 서버 설정

Page 65: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 기초 환경 설정

1. Slave에서 복제 기동

2. 복제가 활성화 되었는지 확인 mysql > start slave; mysql > show slave status\G; ...... Slave_IO_Running: YES Slave_SQL_Running: YES ...... Seconds_Behind_Master: 238 ......

Page 66: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 복제 서버 설정

Page 67: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 초간단 모니터링

1. Slave 서버에서 실행

2. 모니터링 중점사항 mysql > start slave; mysql > show slave status\G; ...... Slave_IO_Running: YES Slave_SQL_Running: YES ...... Seconds_Behind_Master: 238 ……

3. 항상 Slave_IO, SQL Running이 Yes여야 하며, Seconds_Behind_Master가 0에 가까워야 한다. Seconds_Behind_Master가 숫자가 떨어지지 않고 오히려 올라간다면 IO나 SQL혹은 기타 문제이므로 에러로그나 기타 문제를 체크해봐야 한다.

Page 68: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Master - Slave 구조

▪ 실습

1. Benchmark SQL을 이용한 부하 데모 2. Master 혹은 Slave 서버가 죽은 가정을 하여 복구 실습

Page 69: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ 좀더 진화된 Master - Slave

Master DB 1개, 여러개의 Slave로 복제하는 방법. SQL의 대부분은 조회성 데이터이기 때문에 Slave를 여러개 두어 부하를 분산시킨다.

▪ Multi Slave

Page 70: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

4. 자동화 툴MariaDB High Available

Page 71: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

1. 친구 혹은 지인들과 회식자리중 서버가 문제가 생겼습니다. 자리를 파하고 회사로 출근을 합니다.

3. 로그번호와 포지션을 확인하고 복구를 합니다.

5. 만약 이게 자동화로 되어있으면 편할텐데라는 상각을 해보게됩니다. 자동화로 되어있으면 자동으로 복구가 되고 서비스는 계속 수행이 가능할텐데요.

7. 보시는바와같이 master-slave 구조는 자동으로 복구가 되지 않아 사람의 손이 필요합니다. 자동으로 복구되는 시스템을 알아봐야 하겠습니다.

8. MHA(MariaDB[MySQL] High Available)

Page 72: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ 기본개념

1. Master - Slave 상황에서 운영중 만약 Master 서버가 장애를 일으키면 Slave서버중 한개를 Master로 승격시켜 DML을 받을 수 있도록 무중단 서비스를 하는것이 바로 MHA[MariaDB High Available]의 기능입니다.

2. Slave서버가 장애가 난다면 기존 슬레이브 서버들이 2-3개 이상 있으므로 운영하는데 문제는 없습니다.

Page 73: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ 구성환경

Master

Slave 1 Slave 2

Manager

Page 74: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ 구성환경 - 서버 환경

Master Slave 1 Slave 2 Manager

IP 192.168.0.100 192.168.0.110 192.168.0.120 192.168.0.130

HOSTNAME mdb01 sdb01 sdb02 manager

Role Master Slave 1번 Slave 2번 HA 서버

Page 75: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ OS 기초 환경 설정

1. MHA를 설치하기 전에 OS에 한가지 설정을 해야 합니다. 그건 바로 SSH 설정입니다.

2. 서버끼리 암호없이 로그인이 가능하도록 만들어야 합니다. 그것을 전문용어로 Trust되었다고 합니다.

Page 76: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ SSH trust 설정 - 1

1. ssh-keygen ssh-keygen명령어로 개인키를 생성합니다. 위의 명령어 입력후 엔터키를 3번 입력하면 자동으로 만들어 집니다.

Page 77: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ SSH trust 설정 - 2

2. ssh-copy-id [email protected] ssh-copy-id 명령어로 개인키 복사를 시도하면 접속을 계속 시도하겠냐고 물어봅니다. yes를 입력해주면 서버의 암호를 물어보는데 암호를 입력해주면 복사를 하게 됩니다. 위와같은 방법으로 자신 서버 이외에 모든 서버에 복사해 줍니다.

Page 78: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ SSH trust 설정 - 3

3. ssh [email protected] ssh 명령어로 원격 로그인을 각 서버에 시도해 봅니다. 암호를 물어보지 않고 바로 로그인이 된다면 trust된 것입니다.

Page 79: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MariaDB 추가 환경 설정

1. Slave 서버의 server.cnf 에 다음 사항을 추가해 줍니다. vi /etc/my.cnf.d/server.cnf log-bin = master_1_bin relay_log_purge=0

Page 80: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

▪ MHA 설치 및 환경구성

■ MariaDB High Available

1. Download https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2

2. 다음의 파일들을 다운로드 받습니다.

Page 81: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 설치 및 환경구성

1. 필요패키지 perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

Page 82: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 설치 및 환경구성

2. MHA 설치 Manager Node rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

Master, Slave Node rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

Manager node는 Manager, Node rpm 두개를 설치하고 이외 다른 노드는 node rpm만 설치합니다.

Page 83: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 설치 및 환경구성

3. 공통 디렉토리 생성 mkdir /var/log/masterha

4. Configuration File 설정 Manager 서버에만 설정한다. /etc/MHA/MHA.cnf 파일로 만들고 안에 다음과 같이 입력

Page 84: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 환경 테스트

1. ssh 테스트 masterha_check_ssh --conf=/etc/MHA/MHA.cnf

Page 85: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 환경 테스트

2. Master - Slave 복제 테스트 masterha_check_repl --conf=/etc/MHA/MHA.cnf

Page 86: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 환경 테스트

3. MHA 데몬 실행 nohup masterha_manager --conf=/etc/MHA/MHA.cnf < /dev/null > /var/log/masterha/manager.log 2>&1 &

4. MHA 상태 확인 nohup masterha_check_status --conf=/etc/MHA/MHA.cnf

Page 87: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ MariaDB High Available

▪ MHA 테스트

1. 장애 상황 발생 Master Server Fail 인위적으로 Master Server의 MariaDB 프로세스 종료

2. MHA Log 확인

3. Slave Server의 Master 승격 여부 확인. Master Server 에서 다음의 명령어를 입력 show master status\G;

Page 88: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

▪ MMM - Multi Master Replication Manager for MySQL[MariaDB]

■ MariaDB High Available

Page 89: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

5. 고급진 기술Galera Cluster

Page 90: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ DBMS 문제 발생.

1. Master - Slave 구조 한가지 구조적인 문제가 있습니다.

2. Master Server에서 입력된 DML이 Slave서버에 실시간으로 반영이 지연될 수 있습니다.

3. 이 지연시간을 예방할 수 있는 있는 방법이 있습니다

Page 91: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ DBMS 문제 발생.

Page 92: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ DBMS 문제 발생.

▪ 클러스터링이란???

가용할 수 있는 여러대의 서버를 가지고 있거나 인스턴스를 가지고 있는 하나의 데이터 베이스다.

인스턴스란 하나의 데이터베이스에서 서로 상호작용하는 메모리와 프로세스의 집합체이다. 이것은 실질적으로 저장되어 있는 하나의 물리적 데이터 집합체이다.

Page 93: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

여러대의 서버중에서 한두대가 장애가 일어나더라도 마찬가지로 계속적인 서비스가 가능하다.

서버간 실시간 동기화가 되기 때문에 여러대의 서버중 어떤 서버에서 접속을 하던 같은 데이터를 입력 및 조회를 할수가 있다.

■ DBMS 문제 발생.

▪ 클러스터링이란???

Page 94: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

1. 설치 서버 환경 OS : CentOS 6.5 MaraiDB : 10.1.9 IP : 1번 노드 - 192.168.0.100 2번 노드 - 192.168.0.110 3번 노드 - 192.168.0.120

Page 95: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

2. MariaDB 및 서버 준비사항 1장에서 배운 MariaDB서버 설치 방법을 참고 3대에 모두 설치한다.

3대 모두 MariaDB 서버가 정상적으로 시작되고 종료되는지 체크한다. /etc/init.d/mysql start /etc/init.d/mysql stop

MariaDB를 기동하여 3대서버에 모두 다음과 같은 계정을 추가해준다. grant all privileges on *.* to 'root'@'192.168.0.100' identified by 'templer'; grant all privileges on *.* to 'root'@'192.168.0.110' identified by 'templer'; grant all privileges on *.* to 'root'@'192.168.0.120' identified by ‘templer';

모든 환경설정이 끝났으면 MariaDB를 모두 종료한다. /etc/init.d/mysql stop

모든 방화벽을 풀고 Selinux를 Disabled 시킨다. /etc/init.d/iptables stop setenforce 0

Page 96: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

3. 1번 Node 편집 /etc/my.cnf.d/server.cnf

Page 97: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

4. 2번 Node 편집 /etc/my.cnf.d/server.cnf

Page 98: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

5. 3번 Node 편집 /etc/my.cnf.d/server.cnf

Page 99: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 환경설정

6. 편집시 유의사항 모든Node의 모든 파라미터는 위의 모든 내용이 기본적으로 있어야 한다.

bind-address는 해당 Node의 IP를 입력한다.

wsrep_sst_receive_address는 해당 Node의 IP를 입력한다.

wsrep_sst_auth는 해당 Node의 MariaDB 계정과 암호를 입력한다.

Page 100: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

1. 기동순서 : 1번 Node 1번 Node에 모든 데이터가 있다고 가정한다. 데이터를 보유하고 있는 Node를 다른말로 Donor Node라고 한다. Galera Cluster에서는 이 Donor Node를 제일 먼저 시작해야 한다. Donor Node란 뜻은 데이터 증여자로 Donor Node외 모든 Node는 이 Donor Node에서 최초 기동시 모든 데이터를 받는다.

1번 Node에서 /etc/my.cnf.d/server.cnf에서 wsrep_cluster_address를 다음과 같이 입력한다. wsrep_cluster_address=“gcomm://"

즉 아무런 IP도 입력하지 않고 기동한다. 최초 기동시는 어떠한 서버도 접속할 서버가 없기 때문에 IP가 빈 상태에서 서버를 기동한다.

Page 101: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

2. 기동순서 : 1번 Node 1번 Node를 시작한다. /etc/init.d/mysql start --wsrep-new-cluster

MariaDB 최초 기동시 위의 명령으로 기동한다. 처음 한번만 위와같이 입력하고 다음에 시작시 저 명령어를 입력하지 않는다. 만약 엉뚱한 노드에서 실행시 데이터가 모두 삭제될 위험이 있으니 반드시 Donor Node - 1번 Node에서 시작하여야 한다.

Page 102: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

3. 기동순서 : 1번 Node - 기동확인 MariaDB에 접속하여 다음 내용을 확인한다. mysql -uroot -ptempler : MariaDB 접속 mysql> show status where Variable_name like ‘%wsrep%'; … | wsrep_cluster_conf_id | 1 | wsrep_cluster_size | 1 … | wsrep_ready | ON | wsrep_incoming_addresses | 192.168.0.100:3306 …

Page 103: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

4. 기동순서 - 2번 Node 1번 Node에서 /etc/my.cnf.d/server.cnf에서 wsrep_cluster_address를 다음과 같이 입력한다. wsrep_cluster_address="gcomm://192.168.0.100"

gcomm에 1번 Node의 IP를 입력한다.

MariaDB기동한다. /etc/init.d/mysql start

Page 104: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

5. 기동순서 : 2번 Node - 기동확인 MariaDB에 접속하여 다음 내용을 확인한다. mysql -uroot -ptempler : MariaDB 접속 mysql> show status where Variable_name like ‘%wsrep%'; … | wsrep_cluster_conf_id | 2 | wsrep_cluster_size | 2 … | wsrep_ready | ON | wsrep_incoming_addresses | 192.168.0.110:3306,192.168.0.100:3306 …

Page 105: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

6. 기동순서 - 3번 Node 1번 Node에서 /etc/my.cnf.d/server.cnf에서 wsrep_cluster_address를 다음과 같이 입력한다. wsrep_cluster_address=“gcomm://192.168.0.110,192.168.0.120"

gcomm에 1,2번 Node의 IP를 입력한다.

MariaDB기동한다. /etc/init.d/mysql start

Page 106: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

7. 기동순서 : 3번 Node - 기동확인 MariaDB에 접속하여 다음 내용을 확인한다. mysql -uroot -ptempler : MariaDB 접속 mysql> show status where Variable_name like ‘%wsrep%'; … | wsrep_cluster_conf_id | 3 | wsrep_cluster_size | 3 … | wsrep_ready | ON | wsrep_incoming_addresses | 192.168.0.110:3306,192.168.0.120:3306,192.168.0.100:3306 …

Page 107: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 기동방법

8. 모든 Node 확인 각 Node의 MariaDB에 접속하여 다음 내용을 확인한다. mysql -uroot -ptempler : MariaDB 접속 mysql> show status where Variable_name like ‘%wsrep%'; … | wsrep_cluster_conf_id | 3 | wsrep_cluster_size | 3 … | wsrep_ready | ON | wsrep_incoming_addresses | 192.168.0.110:3306,192.168.0.120:3306,192.168.0.100:3306 …

즉 3번노드에서 확인것처럼 wsrep_incoming_address에 모든 Node의 IP가 표시된다.

Page 108: 개발자가 도전하는 MariaDB 서버구축

MariaDB�서버�구축하기

■ Galera Cluster

▪ Galera Cluster 테스트

1. Galera Cluster 테스트 하나의 Node에서 테이블을 생성해보고 모든 노드에 생성되는지 확인 하나의 Node에서 만들어진 테이블에 데이터를 넣어보고 모든 Node에 적용되는지 확인.

Page 109: 개발자가 도전하는 MariaDB 서버구축

궁금한점은�질문해주세요

강의가 끝났습니다

Keynote