开发者社区> 科技小先锋> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

构建高可用服务器之四 Keepalive冗余Nginx

简介:
+关注继续查看

实验目的:

使用Keepalive来保证Nginx的高可用,进而实现网站的高可用!

实验拓扑:

wKioL1Vd8J_DlQUsAANYKLe5in0201.jpg


实验环境:

如上拓扑图所示,masterslavemysql主从,且有discuz论坛,且已经做高可用。(可参加《构建高可用服务器之三Keepalive冗余Mysql)现在是刚搭建两台Nginx,均已安装keepaliveIP地址分别为192.168.1.2192.168.1.5(可参加《构建Nginx服务器之一安装及虚拟主机配置》《构建高可用服务器之一Keepalive介绍及安装》)


一、配置主机Nginx(192.168.1.2)

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
[root@nginx ~]# cat/usr/local/nginx/conf/nginx.conf
worker_processes  1;
  
events {
   worker_connections  1024;
}
  
http {
   include       mime.types;
   default_type  application/octet-stream;
  
   sendfile        on;
   keepalive_timeout  65;
###############################################################################
upstream discuz {
                server 192.168.1.3:80 weight=1max_fails=2 fail_timeout=30s;
                server 192.168.1.4:80 weight=1max_fails=2 fail_timeout=30s;
                        }
  
   server {
       listen       80;
       server_name  localhost;
  
         location/ {
          root   html;
          index  index.html index.htm;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP$remote_addr;
                proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://discuz;
       }
################################动静分离#######################################
  
         location~ .*\.(php|jsp|cgi|shtml)?$
             {
               proxy_set_header Host  $host;
               proxy_set_header X-Real-IP$remote_addr;
               proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_pass http://discuz;
             }
  
      location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
             {
                   root/usr/local/nginx/html;
                   expires      30d;
       }
#######################################################################
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
  
    }
  
}
[root@nginx ~]#

keepaive配置文件如下:

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
[root@nginx ~]# cat/etc/keepalived/keepalived.conf
! Configuration File for keepalived
  
global_defs {
  notification_email {
         654001593@qq.com
   }
  notification_email_from 654001593@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
}
  
vrrp_script chk_nginx {
         script"/data/sh/check_nginx.sh"
         interval2
         weight2
}
  
vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 251
   priority 100
   mcast_src_ip 192.168.1.2
   advert_int 1
   nopreempt
   authentication {
       auth_type PASS
       auth_pass 1111
    }
   virtual_ipaddress {
         192.168.1.88
    }
         track_script{
         chk_nginx
                        }
}

主机nginxkeepalive脚本文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@nginx ~]# mkdir -p /data/sh
[root@nginx ~]# touch check_nginx.sh
[root@nginx ~]# chmod +x check_nginx.sh
[root@nginx ~]# vim check_nginx.sh
[root@nginx ~]# mv check_nginx.sh /data/sh/
[root@nginx ~]# cat /data/sh/check_nginx.sh
#!/bin/bash
#Target: If Nginx Down, Stop keepalive!
#
killall -0 nginx
  
if [[ ! $? -eq 0 ]];then
         /etc/init.d/keepalived stop
fi
[root@nginx ~]#

加载模块

1
2
3
[root@nginx ~]# modprobe ip_vs
[root@nginx ~]# modprobe ip_vs_rr
[root@nginx ~]# modprobe ip_vs_wrr

启动服务

1
2
3
4
5
[root@nginx ~]# /etc/init.d/keepalivedrestart
Stopping keepalived:                                       [FAILED]
Starting keepalived:                                       [  OK  ]
[root@nginx ~]# /usr/local/nginx/sbin/nginx
[root@nginx ~]#

 

二、配置主机nginx2(192.168.1.5)

关于nginx服务配置文件:

nginx主机(192.168.1.2完全一致)

关于keepalive

只需要把配置文件keepalived.conf中的mcast_src_ip 192.168.1.2改为mcast_src_ip192.168.1.5

关于keepalived的脚步配置文件

nginx主机(192.168.1.2完全一致)

 

启动nginxkeepalive服务


三、测试

可以通过Nginx上的VIP 192.168.1.88访问

wKiom1Vd736gKvcSAAMJ9snZzk0177.jpg


停止nginx主机上的nginx服务,VIP自动漂移到nginx2上,论坛已经可以访问;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@nginx ~]# ps -ef | grep nginx
root     2067     1  0 21:31 ?        00:00:00 nginx: master process/usr/local/nginx/sbin/nginx
nobody   2070  2067  0 21:31 ?        00:00:00 nginx: worker process     
root     6302  1946  0 22:24 pts/0    00:00:00 grep nginx
[root@nginx ~]# /etc/init.d/keepalivedstatus
keepalived (pid  4430) is running...
[root@nginx ~]# pkill nginx
[root@nginx ~]# /etc/init.d/keepalivedstatus
keepalived is stopped
[root@nginx ~]# tail /var/log/messages
May 21 22:18:25 nginx NetworkManager[1517]:<info>   prefix 24 (255.255.255.0)
May 21 22:18:25 nginx NetworkManager[1517]:<info>   gateway 192.168.33.2
May 21 22:18:25 nginx NetworkManager[1517]:<info>   nameserver '192.168.33.2'
May 21 22:18:25 nginx NetworkManager[1517]:<info>   domain name 'localdomain'
May 21 22:24:20 nginx Keepalived:Terminating on signal
May 21 22:24:20 nginx Keepalived_vrrp:Terminating VRRP child process on signal
May 21 22:24:20 nginx Keepalived_vrrp:VRRP_Instance(VI_1) removing protocol VIPs.
May 21 22:24:20 nginxKeepalived_healthcheckers: Netlink reflector reports IP 192.168.1.88 removed
May 21 22:24:20 nginxKeepalived_healthcheckers: Terminating Healthchecker child process on signal
May 21 22:24:20 nginx Keepalived: StoppingKeepalived v1.1.15 (05/21,2015)
[root@nginx ~]#

此时VIP在nginx2主机上(192.168.1.5)

wKioL1Vd8SHgVtClAATMwrqe3jc019.jpg

论坛依旧可以访问,Nginx高可用实现成功。

wKioL1Vd8UajXK6lAAK0Ijzd7AY078.jpg


四、总结

1、  selinuxiptables注意要配置或关闭及清空。

2、  注意加载ip_vsip_vs_rrip_vs_wrr模块.(根据需要加载即可)。

3、  Nginx做的有动静分离,那么两台nginx上的网站发布目录要和后台apache网站发布目录内容完全一致。

4、编译安装keepalive的时候,指定的内核一定要与本机内核一致。

5、同一组keepalive的virtual_router_id必须一致,同一局域网内有多组keepalive的时候,virtual_router_id不能一致。

(这个拓扑图中,Mysql那一组keepalive的virtual_router_id一致均为51,Nginx那一组keepalive的virtual_router_id一致均为251,因为mysql与nginx在同一局域网内,所以这两组keepalive的virtual_router_id一定不能一样。)

6、  keepalive中开启nopreempt的时候,两台keepalivestate均为BACKUP

(nopreempt这个选项为非抢占,忽略优先级的存在,当nginx主机宕机的时候,VIP会飘到nginx2主机上,并且即使nginx主机恢复正常,VIP依旧指向nginx2,这样可以减少短暂服务中断的次数,2次变1)



本文转自Jacken_yang 51CTO博客,原文链接:http://blog.51cto.com/linuxnote/1653680,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
nginx服务器安装及配置文件详解
nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考。像负载均衡配置(包括健康检查)、缓存(包括清空缓存)配置实例,请参考http://seanlook.com/2015/05/17/nginx-install-and-config ,ssl加密请参考 http://seanlook.c
2193 0
Nginx 如何工作 负载均衡策略有哪些 如何限流
Nginx 如何工作 负载均衡策略有哪些 如何限流
51 0
nginx负载均衡的轮询机制
个人理解的Nginx中负载均衡的几种处理方式,以及它们的优缺点
3264 0
Nginx负载均衡_轮训策略与加权轮询
章节目录 Nginx 负载均衡调度策略 加权轮询演示 ip_hash url_hash Nginx 负载均衡调度策略 调度策略 含义 轮询 按照时间顺序,逐一分配到不同的后端服务器 加权轮询 weight值越大,分配到的访问几率越高 ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP的请求固定访问一个后端服务器,可以解决分布式session问题,但不是最优的解决办法,另一个即集中式session存储校验,将session放到redis集群当中。
1608 0
nginx 负载均衡,多站点共享Session
原文:nginx 负载均衡,多站点共享Session nginx 负载均衡,多站点共享Session 多站点共享Session常见的作法有: 使用.net自动的状态服务(Asp.net State Service); 使用.net的Session数据库; 使用Memcached。
1265 0
6963
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载