nginx + keepalived 부하 균형 (1)
1 기획 과 준비
통합 접근 이 필요 한 응용 시스템:
응용 시스템
도 메 인 이름 / 가상 디 렉 터 리
응용 서버 및 URL
svn
dev.mycompany.com/svn
http://50.1.1.21/svn
svn 웹 관리
dev.mycompany.com/submin
http://50.1.1.21/submin
사이트
www.mycompany.com
http://50.1.1.10; http://50.1.1.11; http://50.1.1.12
OA
oa.mycompany.com
http://50.1.1.13:8080; http://50.1.1.14:8080
웹 액세스 서버
두 대의 접속 서버 50.1.1.3 / 4 를 각각 위주 로 하고 (MASTER, BACKUP) 서버 를 준비 하 며 RHEL 5.6x 64 를 사용 하여 yum 사복 을 설정 했다.
두 대 접속 서버 공용 가상 IP (VIP): 50.1.1.2
2 설치
두 대의 접속 서버 에 각각 NginX 와 keepalived 를 설치 합 니 다.
# :
yum -y install gcc pcre-devel zlib-devel openssl-devel
#
wget http://nginx.org/download/nginx-1.2.4.tar.gz
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
# NginX
tar zxvf nginx-1.2.4.tar.gz
cd nginx-1.2.4
./configure
make && make install
# keepalived
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure
make
make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
#
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
echo "/etc/init.d/keepalived start" >> /etc/rc.local
3 설정
3.1 NginX 설정
서버 에 접속 한 NginX 두 대의 설정 은 똑 같 습 니 다. 주로 설정 / usr / local / nginx / conf / nginx. conf 의 http 입 니 다.그 중에서 도 메 인 이름 은 가상 호스트 (http 아래 server 설정) 를 통 해 이 루어 집 니 다.같은 도 메 인 이름 의 서로 다른 가상 디 렉 터 리 는 각 server 아래 의 서로 다른 location 을 통 해 이 루어 집 니 다.백 엔 드 에 있 는 서버 는 http 아래 upstream 을 설정 한 다음 server 나 location 에서 proxypass 를 통 해 참조 합 니 다.앞에서 계획 한 접속 방식 을 실현 하려 면 http 의 설정 은 다음 과 같 습 니 다.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
upstream dev.hysec.com {
server 50.1.1.21:80;
}
upstream www.hysec.com {
ip_hash;
server 50.1.1.10:80;
server 50.1.1.11:80;
server 50.1.1.12:80;
}
upstream oa.hysec.com {
ip_hash;
server 50.1.1.13:8080;
server 50.1.1.14:8080;
server {
listen 80;
server_name dev.hysec.com;
location /svn {
proxy_pass http://dev.hysec.com;
}
location /submin {
proxy_pass http://dev.hysec.com;
}
}
server {
listen 80;
server_name www.hysec.com;
location / {
proxy_pass http://www.hysec.com;
}
server {
listen 80;
server_name oa.hysec.com;
location / {
proxy_pass http://oa.hysec.com;
}
}
검증 방법:
먼저 IP 로 이전 표 의 각 응용 서버 의 url 에 접근 한 다음 도 메 인 이름과 경로 로 이전 표 의 각 응용 시스템 의 도 메 인 / 가상 경 로 를 방문 합 니 다.
3.2 keepalived 설정
위의 설치 방법 에 따라 keepalived 의 설정 파일 은 / etc / keepalived / keepalived. conf 에 있 습 니 다.주, 서버 설정 과 관련 이 있 지만 다 릅 니 다.다음 과 같다.
마스터 설정
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server smtp.hysec.com
smtp_connect_timeout 30
router_id nginx_master
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
50.1.1.2
}
}
백업 설정
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server smtp.hysec.com
smtp_connect_timeout 30
router_id nginx_backup
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
50.1.1.2
}
}
인증:
주, 서버 에서 keepalived: / etc / init. d / keepalived start 를 시작 합 니 다.
홈 서버 에서 가상 IP: ip addr 가 연결 되 어 있 는 지 확인 합 니 다.
홈 서버 의 keepalived 정지: / etc / init. d / keepalived stop 그리고 서버 에서 가상 IP 가 연결 되 어 있 는 지 확인 하기 홈 서버 의 keepalived 를 시작 하여 홈 서버 가 가상 IP 를 다시 연결 할 수 있 는 지 확인 합 니 다 3.3 keepalived 로 하여 금 NginX 의 상 태 를 감시 하 게 한다.
앞의 설정 을 통 해 메 인 서버 의 keepalived 가 서 비 스 를 중단 하면 서버 에서 VIP 대외 서 비 스 를 자동 으로 받 습 니 다.홈 서버 의 keepalived 가 복구 되면 VIP 를 다시 인수 합 니 다.그러나 이것 은 우리 가 필요 로 하 는 것 이 아니다. 우리 가 필요 로 하 는 것 은 NginX 가 서 비 스 를 중단 할 때 자동 으로 전환 할 수 있다 는 것 이다.
keepalived 는 모니터링 스 크 립 트 설정 을 지원 합 니 다. 우 리 는 스 크 립 트 를 통 해 NginX 의 상 태 를 모니터링 할 수 있 습 니 다. 상태 가 정상 적 이지 않 으 면 일련의 작업 을 할 수 있 습 니 다. 결국 NginX 를 복원 하지 못 하면 keepalived 를 죽여 서버 에서 서 비 스 를 받 을 수 있 습 니 다.
NginX 의 상 태 를 어떻게 감시 하 는 지 가장 간단 한 방법 은 NginX 프로 세 스 를 감시 하 는 것 입 니 다. 더욱 확실한 방법 은 NginX 포트 를 검사 하 는 것 입 니 다. 가장 확실한 방법 은 여러 url 이 페이지 를 가 져 올 수 있 는 지 검사 하 는 것 입 니 다.
서비스 복 구 를 시도 하 는 방법 NginX 가 정상 이 아 닌 것 을 발견 하면 다시 시작 합 니 다.3 초 를 기 다 렸 다가 다시 검사 합 니 다. 실패 하면 시도 하지 않 습 니 다.
위 정책 에 따라 감시 스 크 립 트 를 쉽게 작성 할 수 있 습 니 다.여 기 는 nmap 검사 nginx 포트 를 사용 하여 nginx 의 상 태 를 판단 합 니 다. nmap 를 먼저 설치 해 야 합 니 다.모니터링 스 크 립 트 는 다음 과 같 습 니 다:
#!/bin/sh
# check nginx server status
NGINX=/usr/local/nginx/sbin/nginx
PORT=80
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
$NGINX
sleep 3
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
스 크 립 트 의 실행 권한 을 설정 하 는 것 을 잊 지 마 세 요. 그렇지 않 으 면 효과 가 없습니다.
위 스 크 립 트 를 / opt / chk 에 두 었 다 고 가정 합 니 다.nginx. sh 는 keepalived. conf 에 다음 설정 을 추가 합 니 다.
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight 2
}
track_script {
chk_http_port
}
더 나 아가 keepalived 를 시작 하기 전에 nginx 를 시작 하지 않도록 / etc / init. d / keepalived 의 start 에서 먼저 nginx 를 시작 할 수 있 습 니 다.
start() {
/usr/local/nginx/sbin/nginx
sleep 3
echo -n $"Starting $prog: "
daemon keepalived ${KEEPALIVED_OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
4. 또 뭘 할 수 있어 요?
단순 반복 적 인 노동 에 있어 서 사람 은 항상 실 수 를 하기 쉬 우 므 로 이런 일 은 기계 에 맡 기 는 것 이 가장 좋다.예 를 들 어 이 사례 에서 통합 접속 서버 로 서 nginx 의 설정, nginx 아래 html 파일 등 을 자주 수정 해 야 할 수 있 습 니 다.그리고 클 러 스 터 의 모든 서버 설정 이 같 도록 해 야 한다.가장 좋 은 방법 은 설정 관리 서버 에서 관리 하 는 것 입 니 다. 없 으 면 간단 한 Liux 파일 로 동기 화 할 수 있 습 니 다.
5 https 지원
openSSL 을 설치 해 야 합 니 다:
yum install openssl-devel
nginx / conf 에서 비밀 키 생 성:
# RSA
openssl dsaparam -rand -genkey -out myRSA.key 1024
# CA :( )
openssl gendsa -des3 -out cert.key myRSA.key
# CA ,
openssl req -new -x509 -days 365 -key cert.key -out cert.pem
# root
chmod 700 cert.*
#
openssl rsa -in cert.key -out cert.key.unsecure
SSL 을 사용 하려 면 먼저 nginx 를 설치 할 때 설정 파 라미 터 를 추가 해 야 합 니 다. - with - httpssl_module, 그리고 nginx 에서 다음 설정 을 진행 합 니 다:
# SSL
server {
listen 443;
server_name www.example.com; #
root /home/www;
ssl on;
ssl_certificate cert.perm;
# .unsecure nginx
ssl_certificate_key cert.key.unsecure;
location / {
#...
}
}
공공 인증서 의 신청 과정:
RSA (비밀 키) 파일 생 성:
openssl genrsa -des3 -out myRSA.key 2048
csr 파일 생 성: openssl req -new -key myRSA.key -out my.csr
csr 를 인증서 기관 에 제출 합 니 다. 예 를 들 어 GlobalSign. 인증서 기 구 는 개인 인증서 (crt) 와 중급 인증서 (crt) 를 되 돌려 줍 니 다.
기관 사이트 에 루트 인증서 (root CA. cer) 를 다운로드 하고 루트 인증 서 를 개인 인증서 에 연결 한 후 nginx 에서 인증서 설정:
ssl_certificate /etc/ssl/my.crt;
ssl_certificate_key /etc/ssl/myRSA.key;
ssl_client_certificate /etc/ssl/root_CA.cer;
6 웹 서비스 지원
chunkin - nginx - module 모듈 을 통 해 웹 서 비 스 를 지원 합 니 다.
그렇지 않 으 면 오류 가 발생 합 니 다: 411: http 헤드 에 Content - Length 인자 가 부족 합 니 다.
단계:
git clone https://github.com/agentzh/chunkin-nginx-module.git
# nginx
cd PATH/TO/NGINX/SOURCE
./configure xxx --add-module=/PATH/TO/chunkin-nginx-module
make && make install
nginx 의 server {} 노드 에 설정 추가:
chunkin on;
error_page 411 = @my_411_error;
location @my_411_error {
chunkin_resume;
}
7 상태 모니터링
컴 파일 할 때 인 자 를 추가 해 야 합 니 다
--with-http_stub_status_module
.컴 파일 매개 변수 보기: 명령 사용
/usr/local/nginx/sbin/nginx -V
설치 후 설정 추가:
location /nginx_status {
stub_status on;
access_log off;
# deny all;
allow all;
}
설정 을 다시 불 러 오 면 텍스트 를 볼 수 있 습 니 다:
Active connections: 1 (백 엔 드 에 대한 활동 연결 수)
server accepts handled requests
55 (연결 개수 처리, 악수 성공 횟수, 처리 요청 수)
읽 기: 0 쓰기: 1 대기: 0 (클 라 이언 트 헤더 수 를 읽 고 클 라 이언 트 헤더 수 를 되 돌려 줍 니 다. 대기 수 는 active - reading - writing)
다음으로 이동:http://thinkinside.tk/2013/05/27/nginx_keepalived.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.