현재 업무 중 많은 부분이 쇼핑몰과 SCM, ERP 등이다..
평균 동접은 약 1,000명 수준이다보니 단일 서버는 어렵고 분산 처리 방식으로 개발이 된다.
그에 맞는 서버 설정을 구성하였고 기록을 남긴다.
울 회사에서 내 포지션은 개발 관련 총책임자로 있어 돈이 들어가는 걸 기본적으로 싫어하는 나는 무료/오픈 소프트웨어 로 주로 사용하며 중국에서 근무하는 상황에서 개발인력 확보가 어렵고 인건비가 상당히 비싼 점을 고려한 세팅이다.
초기 개발 시에는 JAVA도 사용하였지만 현재는 다 걷어낸 상황이다.
대략 정리하면 아래와 같다.
Language : php-fpm(web), python & shell(server inside)
OS : CentOS5.x 64bit
Software : nginx(web or proxy), php, python, memcache, mmonit, munin, sphinx, mysql or mariadb, imagemagick, genbarcode(barcode), ioncube, goaccess
설치 과정.
1. 우선 CentOS 설치시에 모든 패키지를 제거하고 최소화로 하여 설치를 진행한다.
2. 64bit를 기준으로 설치하였기 때문에 32bit 소프트웨어는 제거.
# yum remove \*.i\?86
3. yum 으로 설치되는 부분이 있기 때문에 yum.conf 에다가 64bit 소프트웨어만 설치하도록 32bit 소프트웨어는 exclude 처리한다.
# vi /etc/yum.conf
exclude = *.i?86 #add exclude
4. yum으로 기본 패키지 정리.
# yum -y remove php httpd mysql bind dhclient tftp inetd xinetd ypserv telnet-server rsh-server vsftpd tcsh nfs* samba tftp-server telnet system-config-printer
# yum -y install system-config-date subversion gcc gcc-c++ g++ cpp make ncurses-devel automake autoconf tcl-devel rdate rsync pcre-devel gd-devel zlib zlib-devel curl curl-devel libcurl-devel openssl openssl-devel libopenssl-devel libtermcap-devel libc-client-devel bzip2-devel
5.ulmiit 설정
# ulimit -SHn 10240
# echo "ulimit -SHn 10240" >> /etc/rc.local
6. imagemagick 설치
# yum -y install ImageMagick*
7. iconv 설치 (source)
# tar zxvf libiconv-1.14.tar.gz
# cd libiconv-1.14
# ./configure --prefix=/usr/local
# gmake
# gmake install
# export LD_PRELOAD=/usr/local/lib/preloadable_libiconv.so
8. mysql or mariadb 설치 (2013년 이전에는 주변에서 데이터베이스 컨설팅 시에 돈 없으면 mysql을 사용하고 아주 아주 잘 설계하면 아주 아주 잘 버텨준다고 했다. 2013년 이후엔 mariadb를 추천해주고 있다. 이유는 explain 을 해보라. 그러면 알 것이다. 어차피 실 서비스는 정규화 설계로는 답없는 경우가 대부분이다.)
# groupadd mysql
# useradd -s /bin/false -g mysql mysql
8.1 mysql 설치 시... (5.6.x 기준)
# tar xvfz mysql-5.6.x.tar.gz
# cd mysql-5.6.x
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306 -DENABLE_DTRACE=0
8.2 mariadb 설치 시 (10.x.x 기준)
# tar xvfz mariadb-10.x.x.tar.gz
# cd mariadb-10.x.x
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_ARIA_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL__ADDR=/tmp/mysql.sock -DSYSCONFDIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DMYSQL_TORT=3306 -DENABLE_DTRACE=0
mysql과 mariadb는 cmake 까지만 다르다..
# gmake
# gmake install
# echo /usr/local/mysql/lib >> /etc/ld.so.conf && ldconfig
설정 파일은 알아서 잘...(여기에 올려진 설정은 메모리 16GB기준의 서버의 설정이다)
# cp example.cnf /usr/local/mysql/my.cnf
# cp support-files/mysql.server /usr/local/mysql/bin/
# chmod 700 /usr/local/mysql/bin/mysql.server
# chown mysql. -R /usr/local/mysql
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
관리할 폴더 생성
# mkdir /usr/local/mysql/logs
# chmod 755 /usr/local/mysql/tmp
# chmod 755 /usr/local/mysql/logs
# chown -R mysql. /usr/local/mysql
링크 생성
# ln -s /usr/local/mysql/bin/mysql /usr/bin/
# echo "/usr/local/mysql/bin/mysql.server start" >> /etc/rc.local
# /usr/local/mysql/bin/mysql.server start
# /usr/local/mysql/bin/mysql_secure_installation
mysql이나 mariadb의 설치는 동일하다고 보면 된다.
replication (필요시...)
master 에서 실행
# show master status;
slave 에서 실행.
# CHANGE MASTER TO
MASTER_HOST='master ip',
MASTER_USER='마스터에 접속할 계정',
MASTER_PASSWORD='마스터에 접속할 비밀번호',
MASTER_LOG_FILE='마스터에서 정보 조회 후 설정',
MASTER_LOG_POS=마스터에서 정보 조회 후 설정;
# START SLAVE;
Slave에서 err를 확인하여 아래의 메시지가 있으면 접속 성공
Slave I/O thread: connected to master 'useid@hostname:3306',replicat
ion started in log 'mysql-bin.00000x' at position xxx
9. php 설치
# tar zxvf php-5.x.x.tar.gz
# cd php-5.x.x
# yum -y install libxml2-devel libpng-devel freetype-devel freetype2-devel gmp-devel libmcrypt libmcrypt-devel gd libjpeg-devel glibc glibc-devel glib2 glib2-devel GeoIP*
# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-iconv=/usr/local \
--with-freetype-dir --with-jpeg-dir --with-png-dir --with-gd --enable-gd-native-ttf \
--with-mcrypt --with-curl --with-gmp --with-zlib --with-openssl --with-pear --with-bz2 \
--enable-mbstring --enable-mbregex --enable-bcmath --enable-inline-optimization -enable-sockets \
--enable-fpm
# gmake
# gmake install
# mkdir /usr/local/php/logs
# cp php.ini-production /usr/local/php/etc/php.ini
# rm -rf /usr/bin/php
# ln -s /usr/local/php/bin/php /usr/bin/
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vim /usr/local/php/etc/php-fpm.conf (알아서설정)
# echo "/usr/local/php/sbin/php-fpm" >> /etc/rc.local
# vim /usr/local/php/etc/php.ini (알아서설정)
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
# /usr/local/php/sbin/php-fpm
10. ioncube loader 설치 (소스 중에 주요부분은 사용하고 있어서 사용. 근데 이거 은근 메모리 많이 먹는다.)
# wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
# tar xfz ioncube_loaders_lin_x86-64.tar.gz
# mv ioncube /usr/local/
# vim /usr/local/php/etc/php.ini
zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.3.so (추가)
date.timezone = Asia/Shanghai (수정)
php 재시작
# killall php-fpm
# /usr/local/php/sbin/php-fpm
11. Zend 설치 (근데 요즘 사용안 하기 때문에 열외)
# tar xvfpz ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
# mkdir /usr/local/zend/
# cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so /usr/local/zend/
# vi /usr/local/php/etc/php.ini
[Zend]
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_extension=/usr/local/zend/ZendGuardLoader.so
php 재시작
# killall php-fpm
# /usr/local/php/sbin/php-fpm
12. nginx 설치
# tar xzvf nginx-1.x.x.tar.gz
# cd nginx-1.x.x/
# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-http_geoip_module --with-http_realip_module --with-http_image_filter_module
# gmake
# gmake install
# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
# vim /usr/local/nginx/conf/nginx.conf (알아서 설정)
# /usr/local/nginx/sbin/nginx
13. GepIP
# yum -y install GeoIP GeoIP-devel GeoIP-data perl-Geo-IP
# vim /usr/local/nginx/conf/nginx.conf 에 추가
geoip_country /var/lib/GeoIP/GeoIP.dat;
해당 가상호스트 설정 부분의 php 설정에 추가
fastcgi_param COUNTRY $geoip_country_code;
14. 바코드 설치
# wget http://mirror.yongbok.net/gnu/barcode/barcode-0.98.tar.gz
# tar xfvz barcode-0.98.tar.gz
# cd barcode-0.98
# ./configure
# gmake
# gmake install
# ldconfig
# wget http://www.ashberg.de/php-barcode/download/files/genbarcode-0.4.tar.gz
# tar xvfz genbarcode-0.4.tar.gz
# cd genbarcode-0.4
# gmake
# gmake install
php 예제....
# wget http://www.ashberg.de/php-barcode/download/files/php-barcode-0.4.tar.gz
# tar xvfpz php-barcode-0.4.tar.gz
# cd php-barcode-0.4
15. munin 설치 (nginx, php, mysql, mariadb 등의 plugin은 알아서들 설치)
# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# yum install munin-node -y
# vim /etc/munin/munin-node.conf
# chkconfig munin-node on
# /etc/init.d/munin-node start
16. monit 설치 (munin 이 정상적으로 잘 돌고 있는 지 감시의 목적)
# tar xvfz monit-x.y.z.tar.gz
# cd monit-x.y.z
# ./configure --prefix=/usr/local/monit
# gmake
# gmake install
17. goaccess 설치
# wget http://sourceforge.net/projects/goaccess/files/0.4.2/goaccess-0.4.2.tar.gz/download
# ./configure
# make
# make install
18. sphinx 설치... (이건 워낙 확장들이 많아서... 난 우선 중국에 있어 sphinx-chinese 를 사용)
참조 http://www.sphinx-search.com/ 여기 가면 친절히 설명이 되어있다.
tune 하는 부분은 따로 포스트 할 생각이다.
위의 내용은 아주아주 기본적인 설치이며... pmap으로 각 process를 모니터링 & 튠해야 한다.
피드 구독하기:
글 (Atom)
Articles
-
요즘 회사 내부에서 쇼핑 관련 추천이나 여러가지 고민을 해보던중에... 발견한 내용...ㅋㅋㅋ 울 회사는 외부 연구기관에다가 의뢰하여 개별 시나리오를 작성하여 상품 수명 등 여러가지를 해봤는데... 이미 이런 추천 내용이 있어... 다시 고민...
-
Load Balance Mysql Slaves Using MySQLProxy I am sure you all have read about MySQL replication, like Master-Master, Single Master - ...
-
아래 기술한 5가지는 해 놓으시면 좋습니다. 차후에 관련해서 큰 고민을 덜어놓을수 있으니까요. 1. 과학기술인공제회 가입 2. 한이음 멘토 신청 3. 산업통상자원부 전문가 풀 등록 4. 감리원 교육 신청 5. Skill up of an E...
-
百度搜索网站登录口:http://www.baidu.com/search/url_submit.html Google网站登录口:http://www.google.com/intl/zh-CN/add_url.html 孙悟空网站登录口:http://www.sunwuk...
-
webman21님의 블로그 | webman21 http://blog.naver.com/webman21/17890936 인덱스를 선택하는 것은 많은 SQL Server DBA와 개발자에게 신비로운 대상이다. 물론 우리는 인...
-
1. Virtual Columns MariaDB 5.2부터 지원되는 Virtual Columns은 가상의 칼럼을 둬서 수식과 조건문을 사용해 데이터의 가공 결과를 저장하는 것을 말한다. 사용 시 PERSISTENT(stored)와 VIRTUAL...
-
Overview “ 트위터의 새로운 분산 관리 라이브러리 Gizzard를 소개합니다. “를 알아보던 당시 부사수 “임창선”님과 진행했던 또 다른 해외 사례 “Tumblr”를 정리해보았습니다. Tumblr 는 국내에서는 사용자가 많지는 않지만,...
-
I’m happy to post today there is now support for a generic push notifications plugin for PhoneGap Build . The new plugin is called PushP...
-
눈도 고치고, 코도 고치고, 입도 고치고, 여기 저기 성형 수술한 사람을 얼마전 TV에서 보았다. 다들 놀랐다. 그렇게 많은 돈을 들여서 수술했음에도 우리가 생각했던 그런 미인은 아니였다. 이상하게 보이기까지 했다. 눈도 크고, 코도 오똑하고, 입...
-
나는 Python이 좋다. 하지만 Python은 느리다 뭐가 느리냐 하면 지명적인 것이지만 사칙연산이 느리다. 하지만 동적으로 형이 정의되는 다른 스크립트 언어(Perl, Ruby, Javascript)도 C, Java처럼 컴파일을 하는 정적형...