chap4_2
DESCRIPTION
how to config apache/mysql for ha(high availability)TRANSCRIPT
4.2 아파치 튜닝
웹 서버가 병목현상?
- 웹 서버의 설정과는 관계없는 경우가 대부분- 4.1에서 살펴본 ps, sar, vmstat 활용- 그렇지 않으면 다음단계로
- 아파치는 내부의 각종 기능이 모듈화- 병렬처리를 수행하는 부분도 모듈화
병렬처리의 구현모델- 멀티프로세스 모델 - prefork- 멀티쓰레드 모델 - worker- 이벤트 구동 모델 - event(epoll, select)
아파치의 병렬처리&MPM
멀티프로세스 모델
prefork vs worker
multi-process vs multi-thread
multi-process <<<<<<< multi-thread??
멀티프로세스의 문제점?
- 메모리 공간 낭비? 부모와 자식 프로세스에서 갱신 되지 않은 메모리 공간은 공유된다(copy on write)
- context switching 비용? 대량의 context switching이 아니면 비용은 크지 않다
Copy on write란..?
prework --> worker
- 하나의 클라이언트에 대한 응답시간이 고속화되는것은 아님- 메모리가 충분하다면 동시에 처리할 수 있는 접속수는 변하지 않음- 대량의 컨텍스트 스위치가 없다면 효과는 크지 않다
; 핵심은 동시에 생성 할 수 있는 프로세스/스레드 수 설정
httpd.conf
- 불특정 다수의 클라이언트 요청을 받음그래서 언제 어느 정도의 트래픽이 발생할지 예상 불가
- 동시에 접속할 수 있는 클라이언트 개수의 상한값 지정(MaxClients)
-없다면, OS가 hang-up / 응답불가능
httpd.conf<IfModule mpm_prefork_module>
StartServers 5MinSpareServers 5MaxSpareServers 10MaxClients 150MaxRequestsPerChild 0
</IfModule>
ServerLimit 150
ServerLimit는 어느정도로..?
- 서버의 물리 메모리 용량 - 프로세스 하나당 평균 메모리 소비량
ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M OS가 사용하는 메모리 512M
ServerLimit는 어느정도로..?
- 서버의 물리 메모리 용량 - 프로세스 하나당 평균 메모리 소비량
ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M OS가 사용하는 메모리 512M
(8G - 512M) / 100M = 75
ServerLimit는 어느정도로..?
ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M 메모리 공유 비율 : 70% OS가 사용하는 메모리 512M
ServerLimit는 어느정도로..?
ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M 메모리 공유 비율 : 70% OS가 사용하는 메모리 512M
; (8G - 512) / (100M *(100%-70%)) = 240
httpd.conf<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0</IfModule>
ServerLimit >= MaxClients / ThreadPerChild
httpd.conf<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0</IfModule>
ServerLimit >= MaxClients / ThreadPerChild; 150 / 25 = 6
DB과부화로 인한 Maxclient수 도달
Kepp-Alive
- 한번의 커넥션을 유지해서 여러 작업 수행- 병목현상이 발생할 가능성 있슴
KeepAlive OnMaxKeppAliveRequests 100KeppAliveTimeout 5
아파치 이외의 선택방안
lighttpd - SPED(Single Process Event Driven)모델 - 적응 메모리로 대량의 접속을 동시병행적으로 처리 가능 - 싱글 프로세스라서 계산량이 적어짐 - 메모리 소비량도 적음
아파치 이외의 선택방안
lighttpd - SPED(Single Process Event Driven)모델 - 적응 메모리로 대량의 접속을 동시병행적으로 처리 가능 - 싱글 프로세스라서 계산량이 적어짐 - 메모리 소비량도 적음
4.3 MySQL 튜닝의 핵심
MySQL 튜닝의 핵심
튜닝의 종류 - 서버측 - 서버 측 이외 - 주변 시스템
MySQL 튜닝의 핵심
서버측 튜닝- mysql의 메모리관련 파라미터와 디스크 I/O관련된 파라미터 튜닝- 디스크 I/O와 관련된 커널 파라미터 조정- 적절한 파일시스템 선택, 마운트 옵션 조정- 파티셔닝
MySQL 튜닝의 핵심
서버 측 이외(DB설계 & SQL튜닝)- 테이블 설계적절한 인덱스 생성의도적인 비정규화
- SQL최적화인덱스를 제대로 사용하도록테이블 결합 순서, 방법 조정
MySQL 튜닝의 핵심
주변 시스템- DB서버 주변의 시스템 튜닝
memcached캐시 서버를 운영해, 데이터를 캐싱된데이터를 참조하도록 구축
-
메모리 관련 파라미터 튜닝 - 1
버퍼의 종류- 글로벌 버퍼- 쓰레드 버퍼
; 쓰레드 버퍼에 많은 메모리를 할당하면 커넥션 수 만큼 해당 메모리를 할당하기 떄문에, 메모리 부족 야기
메모리 관련 파라미터 튜닝 - 2
- 서버가 가진 물리 메모리 이상의 크기를 할당하면, 스왑이 발생하기 때문에, 반대로 성능이 하락
- MyISAM의 데이터 파일이 OS디스크 캐시에 올라가도록설정하는 것도 한 가지 방법
메모리 관련 파라미터 튜닝 - 21MB < innodb_log_file_size < MAX_innodb_log_file_size <4GB;innodb_log_file_size는 4GB이하로 설정
MAX_innodb_log_file_size = innodb_buffer_pool_size / innodb_log_files_in_group
;
innodb_buffer_pool_size;InnoDB의 데이터나 인덱스를 캐시하기 위한 메모리 상의 영역innodb_log_file_size;InnoDB의 갱신로그를 기록하는 디스크 상의 파일