MySQL 서버의 상태를 모니터링하고 튜닝하기 위해 MySQLTuner-perl 라는 스트립트가 제공됩니다.


지원되는 환경은 아래와 같습니다. 윈도우는 아직 안되네요.


 

https://github.com/major/MySQLTuner-perl 사이트에 방문하여 mysqltuner.pl 를 다운로드 받고 실행해주면 됩니다.


# wget https://github.com/major/MySQLTuner-perl/blob/master/mysqltuner.pl

# chmod +x mysqltuner.pl

# perl mysqltuner.pl


아래 그림처럼 현재 MySQL 서버 상태를 체크해서 결과를 보여주게 됩니다.

결과에서 추천하는대로 서버를 튜닝해주세요.



자세한 내용은 https://github.com/major/MySQLTuner-perl 사이트를 방문하세요.

CentOS 기준으로 ImageMagick를 설치해보자.


의존성 모듈 설치


# yum install -y tcl-devel libpng-devel libjpeg-devel 

# yum install -y ghostscript-devel bzip2-devel freetype-devel libtiff-devel zlib-devel

# yum install -y ImageMagick-c++ ImageMagick-c++-devel


imagemagick 설치


참고 사이트 http://www.imagemagick.org/script/install-source.php#unix

(configure시 CXX=CC CXXFLAGS=-O2 옵션을 주어 magicK++을 함께 설치한다)


 

# wget http://www.imagemagick.org/download/ImageMagick.tar.gz

# tar xvzf ImageMagick.tar.gz

# cd ImageMagick-7.0.4-0

# ./configure CXX=CC CXXFLAGS=-O2 --prefix=/usr/local

# make clean

# make

# make install

# /sbin/ldconfig /usr/local/lib

# /usr/local/bin/convert logo: logo.gif

# make check


imagemagick 의 delegate 조회


# identify -version

Version: ImageMagick 7.0.4-0 Q16 x86_64 2015-09-14 http://www.imagemagick.org

Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC

License: http://www.imagemagick.org/script/license.php

Features: Cipher DPC OpenMP

Delegates (built-in): bzlib fontconfig freetype jng jpeg pangocairo png x xml zlib


================================================================================


png나 jpeg가 deledates 에 보이지 않는다면.. 이 모듈이 설치된 곳을 확인해보자


# locate libpng

/usr/bin/libpng-config

/usr/bin/libpng12-config

/usr/include/libpng12

/usr/include/libpng12/png.h

/usr/include/libpng12/pngconf.h

/usr/lib64/libpng.so

/usr/lib64/libpng.so.3

/usr/lib64/libpng.so.3.49.0

/usr/lib64/libpng12.so

/usr/lib64/libpng12.so.0

/usr/lib64/libpng12.so.0.49.0

/usr/lib64/compiz/libpng.so

/usr/lib64/gthumb/modules/libpngexporter.so

/usr/lib64/pkgconfig/libpng.pc

/usr/lib64/pkgconfig/libpng12.pc


/usr/lib64 에 들어가 있다면 make 에 옵션을 주고 다시 해보자.


# make clean

# make libdir=/usr/lib64

# make libdir=/usr/lib64 install


# identify -version

Version: ImageMagick 7.0.4-0 Q16 x86_64 2015-09-14 http://www.imagemagick.org

Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC

License: http://www.imagemagick.org/script/license.php

Features: Cipher DPC OpenMP

Delegates (built-in): bzlib fontconfig freetype jng jpeg pangocairo png x xml zlib



vnstat 설치


# yum install -y vnstat


60초 동안 테스트를 수행하며 이상이 없는지 확인합니다. 

체크 결과 Everything is ok.가 나왔다면 바로 문제없이 사용할 수 있습니다


# vnstat --testkernel


사용할 수 있는 네트워크 인터페이스를 확인할 수 있습니다.


# vnstat --iflist

Available interfaces: lo usb0 eth0 eth1 eth2 eth3 bond0 virbr0 virbr0-nic


아래 명령어를 통해 기록을 위한 새로운 데이터베이스 파일을 생성합니다. 

저장 경로는 /var/lib/vnstat/eth0 으로 설정됩니다.


# vnstat -u -i eth0


서버가 bonding 되어있다면 bond된 인터페이스를 잡자.


# vnstat -u -i bond0


부팅시 자동 실행 설정


# chkconfig vnstat on


서비스 시작, 중지 등


# service vnstat start

# service vnstat stop

# service vnstat restart

# service vnstat status


 

실시간으로 트래픽을 모니터링할 수 있습니다. (-i 옵션은 인터페이스 선택, 기본은 eth0)


# vnstat -l -i bond0


그래프 형태로 상세 모니터링 내역을 보여줍니다.


# vnstat -h -i bond0


일별 사용량을 출력해줍니다.


# vnstat -d -i bond0


자세한 옵션 설명은 --help


# vnstat --help


-h, -d 옵션은 vnstat -u 명령어로 네트워크 트래픽 정보를 업데이트 해 줘야만 사용할 수 있습니다. 

일반적으로 해당 명령어를 크론에 등록하여 수행합니다.


# crontab -e


*/5 * * * * usr/bin/vnstat -u -i eth0

*/5 * * * * usr/bin/vnstat -u -i bond0



=================


(소스 설치는 아래 참조)


# wget http://humdi.net/vnstat/vnstat-1.17.tar.gz

# tar xvf vnstat-1.17.tar.gz

# cd vnstat-1.17

# ./configure

# make && make install

# which vnstat

/usr/local/bin/vnstat

# ln -s /usr/local/bin/vnstat /usr/bin/vnstat

# mkdir /var/lib/vnstat

# vi /etc/init.d/vnstat

아래 쉘 스크립트 저장

-----------------------------------------------------

#!/bin/sh

#

# chkconfig: 123 69 68

# description: vnstat

. /etc/init.d/functions

#

if [ -f /etc/sysconfig/vnstat ]; then

. /etc/sysconfig/vnstat

fi

case "$1" in

start)

echo -n "Start service vnstat"

/usr/sbin/vnstat start

;;

stop)

echo -n "Stop service vnstat"

/usr/sbin/vnstat stop

;;

restart)

echo -n "Restart service vnstat"

/usr/sbin/vnstat restart

;;

*)

echo "Usage: $0 {start|stop|restart}"

exit 1

;;

esac

-----------------------------------------------------

# chkconfig --add vnstat


리눅스 OS 확인

 

# lsb_release -a

LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch

Distributor ID: CentOS

Description:    CentOS release 6.2 (Final)

Release:        6.2

Codename:       Final

 

# uname -a

Linux localhost 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

 

# getconf LONG_BIT

64

 

===> 해당 버전은 CentOS release 6.2 - 64bit (커널 버전 2.6.32)

  

 

기타 리눅스 정보

 

CPU 정보

 

# dmesg | grep CPU

SMP: Allowing 8 CPUs, 0 hotplug CPUs

NR_CPUS:4096 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1

PERCPU: Embedded 31 pages/cpu @ffff880028200000 s94424 r8192 d24360 u262144

CPU: Physical Processor ID: 0

CPU: Processor Core ID: 0

mce: CPU supports 9 MCE banks

CPU0: Thermal monitoring enabled (TM1)

CPU0: Intel(R) Xeon(R) CPU E31230 @ 3.20GHz stepping 07

Brought up 8 CPUs

microcode: CPU0 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU1 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU2 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU3 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU4 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU5 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU6 sig=0x206a7, pf=0x2, revision=0x29

microcode: CPU7 sig=0x206a7, pf=0x2, revision=0x29

 

메모리

 

# cat /proc/meminfo

MemTotal:        8031488 kB

MemFree:          240120 kB

Buffers:          139168 kB

Cached:           471708 kB

SwapCached:        89204 kB

Active:          6174976 kB

Inactive:        1179556 kB

Active(anon):    5677848 kB

Inactive(anon):  1066236 kB

Active(file):     497128 kB

Inactive(file):   113320 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:       2097144 kB

SwapFree:        1111872 kB

Dirty:              2000 kB

Writeback:             0 kB

AnonPages:       6680140 kB

Mapped:            40368 kB


메모리 사용량 확인

 

많이 사용하는 순으로 10

 

# ps -ef --sort -rss | head -n 11

 

많이 사용하는 순으로 10개의  사용량 보기

 

# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 11

 

swap 메모리 확인

 

# free -m 혹은 free -g (MB단위 혹은 GB단위)

# free -g

             total       used       free     shared    buffers     cached

Mem:            31         14         16          0          0          0

-/+ buffers/cache:         13         17

Swap:           15          0         15

  

HDD 용량

 

# df -h

Filesystem            Size      Used     Avail      Use%         Mounted on

/dev/sda1              97G      45G       48G       49%            /

tmpfs                     3.9G      0            3.9G      0%              /dev/shm


특정 폴더 용량 확인

 

/game  폴더 내의 폴더별 용량을 확인하려면

 

# cd /game

# du -sh *

19G         app

5.7M         data

2.9G         log

1.3G         util

로그 파일이 엄청 쌓여있을 경우. 파일을 삭제하면 문제가 있을 수 있으므로 아래 명령어로 파일을 비워준다.


# cat /dev/null > access.log


리눅스는 기본적으로 1024개의 파일을 오픈할 수 있다.

(리눅스에서는 소켓 접속도 파일 오픈 개념으로 처리됨)

그래서 소켓 프로그램시 1000명 이상되면 사용자 접속이 안될 수 있는데..

아래 처럼 파일 오픈 개수를 늘려줄 수 있도록..

 

 

# ulimit -a

open files (-n) 1024

이런 항목이 있음..

 

파일 오픈 개수를 늘리자.

root 권한으로 /etc/security/limits.conf 열어서 아래처럼 수정

 

# vi /etc/security/limits.conf

* soft nofile 500000

* hard nofile 500000

 

저장하고, 새로 로그인 하면. 파일 오픈 개수가 늘려져 있을 것임.

 

# ulimit -a

open files (-n) 500000

이렇게 변경되어있으면 됨.

UCARP CARP (Common Address Redundancy Protocol) 프로토콜을 구현한 것으로

Virtual IP(VIP)를 여러 서버가 공유해서 자동으로 Failover를 처리한다.

 

VIP가 실제 서비스되는 대표 아이피이며, A 서버와 B 서버가 존재한다고 하자.

먼저 A 서버가 VIP를 획득하여 서비스를 하다가, A 서버가 장애가 나면 B 서버가 이를 감지하여 VIP를 획득하여

무중단 서비스를 제공한다. 그러다가 A 서버가 다시 정상적으로 구동되면 다시금 VIP를 획득하여 A 서버를 통해서

서비스를 제공하게 된다. 서비스 장애로 VIP로가 넘어가는 시간은 아주 짧아서 장애시간이 없다고 봐도 무방하다.

 

- VIP(서비스 IP) : 10.10.10.10

- 서버 #1 : 10.10.10.11

- 서버 #2 : 10.10.10.12

 

위의 구성으로 되어있다고 하고 설치를 해보자.

 

서버 #1과 서버 #2 모두에 UCARP를 설치한다.

 

# yum -y install ucarp

 

yum이 안될 경우 rpm 설치를 하자.

 

64bit 경우

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/ucarp-1.5.2-8.el6.x86_64.rpm

 

해당 파일이 안받아지면.. (링크가 사라질 수 있음)

ucarp-1.5.2-8.el6.x86_64.rpm 로 검색해보면 다른 링크가 존재할 거임.

 

먼저, 서버 #1에 설정을 한다.

 

--preempt 옵션 : 가능하면 빨리 마스터가 되도록 => ***** 메인 서버에만 설정한다 *****

--advbase 옵션 : 같은 그룹의 서버들에게 몇 초 간격으로 알릴 것인지 (기본 1, 1~255까지 설정 가능) => 5초로 하자

--advskew 옵션 : 실제로 서버들에게 알릴 때는 advbase + advskew/256 초 간격으로 알린다.  낮은 값일수록 MASTER로 선택될 가능성이 높다. => 메인 서버는 0으로 하고, 나머지는 우선순위에 따라 10씩 더한 값을 적어주면 될 듯

--deadratio 옵션 : advbase가 얼마나 오지 않으면 죽은 걸로 판단할 것인가? (기본 3) => 3으로 하자

 

ucarp 샘플 설정파일을 복사하고 서버 #1의 설정을 한다.

 

# cp /etc/ucarp/vip-001.conf.example /etc/ucarp/vip-001.conf

# vi /etc/ucarp/vip-001.conf

# Virtual IP configuration file for UCARP

 

# You are required to have an IPADDR= line in the configuration file for

# this interface (so no DHCP allowed)

BIND_INTERFACE="eth0"

 

# Real IP

SOURCE_ADDRESS="10.10.10.11"

 

# Other Options, see documentation for more information

OPTIONS="--shutdown --deadratio=3 --advbase=5 --advskew=0 --preempt"

 

# ID - must be same on both hosts  (from 001 to 255)

ID=077

 

# Virtual IP - must be same on both hosts

VIP_ADDRESS="10.10.10.10"

 

# password - must be same on both hosts

PASSWORD="비밀번호"

 

 

 

서버 #2에서도 ucarp 샘플 설정파일을 복사하고 설정을 하자.

 

# cp /etc/ucarp/vip-001.conf.example /etc/ucarp/vip-001.conf

# vi /etc/ucarp/vip-001.conf

# Virtual IP configuration file for UCARP

 

# You are required to have an IPADDR= line in the configuration file for

# this interface (so no DHCP allowed)

BIND_INTERFACE="eth0"

 

# Real IP

SOURCE_ADDRESS="10.10.10.12"

 

# Other Options, see documentation for more information

OPTIONS="--shutdown --deadratio=3 --advbase=5 --advskew=10"

 

# ID - must be same on both hosts  (from 001 to 255)

ID=077

 

# Virtual IP - must be same on both hosts

VIP_ADDRESS="10.10.10.10"

 

# password - must be same on both hosts

PASSWORD="비밀번호"

 

부팅시 자동 실행되도록 설정

 

# chkconfig --add ucarp

# chkconfig --level 2345 ucarp on

 

서버 #1과 서버 #2에서 UCARP 를 구동

 

# service ucarp start

 

이제 서버 #1을 다운시키거나 네트웍을 끊긴다면 서버 #2 MASTER가 되어 서비스가 유지될 것이다.

 

서버 작업을 위해 UCARP 중지

 

서버 #1에 어떤 작업이 필요해서 서버를 내리지는 않지만 MASTER를 잠시 내려놔야 할 경우가 있다.

이때는 서비스를 중지하면 된다.

 

# service ucarp stop

 

작업이 끝나고 다시 MASTER가 되게 하려면 # service ucarp start

 

로그 확인

로그를 확인하려면 아래 명령으로 하자.

 

# vi /var/log/messages

 

실시간 확인은

 

# tail -f /var/log/messages

 

 

vip-001.conf의 옵션에 대해 더 알고 싶다면 # ucarp --help 를 해보라.

 

# ucarp --help

 

ucarp 1.5.2 - Feb 13 2013

 

--interface=<if> (-i <if>): bind interface <if>

--srcip=<ip> (-s <ip>): source (real) IP address of that host

--vhid=<id> (-v <id>): virtual IP identifier (1-255)

--pass=<pass> (-p <pass>): password

--passfile=<file> (-o <file>): read password from file

--preempt (-P): becomes a master as soon as possible

--neutral (-n): don't run downscript at start if backup

--addr=<ip> (-a <ip>): virtual shared IP address

--help (-h): summary of command-line options

--advbase=<seconds> (-b <seconds>): advertisement frequency

--advskew=<skew> (-k <skew>): advertisement skew (0-255)

--upscript=<file> (-u <file>): run <file> to become a master

--downscript=<file> (-d <file>): run <file> to become a backup

--deadratio=<ratio> (-r <ratio>): ratio to consider a host as dead

--shutdown (-z): call shutdown script at exit

--daemonize (-B): run in background

--ignoreifstate (-S): ignore interface state (down, no carrier)

--nomcast (-M): use broadcast (instead of multicast) advertisements

--facility=<facility> (-f): set syslog facility (default=daemon)

--xparam=<value> (-x): extra parameter to send to up/down scripts

 

Sample usage:

 

Manage the 10.1.1.252 shared virtual address on interface eth0, with

1 as a virtual address idenfitier, mypassword as a password, and

10.1.1.1 as a real permanent address for this host.

Call /etc/vip-up.sh when the host becomes a master, and

/etc/vip-down.sh when the virtual IP address has to be disabled.

 

ucarp --interface=eth0 --srcip=10.1.1.1 --vhid=1 --pass=mypassword \

      --addr=10.1.1.252 \

      --upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh

 

 

Please report bugs to bugs at ucarp dot org

외부에서 서버로 들어오는 (INBOUND) 포트를 A 에서 B로 리다이렉트 해야 할 경우가 있다.

예를 들어 80으로 들어오는 포트를 서버에서는 7080으로 LISTEN 해야 한다면 iptables에서 변경하자.


# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 7080


또한, 서버에서 외부로 나가는 (OUTBOUND) 포트를 A에서 B로 리다이렉트해야 할 경우가 있다.

예를 들어 80으로 나가는 포트를 외부에서는 60000 으로 LISTEN 하고 있다면 iptables에서 변경하자.


# iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 60000 

혹은

# iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :60000


변경사항을 반영하려면


# /sbin/service iptables save

# /sbin/service iptables restart


nat 룰을 조회하려면


# iptables -t nat -L -n -v

http://aid.altibase.com/plugins/servlet/mobile#content/view/7340868


MyBatis, Spring, ALTIBASE 연동할 일이 있어.. 위의 링크로 설정은 해결했으나..


이놈의 altibase jdbc용 jar가 altibase 홈페이지에서 받은 걸로 안됨..

버전마다 좀 차이가 있는 듯하여.. 찾으시는 분들을 위해 몇개 올려둠.


인터넷으로 찾다찾다.. altibase-jdbc-driver-5.1.5.46.jar 구해서 하니 됨..


altibase 서버가 설치된 업체에게 서버에 설치된 jar를 달라고 해서 사용하면 제일 좋을 듯..



 

Altibase.jar


Altibase5.jar


altibase-jdbc-driver-5.1.5.46.jar


mysql을 구동하다보면 sock 위치를 임의로 지정해서 사용할 일이 있다.


mysql> SHOW VARIABLES LIKE 'socket';

+---------------+-------------------------------+

| Variable_name | Value                         |

+---------------+-------------------------------+

| socket        | /aaa/bbb/mysql/mysql.sock |

+---------------+-------------------------------+



 

wordpress 사용시 /var/run/mysqld/mysqld.sock 처럼 기본 sock 위치를 찾는다.


이때문에 "데이타베이스 연결 에러"가 나는 상황이 있는데..


wp-config.php 파일을 열어서 아래처럼 설정해주면 되겠다. (경로 앞에 : 를 빼먹지 말기)


define('DB_HOST', ':/aaa/bbb/mysql/mysql.sock');




+ Recent posts