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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

实验目的:

使用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,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
937 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
4月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
784 1
|
4月前
|
人工智能 JavaScript 前端开发
用 Go 语言轻松构建 MCP 服务器
本文介绍了使用 Go 语言构建 MCP 服务器的完整过程,涵盖创建服务器实例、注册工具、资源和提示词,以及通过 stdio 和 sse 模式启动服务的方法,帮助开发者快速集成 LLM 应用与外部系统。
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
228 10
|
2月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
2月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
362 8
|
2月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
|
2月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
226 2
|
2月前
|
弹性计算 ice
阿里云4核8G云服务器配置价格:热门ECS实例及CPU处理器型号说明
阿里云2025年4核8G服务器配置价格汇总,涵盖经济型e实例、计算型c9i等热门ECS实例,CPU含Intel Xeon及AMD EPYC系列,月费159元起,年付低至1578元,按小时计费0.45元起,实际购买享折扣优惠。
424 1