结合keepalived实现nginx反向代理群集高可用
192.168.56.104
/etc/keepalived/keepalived.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
global_defs { router_id nginx-proxy-ha
} vrrp_script check_nginx { script "/home/lhb/sh/check_nginx.sh" ###监控脚本
interval 2 ###监控时间
weight 2 ###目前搞不清楚
} vrrp_instance VI_1{ state MASTER ### 设置为 主
interface eth0 ### 监控网卡
virtual_router_id 51 ### 这个两台服务器必须一样
priority 101 ### 权重值 MASTRE 一定要高于 BAUCKUP
authentication {
auth_type PASS ### 加密
auth_pass eric ### 加密的密码,两台服务器一定要一样,不然会出错
}
track_script {
check_nginx ### 执行监控的服务
}
virtual_ipaddress {
192.168.56.200 ### VIP 地址
}
} |
192.168.56.107
/etc/keepalived/keepalived.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
global_defs { router_id nginx-proxy-ha
} vrrp_script check_nginx { script "/home/lhb/sh/check_nginx.sh"
interval 2
weight 2
} vrrp_instance VI_1 { state BACKUP ### 设置为 辅机
interface eth0
virtual_router_id 51 ### 与 MASTRE 设置 值一样
priority 100 ### 比 MASTRE权重值 低
authentication {
auth_type PASS
auth_pass eric ### 密码 与 MASTRE 一样
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.56.200
}
} |
/home/lhb/sh/check_nginx.sh
1
2
3
4
5
6
7
8
9
|
#!/bin/bash A=` ps -C nginx --no-header | wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A - eq 0 ]; then ## 如果没有进程值得为 零
/usr/local/openresty/nginx/sbin/nginx
sleep 3
if [ ` ps -C nginx --no-header | wc -l` - eq 0 ]; then
killall keepalived ## 则结束 keepalived 进程
fi
fi |
192.168.56.104、192.168.56.107上nginx配置:
/usr/local/openresty/nginx/conf/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#user nobody; worker_processes 1; error_log logs /error .log;
error_log logs /error .log notice;
error_log logs /error .log info;
pid logs /nginx .pid;
events { worker_connections 1024;
} http { include mime.types;
default_type application /octet-stream ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"' ;
access_log logs /access .log main;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 1024k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text /plain application /x-javascript text /css application /xml ;
#gzip_vary on;
proxy_hide_header Vary;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
upstream backendserver {
#ip_hash;
server 192.168.56.105:80;
server 192.168.56.106:80;
}
server {
listen 80;
server_name localhost;
location / {
index index.html index.htm;
proxy_pass http: //backendserver ;
proxy_set_header Host $host;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_504;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_page 500 502 503 504 /50x .html;
location = /50x .html {
root html;
}
}
} |
本文转自birdinroom 51CTO博客,原文链接:http://blog.51cto.com/birdinroom/1402049,如需转载请自行联系原作者