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,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
11月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
979 87
|
11月前
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
427 14
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
513 20
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
1850 13
|
应用服务中间件 Linux nginx
CentOS7安装Nginx
CentOS7安装Nginx
|
安全 NoSQL MongoDB
mongoDB CentOS7.2集群部署
1.关闭selinux vi /etc/selinux/config SELINUX=disabled setenforce 0   2.
1886 0
|
8月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1423 69
|
7月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
3108 3
|
8月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
705 78
|
9月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
349 80
下一篇
开通oss服务