리눅스 일정 주기로 서버 상태 체크하는 스크립트



ConoHa VPS 가상서버호스팅을 이용중이다.


코노하 특징에 보면 


SLA

가동률 99.99%를 보장합니다. 소셜 게임용 클라우드 “GMO AppsCloud”등으로 축적된 안정된 운용 실적을 자랑하는 GMO인터넷인 만큼, 안심하고 업무에 사용 가능한 품질을 제공할 수 있습니다.


가동률이 99.99% 보장이라고 되어 있다.


정말로 이용해도 괜찮은 VPS 인지 서버 네트워크 상태를 1시간 간격으로 체크해보자.


한달 가량 체크해 보면 믿어도 될지 말지 알 수 있겠지.


/etc/cron.hourly/lifecron 파일을 생성해서 아래 내용을 추가해주자.


#!/bin/sh


DATE=`date +%Y%m%d\ %H:%M:%S`

MYIP=`nslookup conoha.ivps.kr | grep "Address: " | awk -F ': ' '{print $2}'`

echo $DATE $MYIP >> /root/life.log


크론탭을 이용한 1시간 마다 nslookup 으로 서버ip를 체크해서 기록하는 스크립트다.


나중에 로그가 쌓이고 나서 한번씩 체크해 보면 된다.


# cat /root/life.log | grep -v "서버ip"


결과가 안나와야 정상이다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 접속 소켓 제한 늘이기



리눅스 서버 운영시 특정 시간대에 동시접속자 수가 늘어나면 관리자 조차도 SSH 접속이 안될 때가 있을 것이다.


이런 경우는 ulimit -n 으로 open files 수를 확인해보고 이 수치를 늘여주면 된다.


[root@conoha ~]# ulimit -n 1024

[root@conoha ~]# ulimit -n

1024

[root@conoha ~]# ulimit -n 65536

[root@conoha ~]# ulimit -n

65536

[root@conoha ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 3891

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 65536

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 3891

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited



이렇게 설정하고 재 로그인 하면 적용이 된다.


하지만 재부팅하면 설정값이 이전으로 돌아가 있을 것이다.


재부팅 후에도 적용을 하려면 /etc/security/limits.conf 파일을 열어서 아래 내용을 추가해주고 재부팅 해보자.


*       -       nofile  65536



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x root 비밀번호 분실시 초기화 방법



root 패스워드가 생각 안날때 또는 "Give root password for maintenance" 메시지가 뜰때 암호를 초기화 하는 방법이다.


기존 single 이 안먹힐때 아래를 따라하면 된다.


이전에 rw init=/bin/bash 는 문제가 있는 것 같다. rw init=/sysroot/bin/sh 로 변경


아래처럼 해주면 된다.


CentOS 7.2 root 비밀번호 분실시 초기화 방법CentOS 7.2 root 비밀번호 분실시 초기화 방법 콘솔 부팅시 e 키를 누른다.


콘솔에서 부팅시 위 화면에서 키보드에서 e 키를 누르자.



CentOS 7.2 root 비밀번호 분실시 초기화 방법CentOS 7.2 root 비밀번호 분실시 초기화 방법 ro rhgb quitet 부분을 찾는다.


커서를 아래로 내려서 위의 내용(ro) 부분을 찾아서 아래처럼 수정 해주자.



ro 를


rw init=/sysroot/bin/sh 로 변경하고 Ctrl+x 버튼을 누르자.



부팅이 되고 위 화면에서


chroot /sysroot


passwd root


비밀번호 변경후에

touch /.autorelabel


약간 시간 딜레이 후에

exit


이제 재부팅이 되면 변경된 비밀번호로 로그인이 가능하다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x 아파치 모듈 컴파일 에러시



CentOS 7.2 최소설치를 했더니 아파치 모듈을 컴파일 하려고 하니 안되는게 너무 많다.


gcc 컴파일도 안되고, configure: error: apxs missing 이라고 뜨고


make 도 안되고


관련된 패키지를 설치해주자.


yum -y install gcc gcc-c++ kernel-devel httpd-devel




7.2 버전의 최소설치는 정말 최소설치인가 보다. 안되는게 너무 많다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 인터넷 속도 테스트 팁



리눅스에서 인터넷 속도가 어느 정도 나오는지 테스트 하는 방법입니다.


다음카카오 서버라서 꽤나 빠릅니다.


다운로드 샘플은 CentOS 7.2 최소설치 이미지입니다.


테스트 서버는 코노하 VPS


[root@conoha ~]# wget http://ftp.daumkakao.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

--2016-04-14 14:01:27--  http://ftp.daumkakao.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

Resolving ftp.daumkakao.com (ftp.daumkakao.com)... 113.29.189.165

Connecting to ftp.daumkakao.com (ftp.daumkakao.com)|113.29.189.165|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 632291328 (603M) [application/x-iso9660-image]

Saving to: ‘CentOS-7-x86_64-Minimal-1511.iso’


100%[======================================>] 632,291,328 10.9MB/s   in 55s


2016-04-14 14:02:22 (10.9 MB/s) - ‘CentOS-7-x86_64-Minimal-1511.iso’ saved [632291328/632291328]



다운로드 속도가 10.9MB/s 가 나왔네요. bps로 계산하면 87.2Mbps 입니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 logrotate 장점 및 단점



리눅스에서 웹호스팅을 운영하다 보면 /var/log/httpd 에 엄청난 로그들이 쌓인다.


에러라도 발생한 경우엔 더욱 더 심하게 쌓이는데 계속 쌓이다 보면 하드 디스크 용량이 꽉 차서 서버가 느려질 수 있다.


/var 디렉토리만 파티션을 따로 잡아서 다른 서비스에는 지장이 안 생기게도 할 수 있겠지만,


이럴때 logrotate 를 활용하면 cron 에 의해 하루에 한번씩 로그들을 정리해서 하드 공간을 확보해 줄 수가 있다.


그런데 다운로드를 서비스 하는 웹호스팅을 운영 중이라면 logrotate 가 실행되면 그 타이밍에 다운로드 받다가 도중에 끊어지는 경우가 발생한다.


이유는 logrotate 가 실행되고 난 뒤에 아파치를 reload 하기 때문인데 이를 graceful 로 바꿔도 마찬가지다.


/etc/logrotate.d/httpd 파일의 내용을 보면


/var/log/httpd/*log {

    missingok

    #notifempty

    daily

    sharedscripts

    #delaycompress

    compress

    postrotate

        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true

    endscript

    rotate 7

}


systemctl reload httpd.service 가 있어서 아파치가 reload 된다.


물론 새벽에 조용한 시간대에 사용자가 없는 경우라면 아무런 문제가 되지 않겠지만 혹시나 사용자가 있다면 다운로드 되다가 파일이 뚝 끊어져 다운로드가 종료가 되어 버린다. ( ps : CentOS 7.x 버전은 이상이 없음을 확인하였다. 아파치 2.2.x 버전대가 문제가 있는 걸까? )


이런 경우를 피할려면 /etc/logrotate.d/httpd 파일을 지우고 쉘스크립트를 따로 만들어주면 된다.


조금 귀찮긴 하지만 말이다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 좀비 프로세스 죽이기



리눅스를 운영하다 보면 가끔씩 좀비 프로세스가 생길때가 있다.


아래 예제는 사실상 좀비 프로세스는 아니다. addconn 부모가 pluto 이고 pluto 는 ipsec 데몬에서 호출된 실행파일이다.



[root@conoha ~]# ps aux | grep Z

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root     14923  0.0  0.0      0     0 ?        Z    Apr11   0:00 [addconn] <defunct>

root     22986  0.0  0.0 112648   956 pts/0    R+   17:50   0:00 grep --color=auto Z


defunct 로 표시되는 것은 부모 프로세스를 kill 해야 죽는다.


pstree 명령어로 부모 프로세스를 알아보자.


[root@conoha ~]# pstree -pu

systemd(1)─┬─NetworkManager(13132)─┬─dhclient(13137)

           │                       ├─{NetworkManager}(13133)

           │                       └─{NetworkManager}(13135)

           ├─abrt-watch-log(641)

           ├─abrtd(620)

           ├─agetty(661)

           ├─agetty(662)

           ├─atd(654)

           ├─auditd(597)───{auditd}(606)

           ├─crond(652)

           ├─dbus-daemon(628,dbus)

           ├─firewalld(13217)───{firewalld}(13574)

           ├─httpd(17181)─┬─httpd(18200,apache)

           │              ├─httpd(18204,apache)

           │              ├─httpd(18205,apache)

           │              ├─httpd(18206,apache)

           │              ├─httpd(18207,apache)

           │              ├─httpd(18208,apache)

           │              └─httpd(21746,apache)

           ├─irqbalance(643)

           ├─lsmd(639,libstoragemgmt)

           ├─lvmetad(484)

           ├─master(1838)─┬─pickup(22907,postfix)

           │              └─qmgr(1856,postfix)

           ├─mysqld_safe(15498,mysql)───mysqld(15671)─┬─{mysqld}(15673)

           │                                          ├─{mysqld}(15674)

           │                                          ├─{mysqld}(15675)

           │                                          ├─{mysqld}(15676)

           │                                          ├─{mysqld}(15677)

           │                                          ├─{mysqld}(15678)

           │                                          ├─{mysqld}(15679)

           │                                          ├─{mysqld}(15680)

           │                                          ├─{mysqld}(15681)

           │                                          ├─{mysqld}(15682)

           │                                          ├─{mysqld}(15684)

           │                                          ├─{mysqld}(15685)

           │                                          ├─{mysqld}(15686)

           │                                          ├─{mysqld}(15687)

           │                                          ├─{mysqld}(15688)

           │                                          ├─{mysqld}(15689)

           │                                          ├─{mysqld}(15697)

           │                                          └─{mysqld}(15698)

           ├─ntpd(651,ntp)

           ├─pluto(14890)─┬─_pluto_adns(14922)

           │              ├─addconn(14923)

           │              └─{pluto}(14897)

           ├─polkitd(770,polkitd)─┬─{polkitd}(777)

           │                      ├─{polkitd}(779)

           │                      ├─{polkitd}(781)

           │                      ├─{polkitd}(782)

           │                      └─{polkitd}(784)

           ├─pptpd(14619)

           ├─qemu-ga(642)

           ├─rngd(621)

           ├─rsyslogd(627)─┬─{rsyslogd}(636)

           │               └─{rsyslogd}(637)

           ├─smartd(619)

           ├─sshd(1269)───sshd(22915)───bash(22917)───pstree(23049)

           ├─systemd-journal(471)

           ├─systemd-logind(622)

           ├─systemd-udevd(491)

           ├─tuned(1271)─┬─{tuned}(1454)

           │             ├─{tuned}(1458)

           │             ├─{tuned}(1461)

           │             └─{tuned}(1468)

           ├─wpa_supplicant(772)

           └─xl2tpd(14894)


14923의 부모 프로세스 ID 는 14890 이다.


kill -9 14890 명령어로 좀비 프로세스가 사라져야 하나 위의 pluto는 죽여도 다시 살아난다.


[root@conoha ~]# find / -name pluto

/run/pluto

/etc/sysconfig/pluto

/etc/pam.d/pluto

/var/log/pluto

/usr/libexec/ipsec/pluto


pluto 가 ipsec 서비스 관련 프로세스임을 알았다.


ipsec을 종료시키고 확인해보자.


[root@conoha ~]# systemctl stop ipsec.service

[root@conoha ~]# pstree

systemd─┬─NetworkManager─┬─dhclient

        │                └─2*[{NetworkManager}]

        ├─abrt-watch-log

        ├─abrtd

        ├─agetty

        ├─atd

        ├─auditd───{auditd}

        ├─crond

        ├─dbus-daemon

        ├─firewalld───{firewalld}

        ├─httpd───7*[httpd]

        ├─irqbalance

        ├─login───bash

        ├─lsmd

        ├─lvmetad

        ├─master─┬─pickup

        │        └─qmgr

        ├─mysqld_safe───mysqld───18*[{mysqld}]

        ├─ntpd───ntpd

        ├─polkitd───5*[{polkitd}]

        ├─qemu-ga

        ├─rngd

        ├─rsyslogd───2*[{rsyslogd}]

        ├─smartd

        ├─sshd───sshd───bash───pstree

        ├─systemd-journal

        ├─systemd-logind

        ├─systemd-udevd

        ├─tuned───4*[{tuned}]

        └─wpa_supplicant


이제 사라졌다.





블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

아파치 access_log 로그에 ::1 안 나오게 하는 방법



로그에 ::1 ipv6 로그가 쌓이는게 영 신경쓰인다면 로그에 안쌓이게 해보자.


/etc/httpd/conf/httpd.conf 파일에서 아래부분을 찾아서 수정해주고 저장


   #CustomLog "logs/access_log" combined

    SetEnvIf Remote_Addr "^::1" no_log

    CustomLog "logs/access_log" combined env=!no_log


아파치 재시작 ( CentOS 7.x )

# systemctl restart httpd.service


6.x 버전이라면


service httpd restart


또는


apachectl restart



이제 나중에 로그가 쌓였는지 확인하면 된다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL Too many open files 에러 처리 방법



테스트 환경 : CentOS 7.2 / MariaDB 5.5.47


mysql 에러 로그에 "[ERROR] Error in accept: Too many open files" 이부분이 있다면 open_files_limit 수치를 올리면 된다.


그리고 ulimit -n 으로 시스템의 open files 수치 확인

1024로 나온다면 4096으로 바꿔보자.


일시적인 방법

# ulimit -n 4096

이 방법은 재접속 또는 재부팅하면 다시 이전으로 값이 돌아간다.


영구적인 방법

# vi /etc/security/limits.conf

*    -    nofile    4096

* - nofile 4096 내용 추가후 reboot (재접속 또는 재부팅)


MySQL 에서 open files limit 확인하기


show variables like 'open_files_limit';


Variable_name Value

open_files_limit 1024


1024 로 나온다면 이 수치를 4096으로 올려보자.


vi /etc/my.cnf


[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd


open_files_limit=4096


[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid


#

# include all files from the config directory

#

!includedir /etc/my.cnf.d



open_files_limit=4096 을 추가하고 저장


mysql 재시작


# systemctl restart mariadb.service


open files limit 재 확인


show variables like 'open_files_limit';


Variable_name Value

open_files_limit 4096



위 방법으로 안될때는 https://ivps.tistory.com/298 여기를 참고하세요.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x 아파치 2.4.x 다운로드 속도 제한하기



CentOS 에 국한 되는 것은 아니고 아파치 2.4 버전대에 해당되는 기능이다.


2.2 버전대에서는 cband 모듈로 트래픽 제한을 하였었는데


2.4 버전에서는 따로 모듈을 설치하지 않고도 속도 제한이 가능하다.



아무것도 건들지 않은체로 속도 테스트를 해보도록 하겠다.


[root@conoha html]# dd if=/dev/zero of=/var/www/html/100M.bin bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 0.110541 s, 949 MB/s

[root@conoha html]# cd

[root@conoha ~]# wget http://conoha.ivps.kr/100M.bin

--2016-04-09 10:40:25--  http://conoha.ivps.kr/100M.bin

Resolving conoha.ivps.kr (conoha.ivps.kr)... 133.130.126.29

Connecting to conoha.ivps.kr (conoha.ivps.kr)|133.130.126.29|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 104857600 (100M) [application/octet-stream]

Saving to: ‘100M.bin’


100%[======================================>] 104,857,600  408MB/s   in 0.2s


2016-04-09 10:40:26 (408 MB/s) - ‘100M.bin’ saved [104857600/104857600]


100MB 사이즈의 파일을 만들어서 로컬호스트에서 wget 으로 다운로드 해보니 408MB/s 속도가 나왔다.


로컬이라서 빠른 것은 당연하겠지만 아무튼 속도 제한이 걸린 것으로 볼 수가 없는 속도가 나온다.


[root@virtualbox ~]# wget conoha.ivps.kr/100M.bin

--2016-04-11 10:48:49--  http://conoha.ivps.kr/100M.bin

Resolving conoha.ivps.kr (conoha.ivps.kr)... 133.130.126.29

Connecting to conoha.ivps.kr (conoha.ivps.kr)|133.130.126.29|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 104857600 (100M) [application/octet-stream]

Saving to: ‘100M.bin’


100%[======================================>] 104,857,600 8.71MB/s   in 12s


2016-04-11 10:49:20 (8.63 MB/s) - ‘100M.bin’ saved [104857600/104857600]


이번엔 다른 네트워크의 VirtuaBox 기반 vps 에서 다운로드 받은 결과다. 8.63MB/s 가 나왔다. 69.04Mbps 속도가 나온다.



이제 속도를 제한해 보도록 하겠다.


vi /etc/httpd/conf.modules.d/00-base.conf 파일에서 아래 부분을 찾아서 주석해제


#LoadModule ratelimit_module modules/mod_ratelimit.so


vi /etc/httpd/conf.d/ratelimit.conf 파일에 아래 부분 내용 저장


<IfModule mod_ratelimit.c>
    <Location />
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 500
    </Location>
</IfModule>

500 은 500Kbps 의 의미이다. Location 은 특정 디렉토리를 지정할 수도 있다. 위에는 / 루트이므로 전체가 속도 제한이 된다.


아파치 재시작하고 다운로드 속도 테스트를 해보자.


[root@conoha ~]# systemctl restart httpd

[root@conoha ~]# wget http://conoha.ivps.kr/100M.bin

--2016-04-09 10:56:20--  http://conoha.ivps.kr/100M.bin

Resolving conoha.ivps.kr (conoha.ivps.kr)... 133.130.126.29

Connecting to conoha.ivps.kr (conoha.ivps.kr)|133.130.126.29|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 104857600 (100M) [application/octet-stream]

Saving to: ‘100M.bin.3’


100%[======================================>] 104,857,600  522KB/s   in 3m 25s


2016-04-09 10:59:45 (500 KB/s) - ‘100M.bin.3’ saved [104857600/104857600]


정확하게 500KB/s 속도가 나왔다.


속도 제어가 되고 있다는 결과이다.


로컬에서 받더라도 제한이 걸리며, 전체 트래픽에 대한 제한이 아닌 1 커넥션당 제한속도이다.



아파치 2.2 버전대라면 여기를 http://itrooms.tistory.com/111 참고해서 트래픽 제어가 가능하다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,