Centos6下nginx+keepalived构建高可用web集群

简介:

1)拓扑描述:

wKiom1gcU2yTgDzgAADirr4wI8M594.png

2) nginx的安装准备

pcre:兼容的正则表达式,nginx也要支持伪静态

1
2
3
4
# yum -y install pcre pcre-devel
# yum -y install openssl*
# mkdir -p /application/nginx1.6.2
# ln -s /application/nginx1.6.2 /application/nginx

3) 安装nginx

1
2
3
4
5
6
7
8
# cd /usr/local/src
# tar xf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# useradd nginx -s /sbin/nologin -M
# ./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module
# echo $?
0
# make && make install

4) 启动nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
检查语法:
# /application/nginx1.6.2/sbin/nginx -t
nginx: the configuration  file  /application/nginx1 .6.2 /conf/nginx .conf syntax is ok
nginx: configuration  file  /application/nginx1 .6.2 /conf/nginx .conf  test  is successful
启动nginx:
# /application/nginx/sbin/nginx 
查看端口号:
# lsof -i :80
COMMAND   PID  USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
nginx   14603  root    6u  IPv4  29397      0t0  TCP *:http (LISTEN)
nginx   14604 nginx    6u  IPv4  29397      0t0  TCP *:http (LISTEN)
# netstat -tunlp | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      14603 /nginx 
测试网页页面:
# curl -I localhost
HTTP /1 .1 200 OK
Server: nginx /1 .6.2
Date: Tue, 20 Sep 2016 02:17:20 GMT
Content-Type: text /html
Content-Length: 612
Last-Modified: Tue, 20 Sep 2016 02:11:05 GMT
Connection: keep-alive
ETag:  "57e09ab9-264"
Accept-Ranges: bytes

5)配置nginx启动脚本

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# vim /etc/init.d/nginx
#!/bin/sh  
# chkconfig: 2345 85 15  
# description:Nginx Server  
# nginx的安装目录
NGINX_HOME= /application/nginx  
# nginx的命令
NGINX_SBIN=$NGINX_HOME /sbin/nginx  
# nginx的配置文件
NGINX_CONF=$NGINX_HOME /conf/nginx .conf  
# nginx的pid
NGINX_PID=$NGINX_HOME /logs/nginx .pid  
   
NGINX_NAME= "Nginx"  
   
/etc/rc .d /init .d /functions  
   
if  [ ! -f $NGINX_SBIN ]  
then  
     echo  "$NGINX_NAME startup: $NGINX_SBIN not exists! "  
     exit  
fi  
   
start() {  
     $NGINX_SBIN -c $NGINX_CONF  
     ret=$?  
     if  [ $ret - eq  0 ];  then  
         action $ "Starting $NGINX_NAME: "  /bin/true  
     else  
         action $ "Starting $NGINX_NAME: "  /bin/false  
     fi  
}  
   
stop() {  
     kill  ` cat  $NGINX_PID`  
     ret=$?  
     if  [ $ret - eq  0 ];  then  
         action $ "Stopping $NGINX_NAME: "  /bin/true  
     else  
         action $ "Stopping $NGINX_NAME: "  /bin/false  
     fi  
}  
   
restart() {  
     stop  
     start  
}  
   
check() {  
     $NGINX_SBIN -c $NGINX_CONF -t  
}  
   
   
reload() {  
     kill  -HUP ` cat  $NGINX_PID` &&  echo  "reload success!"  
}  
   
relog() {  
     kill  -USR1 ` cat  $NGINX_PID` &&  echo  "relog success!"  
}  
   
case  "$1"  in  
     start)  
         start  
         ;;  
     stop)  
         stop  
         ;;  
     restart)  
         restart  
         ;;  
     check|chk)  
         check  
         ;;  
     status)  
         status -p $NGINX_PID  
         ;;  
     reload)  
         reload  
         ;;  
     relog)  
         relog  
         ;;  
     *)  
         echo  $ "Usage: $0 {start|stop|restart|reload|status|check|relog}"  
         exit  1  
esac
# chmod +x /etc/init.d/nginx
# /etc/init.d/nginx start
# chkconfig --add nginx
# chkconfig nginx on

6) 配置nginx的upstream功能(两台负载均衡器上做相同的配置)

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
# egrep -v '#' /application/nginx/conf/nginx.conf|grep -v '^$'
worker_processes  1;
events {
     worker_connections  1024;
}
http {
     include       mime.types;
     default_type  application /octet-stream ;
     include extra /upstream01 .conf;
     sendfile        on;
     keepalive_timeout  65;
     server {
         listen       80;
         server_name  localhost;
         location / {
             root   html;
             index  index.html index.htm;
         }
         error_page   500 502 503 504   /50x .html;
         location =  /50x .html {
             root   html;
         }
     }
}
说明:注意include extra /upstream01 .conf这个文件,是引用此文件(两台负载均衡器上做系统的nginx配置)
# mkdir -p /application/nginx/conf/extra/
# vim /application/nginx/conf/extra/upstream01.conf 
upstream nginx.wanwan.com {
server 10.10.10.128:80 weight=5;
server 10.10.10.132:80 weight=5;
     }
server {
listen80;
server_namenginx.wanwan.com;
location / {
proxy_pass http: //nginx .wanwan.com;
}
}
# /etc/init.d/nginx restart
Stopping Nginx:                                            [确定]
Starting Nginx:                                            [确定]


7)keepalived的安装

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# cd /usr/local/src
# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
# ln -s /usr/src/kernels/2.6.32-573.el6.x86_64/ /usr/src/linux
# ls -l /usr/src
总用量 244
drwxr-xr-x. 2 root root   4096 9月  23 2011 debug
-rw-r--r--  1 root root 241437 1月  28 2014 keepalived-1.1.19. tar .gz
drwxr-xr-x. 3 root root   4096 7月   5 23:49 kernels
lrwxrwxrwx  1 root root     39 8月  31 08:49 linux ->  /usr/src/kernels/2 .6.32-573.el6.x86_64/
# tar xf keepalived-1.1.19.tar.gz 
# cd keepalived-1.1.19
# ./configure 
# make && make install
# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir -p /etc/keepalived
# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/sbin/keepalived /usr/sbin/
# /etc/init.d/keepalived start
正在启动 keepalived:                                      [确定]
# ps -ef | grep keepalived
root      18750      1  0 22:55 ?        00:00:00 keepalived -D
root      18752  18750  0 22:55 ?        00:00:00 keepalived -D
root      18753  18750  0 22:55 ?        00:00:00 keepalived -D
root      18755  18664  0 22:55 pts /0     00:00:00  grep  keepalived
keepalived-master的配置文件 /etc/keepalived/keepalived .conf
[root@nginx01 extra] # cat /etc/keepalived/keepalived.conf
! Configuration File  for  keepalived
global_defs {
    notification_email {
    314324506@qq.com
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server smtp.qq.com
    smtp_connect_timeout 30
    router_id nginx_7
}
vrrp_instance VI_231 {
     state MASTER
     interface eth0
     virtual_router_id 231
     priority 150
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         10.10.10.231 /24
     }
}
}
keepalived-slave的配置文件 /etc/keepalived/keepalived .conf
[root@nginx02 ~] # cat /etc/keepalived/keepalived.conf
! Configuration File  for  keepalived
global_defs {
    notification_email {
    314324506@qq.com
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server smtp.qq.com
    smtp_connect_timeout 30
    router_id nginx_7
}
vrrp_instance VI_231 {
     state BACKUP
     interface eth0
     virtual_router_id 231
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         10.10.10.231 /24
     }
}
}

8) 测试keepalived的功能(VIP为10.10.10.231)

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[root@nginx01 extra] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:d7:3e:f8 brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.131 /24  brd 10.10.10.255 scope global eth0
     inet 10.10.10.231 /24  scope global secondary eth0
     inet6 fe80::20c:29ff:fed7:3ef8 /64  scope link 
        valid_lft forever preferred_lft forever
[root@nginx02 ~] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:71:33:eb brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.135 /24  brd 10.10.10.255 scope global eth0
     inet6 fe80::20c:29ff:fe71:33eb /64  scope link 
        valid_lft forever preferred_lft forever
    
关闭主负载均衡上的keepalived功能
[root@nginx01 extra] # /etc/init.d/keepalived stop
停止 keepalived:                                          [确定]
[root@nginx01 extra] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:d7:3e:f8 brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.131 /24  brd 10.10.10.255 scope global eth0
     inet6 fe80::20c:29ff:fed7:3ef8 /64  scope link 
        valid_lft forever preferred_lft forever
    
[root@nginx02 ~] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:71:33:eb brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.135 /24  brd 10.10.10.255 scope global eth0
     inet 10.10.10.231 /24  scope global secondary eth0
     inet6 fe80::20c:29ff:fe71:33eb /64  scope link 
        valid_lft forever preferred_lft forever
由上,我们可以知道vip很快就进行了切换,那么我们恢复主负载均衡器上的keepalived功能:
[root@nginx01 extra] # /etc/init.d/keepalived start
正在启动 keepalived:                                      [确定]
[root@nginx01 extra] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:d7:3e:f8 brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.131 /24  brd 10.10.10.255 scope global eth0
     inet 10.10.10.231 /24  scope global secondary eth0
     inet6 fe80::20c:29ff:fed7:3ef8 /64  scope link 
        valid_lft forever preferred_lft forever
[root@nginx02 ~] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:71:33:eb brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.135 /24  brd 10.10.10.255 scope global eth0
     inet6 fe80::20c:29ff:fe71:33eb /64  scope link 
        valid_lft forever preferred_lft forever
由上,我们发现当主负载均衡器恢复后,vip很快就切换过来了(因为主负载均衡器上的优先级更高)

9)测试nginx的反向代理功能

1
2
3
4
[root@web01 ~] # curl 10.10.10.128
mysql successful by oldboy !
[root@web01 ~] # curl 10.10.10.132
this is web02's website

然后我们在客户端打开nginx.wanwan.com

wKioL1gcU-DjowozAABMVcbnhoU953.png

按F5刷新:

wKiom1gcU-DRKKrtAAA_BlFDMCI648.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@nginx01 extra] # /etc/init.d/nginx stop
Stopping Nginx:                                            [确定]
[root@nginx01 extra] # ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     link /loopback  00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1 /8  scope host lo
     inet6 ::1 /128  scope host 
        valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link /ether  00:0c:29:d7:3e:f8 brd ff:ff:ff:ff:ff:ff
     inet 10.10.10.131 /24  brd 10.10.10.255 scope global eth0
     inet 10.10.10.231 /24  scope global secondary eth0
     inet6 fe80::20c:29ff:fed7:3ef8 /64  scope link 
        valid_lft forever preferred_lft forever
[root@nginx01 extra] # /etc/init.d/keepalived stop
停止 keepalived:

wKioL1gcVOahs1YUAABK74YFZYY434.png

wKioL1gcVOfzfB13AABH_SsJYKs009.png

由上可知,后端网页仍旧正常。


10)注意事项

a、注意关闭负载均衡器以及web后端服务器的iptables以及selinux功能

b、两台负载均衡器上关于nginx配置是一致的,keepalived有不同的优先级










本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1869558,如需转载请自行联系原作者
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
负载均衡 应用服务中间件 Linux
高可用系列文章之三 - NGINX 高可用实施方案
高可用系列文章之三 - NGINX 高可用实施方案
|
3月前
|
负载均衡 Ubuntu 应用服务中间件
【Linux】Web服务之Nginx服务
【Linux】Web服务之Nginx服务
38 0
|
25天前
|
前端开发 应用服务中间件 nginx
使用Docker快速搭建Web服务器Nginx
本文指导如何使用Docker快速搭建Nginx服务器。首先,通过`docker pull`命令获取Nginx镜像,然后以容器形式运行Nginx并映射端口。通过挂载目录实现本地文件与容器共享,便于自定义网页。使用`docker ps`检查运行状态,访问IP:8088确认部署成功。最后,介绍了停止、删除Nginx容器的命令,强调Docker简化了服务器部署和管理。
39 0
|
1月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。
|
1月前
|
SQL JSON 应用服务中间件
web后端-win-phpMySql-nginx-web发布
web后端-win-phpMySql-nginx-web发布
|
1月前
|
应用服务中间件 Linux nginx
web后端-linux-nginx-1.18操作命令和部署
web后端-linux-nginx-1.18操作命令和部署
|
1月前
|
安全 应用服务中间件 nginx
|
2月前
|
负载均衡 JavaScript 应用服务中间件
强大的WEB服务器-Nginx
强大的WEB服务器-Nginx
29 0
|
2月前
|
Kubernetes 应用服务中间件 nginx
K8S Pod Sidecar 应用场景之一 - 加入 NGINX Sidecar 做反代和 web 服务器
K8S Pod Sidecar 应用场景之一 - 加入 NGINX Sidecar 做反代和 web 服务器
|
2月前
|
应用服务中间件 nginx
将树莓派转身为强大的Web服务器:使用Nginx和cpolar实现远程访问
安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时结合cpolar 内网穿透工具即可实现远程访问。