Nginx笔记(四)----Nginx+keepalived双主配置(双机双主热备)_keepalived 配置多个nginx

本文介绍了如何配置Nginx与keepalived实现双机双主热备,详细阐述了配置过程,包括Nginx配置、keepalived配置文件的区别以及chk_nginx.sh脚本的使用。适合对高可用性有需求的读者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

二、配置

软件安装配置和前篇文章是一样的,只不过keepalived的配置文件有些区别,将两台机器上的/etc/keepalived/keepalived.conf配置文件修改成如下:

Nginx-A:

[root@Nginx-A src]# vim /etc/keepalived/keepalived.conf	  
! Configuration File for keepalived  
  
############################ 全局配置 #############################  
    
global_defs {  
  
    # 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个  
    notification_email {      
        #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务   
        13020176132@163.com  
    }  
    #keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁  
    notification_email_from 13020176132@163.com   
      
    #指定发送email的smtp服务器  
    smtp_server 127.0.0.1        
      
    #设置连接smtp server的超时时间  
    smtp_connect_timeout 30      
      
    #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。  
    router_id swarm01     
}  
  
  
############################ VRRPD配置 #############################  
  
# 定义chk_http_port脚本,脚本执行间隔10秒,权重-5,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等  
vrrp_script chk_http_port {    
  
    #这里通过脚本监测      
    script "/opt/chk_nginx.sh"     
      
    #脚本执行间隔,每2s检测一次  
    interval 2      
      
    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5     
    weight -5       
      
    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)      
    fall 2       
      
    #检测1次成功就算成功。但不修改优先级   
    rise 1                      
}  
  
#定义vrrp实例,VI_1 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管  
vrrp_instance VI_1 {   
  
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,  
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,  
    #那么他会就回抢占为MASTER     
    state MASTER   
      
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看  
    interface ens33        
  
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,  
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址      
    mcast_src_ip 192.168.182.110  
      
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的  
    virtual_router_id 51      
  
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级     
    priority 101   
  
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒     
    advert_int 1          
  
    #设置验证类型和密码。主从必须一样  
    authentication {      
      
        #设置vrrp验证类型,主要有PASS和AH两种  
        auth_type PASS             
          
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111             
    }  
      
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写  
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定  
    virtual_ipaddress {            
        192.168.182.156  
    }  
      
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!  
    track_script {     
  
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。   
       chk_http_port                      
    }  
}  

#定义vrrp实例,VI_2 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管  
vrrp_instance VI_2 {   
  
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,  
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,  
    #那么他会就回抢占为MASTER     
    state BACKUP   
      
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看  
    interface ens33        
  
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,  
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址      
    mcast_src_ip 192.168.182.110  
      
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的  
    virtual_router_id 52     
  
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级     
    priority 100   
  
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒     
    advert_int 1          
  
    #设置验证类型和密码。主从必须一样  
    authentication {      
      
        #设置vrrp验证类型,主要有PASS和AH两种  
        auth_type PASS             
          
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111             
    }  
      
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写  
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定  
    virtual_ipaddress {            
        192.168.182.157
    }  
      
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!  
    track_script {     
  
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。   
       chk_http_port                      
    }  
}

Nginx-B:

[root@Nginx-B src]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived    
  
global_defs {
	notification_email {                
		13020176132@163.com
	}
	  
	notification_email_from 13020176132@163.com  
	smtp_server 127.0.0.1                    
	smtp_connect_timeout 30                 
	router_id swaram02                 
}
  
vrrp_script chk_http_port {         
	script "/opt/chk_nginx.sh"   
	interval 2                      
	weight -5                       
	fall 2                   
	rise 1                  
}
  
vrrp_instance VI_1 {            
	state BACKUP           
	interface ens33            
	mcast_src_ip 192.168.182.111
	virtual_router_id 51        
	priority 90               
	advert_int 1               
	authentication {            
		auth_type PASS         
		auth_pass 1111          
	}
	virtual_ipaddress {        
		192.168.182.156
	}
 
	track_script {                     
	   chk_http_port                 
	}

}

vrrp_instance VI_2 {            
	state MASTER           
	interface ens33            
	mcast_src_ip 192.168.182.111
	virtual_router_id 52        
	priority 100               
	advert_int 1               
	authentication {            
		auth_type PASS         
		auth_pass 1111          
	}
	virtual_ipaddress {        
		192.168.182.157
	}
 
	track_script {                     
	   chk_http_port                 
	}

}

然后修改两台机器上的nginx首页

[root@Nginx-A html]# vim  /usr/local/nginx/html/index.html 
<!DOCTYPE html>
<html>
 <head> 
  <title>Welcome to Nginx-Master!</title> 
  <style>
        body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
         }
 </style> 
 </head>
 <body>
  <h1>Welcome to Nginx-A!</h1>     
  <h1><b>Nginx-A:192.168.182.110</b></h1>     
  <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
  <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br /> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p>
  <p><em>Thank you for using nginx.</em></p>
 </body>
</html>

[root@Nginx-B html]# vim  /usr/local/nginx/html/index.html 
<!DOCTYPE html>
<html>
 <head> 
  <title>Welcome to Nginx-Master!</title> 
  <style>
        body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
         }
 </style> 
 </head>
 <body>
  <h1>Welcome to Nginx-B!</h1>     
  <h1><b>Nginx-B:192.168.182.111</b></h1>     
  <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
  <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br /> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p>
  <p><em>Thank you for using nginx.</em></p>
 </body>
</html>

chk_nginx.sh脚本也不用改,然后重启keepalived

[root@Nginx-A keepalived]# systemctl start keepalived.service


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

![](https://img-blog.csdnimg.cn/img_convert/b656d692ea1207e95828919ba5a0a6a9.png)

给大家整理的电子书资料:

  

![](https://img-blog.csdnimg.cn/img_convert/08224ac4d57aa835e6ae5ec5bb33f29c.png)



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
![img](https://img-blog.csdnimg.cn/img_convert/f27d3936dd26070fdb3048435cf135d6.jpeg)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
img-yZuU77Pj-1713385727474)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)**
[外链图片转存中...(img-HtuXcraG-1713385727474)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值