MySQL Replication 이해(3) – 활용

Overview

MySQL Replication 시리즈 마지막 3탄, 활용에 관한 포스트입니다. 앞 선 시리즈 MySQL Replication 이해(1) – 개념MySQL Replication 이해(2) – 구성에서 기본적인 개념과 구성을 다뤘다면, 이 자리에서는 실제적으로 어떤 분야에 활용할 수 있는지 설명드리겠습니다.

  1. Scale Out
  2. High Availability
  3. Data Partitioning

자, 그럼 시작해볼까요?

Scale out

MySQL Replication이 가장 많이 활용되는 분야입니다.
MySQL Replication은 READ관련 Scale out만 가능합니다. 만약 WRITE 이슈가 있다면, MySQL 레벨에서는 Scale out이 불가합니다. 특히나 Replication 운영 시 마스터 트래픽이 과도하게 발생하면, Master와 Slave 간 데이터 동기화 지연 현상이 발생합니다. 반드시 알아야할 MySQL 특징 세 가지 내용을 읽어보시면 이해가 조금더 수훨하겠네요.^^

[Read More]

트위터의 새로운 분산 관리 라이브러리 Gizzard를 소개합니다.

Overview

바로 이전 하루 2.5억 트윗을 저장하는 트위터의 새로운 저장 스토어 포스팅에서 트위터의 새로운 저장 스토어에 관해서 전반적으로 설명 드렸는데요, 이번에는 그 중 Gizzard에 관해서 심층 분석(?)을 해볼까합니다.

Gizzard는 트위터에서 데이터를 분산 및 복제 관리하기 위한 자체 개발 프레임워크입니다. 클라이언트와 서버 사이에 위치하며 모든 데이터 요청을 처리하는 구조입니다. Gizzard 관련 몇 가지 키워드는 아래와 같습니다.

  1. 분산 관리(Sharding), 분할(Partitioning), 복제(Replication)
  2. 부하분산(Load-Balancing)
  3. 장애복구(Fail-Over)
  4. 멱등성(idempotent), 가환성(commutative)
    • 멱등성 : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
    • 가환성 : 연산의 순서를 바꾸어도 그 결과가 변하지 않는 일

분산 관리(Sharding)이란?

과거에는 서비스 성능 저하가 발생하면 곧바로 해당 서버에 CPU또는 Memory 사이즈를 증설하여 성능 이슈를 해결하였습니다. 하지만, 최근 Web 서비스에서 데이터 사이즈가 급증하여, 더 이상은 서버 성능 고도화만으로는 한계가 있기 때문에, 다수 장비에 데이터를 분산 위치(Data Sharding)하여 데이터를 처리하는 움직임이 일반화되고 있습니다.

[Read More]

하루 2.5억 트윗을 저장하는 트위터의 새로운 저장 스토어

Overview

트위터는 하루 평균 2.5억 건의 트윗을 저장한다고 합니다. 과거 트위터는 날짜 기준으로 데이터를 분할 관리하여 저장을 하였고, 대략 3주에 한번씩 서버를 추가하여 Scale-out 하였습니다.

하지만 이 방식에는 다음과 같은 문제가 있었습니다.

  1. 부하 분산
  2. 고비용
  3. 복잡한 프로세스

문제를 해결하기 위해서 트위터에서 New Tweet Store를 고안했다고 합니다.

자, 그럼 기존 문제점부터 차근차근 알아보도록 합시다^^;

Problems

  • 부하 분산(Load Balancing)
    날짜 기준으로 데이터를 나눠서 분산 저장 및 관리하기 때문에, 시간이 지날수록 과거 데이터 조회 건수는 비약적으로 낮아집니다. 특히 대부분의 데이터 조회 요청은 현재 시각 기준으로 들어오기 때문에, 데이터 읽기 HOTSPOT이 발생할 수 밖에 없습니다. Load Balancing Problem

    [Read More]

MySQL Replication 이해(2) – 구성

Overview

MySQL Replication 개념에 이어, 이번에는 실 구성에 관한 내용입니다.
각 서버 구성 방법은 리눅스에 MySQL 설치하기 편을 참고하시기 바랍니다.

시작에 앞서서 Server_id는 다른 숫자로 설정하세요^^.

Replication 구성은 다음 세 단계를 거쳐서 수행됩니다.

  1. DB 유저 생성
  2. DB 데이터 동기화(셋 중 택 1)
    • DB Data File Copy
    • MySQL Dump (All Lock)
    • Export/Import (Single Transaction)
  3. 리플리케이션 시작

1. DB 유저 생성

복제 데이터 전송을 위한 리플리케이션 권한의 DB 유저를 마스터에 생성합니다. 각 슬레이브 IO 쓰레드들은 추가된 DB 유저를 통해 데이터를 받습니다.

[Read More]

MySQL Table Lock에 관한 이해

Overview

Table Lock 스토리지 엔진 사용 시 반드시 알아야할 사항을 정리 드리겠습니다.

근래에는 물론 InnoDB가 아~주 많이 사용되고 있겠지만, 여전히 서비스에서는 MyISAM이 쓰이고 있습니다. MyISAM은 MySQL의 대표적인 스토리지 엔진이면서 내부적으로는 Table Lock으로 동작합니다.

관련 스토리지 엔진에 관한 설명은 MySQL특성을 정리한 반드시 알아야할 MySQL 특징 세 가지 포스팅을 참고하시면, 간단한 비교를 하실 수 있습니다. 자 그럼 Table Lock 스토리지 엔진 사용 시 반드시 알아야할 사항을 정리 드리겠습니다.

Table Lock 이해

MySQL에서 Table Lock은 다음 기준에 의해서 부여됩니다.

[Read More]
Lock  MyISAM  MySQL 

MySQL Replication 이해(1) – 개념

Overview

오늘은 조금더 제너럴한 주제를 가지고 정리를 할까합니다.
바로 MySQL Replication 입니다. MySQL Community에서 유일하게 HA 또는 분산 구성을 할 수 있는 유일한 기능입니다. 물론 MySQL+DRBD 구성와 같이 HA를 구성하는 방법도 있습니다만, MySQL 제품이 아니므로 스킵~!

먼저 Replication에 대해 간략하게 말씀 드리겠습니다.

MySQL Replication이란?

MySQL Replication이란 말 그대로 복제입니다. 영어 사전에 나온 듯한 DNA는 아니지만 데이터를 “물리적으로 다른 서버의 저장 공간” 안에 동일한 데이터를 복사하는 기술이죠.

다음 그림은 MySQL Replication을 가장 간단하게 나타낸 그림입니다. 데이터 변경을 마스터 장비에서만 수행하기 때문에 마스터 장애 시에는 전체 노드에 데이터 쓰기 작업이 불가능한 한계가 있습니다. MySQL Replicaton Master Slave

[Read More]

리눅스에 MySQL 설치하기(CentOS 5.6)

MySQL DBMS 를 설치할 때 제가 적용하는 내용을 공유합니다. root 계정으로 설치 준비를 하고, mysql 계정으로 DB를 구동합니다.

일단 하단 내용들은 root계정으로 수행을 합니다.

OS 계정 추가

다음과 같이 dba 그룹을 추가하고 그 밑에 mysql 계정을 추가합니다.

groupadd -g 600 dba
useradd -g 600 -u 605 mysql
passwd mysql

Linux 설정 변경

세션 Limit 를 설정합니다.

vi /etc/security/limits.conf
##하단 내용 추가
mysql            soft    nproc  8192
mysql            hard    nproc  16384
mysql            soft    nofile 8192
mysql            hard    nofile 65536

OS에서 limits.conf 파일을 읽어들이도록 설정합니다. 없으면 생성합니다.

[Read More]
Linux  MySQL 

CentOS6 에 Apache+PHP+MySQL 구성

서버를 구성하면서 사용한 스크립트..
나중에 재사용을 위해서 블로그에 올리자!!
Apache -> MySQL -> PHP 순으로 설치!

모든 설치 파일 혹은 소스는 하단 디렉토리에 위치한다.

최근 릴리즈 버전을 /usr/local/src에 다운로드 한다.

Apache 설치

## 컴파일 및 설치
cd /usr/local/src
tar xvzf httpd-2.2.14.tar.gz
cd httpd-2.2.21
./configure --prefix=/usr/local/apache \
--enable-mods-shared=all \
--enable-so \
--enable-module=rewrite
make
make install

## 관리를 위해 Symbolic Link로 연결
cd /usr/local
mv apache apache-2.2.21
ln -s apache-2.2.21 apache

MySQL 설치

## 압축 해제 설치
tar xzvf mysql-5.5.19-linux2.6-x86_64.tar.gz
mv mysql-5.5.19-linux2.6-x86_64 /usr/local/
cd /usr/local

## 관리를 위해 Symbolic Link로 연결
ln -s mysql-5.5.19-linux2.6-x86_64 mysql

자세한 설치는 리눅스에 MySQL 설치하기(CentOS 5.6) 편을 참고하세요.

[Read More]

옴 마니 밧메 훔

다음 이라는 말로 놓치는 수 많은 경험들..

당신들은 언제나 다음을 이야기 하죠. 하지만 다음이란 없어요. 내 날을 잘 들어요. 우리도 항상 다음으로 미루며 살아왔지만, 어느 날 갑자기 나라를 빼앗기고는 모든 것이 달라졌어요. 집을 잃고, 가족들이 뿔뿔이 흩어지고, 우리가 뒤로 미루기만 하던 일들을 하나도 할 수 없게 되었어요.

지구별 여행자 옴 마니 밧메 훔 내용 중

지금을 살고 있는 나에게 과연 다음이라는 것이 있을까?
내 자신을 돌아보게 해주는 나를 바늘로 찌르는 듯한 한마디..

[Read More]