2014년 1월 6일 월요일

카카오팀의 MySQL 사용에 있어서 Linux Filesystem Cache 문제(메모리 먹는 하마2) 적용기

아래 내용을 적용해봤습니다.

http://kakaodbe.blogspot.kr/2013/09/mysql-linux-filesystem-cache-2.html



KT UCloudBiz 서비스를 이용중이고, CentOS 6.4 적용중입니다. 기본 서버 환경이기 때문에 몇 가지 프로그램과 라이브러리가 필요합니다.

$ yum install gcc perl-Inline perl-Parse-RecDescent




그리고 적용할 소스를 가져옵니다.

$ wget https://raw.github.com/yoshinorim/unmap_mysql_logs/master/unmap_mysql_logs

$ chmod +x unmap_mysql_logs

$ ./unmap_mysql_logs




unmap_mysql_logs 파일에 설정내용이 들어있으므로, 에러 발생 시 설정 내용을 변경해줘야 합니다.

예1)

readdir() attempted on invalid dirhandle DIR at ./unmap_mysql_logs line 36.

이 오류는 32 라인에서 $binlog_name 값을 shift 라고 정의하고 24 라인에서 디렉토리값을 추가로 지정해놔서 발생하는 오류입니다.

my @target_dirs = ( '/var/lib/mysql', '/var/lib/mysql/innodb_logs' );
...
my $binlog_name = shift;
...

위의 두 값을

my @target_dirs = ( '/var/lib/mysql' );
...
my $binlog_name = "logbin";
...

와 같이 변경해주면 됩니다. 저의 경우 my.cnf 에서 log-bin=galera 으로 설정해놓았기 때문에 아래 값은 logbin 이 아니라 galera 로 설정하였습니다.

2014년 1월 5일 일요일

Ubuntu 에 MariaDB 5.5 & Galera Cluster 설치

MariaDB 5.5 설치를 위한 사전 작업은 아래 링크를 참고합니다.

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist&distro=Ubuntu&distro_release=saucy&version=5.5

https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/





$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
$ sudo add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/mariadb-5.5.33/repo/ubuntu saucy main'


한국 미러는 kaist 서버 밖에 존재하지 않는 것 같습니다. 매우 고마운 서버이긴 하나 좀 느리다는게 단점이라면 단점입니다.

$ sudo apt-get update
$ sudo apt-get install mariadb-galera-server

mariadb-galera-server 를 설치합니다. mariadb-galera-server 에 mariadb-server 가 포함되어 있는 형태인 것 같습니다. CentOS 처럼 각각 설치하는 방식이 아닙니다. 설치 도중 MariaDB 에서 사용할 root 패스워드를 물어봅니다. CentOS 와는 달리 설치 스크립트에서 mysql_install_db 를 실행해서 DB 도 만들어둡니다. 별도의 디스크에 datadir 을 만들꺼라면 복사를 하거나 새로 mysql_install_db 을 실행해야 합니다.








insert 성능 향상을 위해 TokuDB 을 사용합니다. 5.5.34 이상의 버젼이라면 이미 포함되어 있으므로 아래 링크와 같이 별도 설치를 할 필요는 없습니다. 단지, /etc/mysql/conf.d/tokudb.cnf 에 있는 주석만 해제해주면 됩니다.

https://mariadb.com/kb/en/how-to-enable-tokudb-in-mariadb/








Multi-Thread 에서의 성능향상을 위해 jemalloc 을 설치하고 적용합니다. 이미 Ubuntu 버젼의 MariaDB 5.5 는 jemalloc 을 적용해서 complie 되어 있다고 합니다.

$ sudo apt-get install libjemalloc1

$ sudo vi /usr/bin/mysqld_safe

19 라인 정도에 위치한

mysqld_ld_preload=

에 jemalloc 라이브러리를 연결해줍니다.

mysqld_ld_preload=/usr/lib64/libjemalloc.so.1


mysql 을 재시작한 뒤 jemalloc 이 제대로 연동되었는지에 대한 확인은 아래와 같이 합니다.

$ sudo pmap `pidof mysqld` | grep jemalloc





2014년 1월 4일 토요일

CentOS 6.4 에서 jemalloc 설치 및 MariaDB 5.5 적용

yum 으로 간단하게 jemalloc 설치합니다. EPEL 저장소에 존재하므로 EPEL 저장소 연결은 먼저 해두어야 합니ㅏㄷ.

# yum install jemalloc



pmap 으로 jemalloc 이 적용되었는지 확인할 수 있습니다.

# pmap `pidof mysqld` | grep jemalloc

설치만 한 상태라면 아무런 결과가 나오지 않아야 정상입니다..




mysqld 실행 스크립트를 수정하여 mysqld 에만 jemalloc 이 이용되도록 수정합니다.

# vi /usr/bin/mysqld_safe

19 라인 정도에 위치한

mysqld_ld_preload=

에 jemalloc 라이브러리를 연결해줍니다.

mysqld_ld_preload=/usr/lib64/libjemalloc.so.1





# service mysql stop

# service mysql start --wsrep_cluster_address='gcomm://'

지금 MariaDB 5.5 에 Galera Cluster 을 연결해서 사용중인 서버이고, 메인 서버에 적용하는 것이라서 --wsrep_cluster_address 옵션을 이용해서 새로운 클러스터임을 알려줍니다. (필요없으면 지우고 실행)





pmap 으로 jemalloc 이 적용되었는지 다시 확인

# pmap `pidof mysqld` | grep jemalloc

뭔가 결과가 나와야 정상