레이블이 제피노스 MySQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 제피노스 MySQL인 게시물을 표시합니다. 모든 게시물 표시

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

뭔가 결과가 나와야 정상