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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

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,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
105 0
|
11天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
18 4
|
12天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
27 3
|
1月前
|
应用服务中间件 网络安全 nginx
nginx作为web服务以及nginx.conf详解
nginx作为web服务以及nginx.conf详解
|
25天前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
96 0
|
2月前
|
负载均衡 网络协议 应用服务中间件
web群集--rocky9.2源码部署nginx1.24的详细过程
Nginx 是一款由 Igor Sysoev 开发的开源高性能 HTTP 服务器和反向代理服务器,自 2004 年发布以来,以其高效、稳定和灵活的特点迅速成为许多网站和应用的首选。本文详细介绍了 Nginx 的核心概念、工作原理及常见使用场景,涵盖高并发处理、反向代理、负载均衡、低内存占用等特点,并提供了安装配置教程,适合开发者参考学习。
|
3月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
123 2
|
3月前
|
负载均衡 前端开发 应用服务中间件
FastDFS+Nginx+fastdfs-nginx-module集群搭建
FastDFS+Nginx+fastdfs-nginx-module集群搭建
|
3月前
|
前端开发 应用服务中间件 nginx
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
71 1