Keepalived + Nginx 实现-主备切换高可用

news/2024/7/10 2:03:46 标签: 高可用, nginx, keepalive, 反向代理, 负载均衡

0.准备工作

              Nginx反向代理

              Centos7-安装keepalived

1.架构图

3.keepalived的作用

1)     生成一个VIP------虚拟IP地址
2)     心跳检测

4.keepalived主节点的配置

[root@base-linux system]# cd /etc/keepalived/
[root@base-linux keepalived]# ls


[root@base-linux keepalived]# vi keepalived.conf 

! Configuration File for keepalived
global_defs {
  ## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
  router_id base-linux ## 标识本节点的字条串,通常为 hostname
} 
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,
##动态调整 vrrp_instance 的优先级。
##如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。
##如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。
##其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
  script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
  interval 2 ## 检测时间间隔
  weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
  state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
  interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
  ## 虚拟路由的 ID 号, 两个节点设置必须一样, 
  ## 192.168.1.70 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
  virtual_router_id 70
  mcast_src_ip 192.168.1.60 ## 本机 IP 地址
  priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
  nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
  advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
  ## 设置验证信息,两个节点必须一致
  authentication {
    auth_type PASS
    auth_pass 1111 ## 真实生产,按需求对应该过来
  }
  ## 将 track_script 块加入 instance 配置块
  track_script {
    chk_nginx ## 执行 Nginx 监控的服务
  } 
  ## 虚拟 IP 池, 两个节点设置必须一样
  virtual_ipaddress {
    192.168.1.70 ## 虚拟 ip,可以定义多个
  }
}

5.keepalived备节点的配置-不同点列举如下,其他都必须保持一致

配置文件节点主节点备节点
state MASTERBACKUP
interface主节点所在服务器的网卡名称备节点所在服务器的网卡名称
priority主节点的值要大于备节点的值备节点的值要小于主节点的值
mcast_src_ip主节点所在服务器的IP地址备节点所在服务器的IP地址

 

 

 

 

 

 

6.故障恢复,即nginx服务停止,keepalived没有停止,可以尝试启动nginx(使用vi命令编辑)

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/src/nginx/sbin/nginx                #重启nginx
      sleep 2
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi

注意 :脚本中使用了 killall命令,要确保虚拟机支持该命令

7.查看keepalived日志

[root@nginx-master ~]# tail -f  /var/log/messages

8.配置文件补充说明

global_defs {
  #发生主备切换时,邮件通知对应的负责人
  #邮件地址可以多个,一行以一个地址
  #邮件接收人
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #邮件发送人
   notification_email_from Alexandre.Cassen@firewall.loc
   #邮件发送时采用的smtp服务器地址
   smtp_server 192.168.200.1
   #连接smtp服务器超时时间
   smtp_connect_timeout 30
   #机器标识符,一般采用主机名即hostname
   router_id LVS_DEVEL
   #检查vrrp报文中的所有地址比较耗时,
   #设置此标志的意思是如果接收的到报文和上一个报文来至同一个路由器,则不执行检查。
   #默认是跳过检查
   vrrp_skip_check_adv_addr
   #严格遵守vrrp协议,不支持单播模式
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#定义虚拟路由,自定义虚拟路由标识符
vrrp_instance VI_1 {
	#初始状态,取值范围 MASTER|BACKUP
	#一旦有新机器加入,则进行选举,
	#优先级值最高的是MASTER
    state MASTER
	#指定该实例用户VRRP的网卡,用于发送VRRP协议
    interface eth0
	#虚拟路由ID,配置相同值的是一个组
    virtual_router_id 51
	#优先级-值越大,成为MASTER节点的几率越大
    priority 100
	#VRRP广告的时间间隔
    advert_int 1
	#设置认证模块
    authentication {
		#认证方式,可以是PASS或AH两种认证方式
        auth_type PASS
		#认证密码
		#用户访问vrrpd的密码,在所有的机器上应该是相同的。只会使用前8个字符。
        auth_pass 1111
    }
	#虚拟的IP地址,即VIP
	#随着state的变化,VIP跟着增加或者删除
	#当state为master的时候就添加,当state为backup的时候删除
	#这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
	#virtual_ipaddress中所有的地址必须是同一系列
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

 


http://www.niftyadmin.cn/n/1277988.html

相关文章

Cannot resolve symbol ‘istio‘ when I switch branch of source code to 2.0.0

问题描述 Cannot resolve symbol istio when I switch branch of source code to 2.0.0解决办法 Check out the branch to 2.0.0 within the latest source code of nacosTry to run the projectSee errors

Linux内核中的预取算法

存储设备的IO特性 (1)硬盘驱动器(HDD) 硬盘驱动器(HDD,Hard Disk Drive),简称硬盘或磁盘,是存储数字信息的首要介质。硬盘驱动器的主要部件是控制电路、缓存、伺服电机、磁头、盘片等。 磁盘具有大容量、随机读写能力以及高速顺序读写性能,这些主要特…

linux权限不够【操作方案】

虽然电脑已经很普遍了,但是一些年长的人对电脑的操作不是很熟悉,比如在使用win7系统时一旦遇到linux权限不够 时就懵了,对于linux权限不够 处理起来相对来说较简单,按照我们的步骤处理linux权限不够 很容易上手,lin…

Java 悲观锁和乐观锁比较

1.悲观锁 多个线程竞争应用程序的共享资源 同时只有一个线程可以获得资源的使用权,其他线程阻塞等待 获得使用权的线程释放锁后,其他线程再次竞争资源的使用权限 2.乐观锁 多个线程竞争应用程序的共享资源 所有线程都可以获得资源的使用权, 只…

快速学习-Global Address Melissa地址库与谷歌地图一样健全的地址查询系统

简介 官网地址 https://www.melissa.com/功能列表 Business CoderGlobal AddressGlobal EmailGlobal Express EntryGlobal NameGlobal PhoneIP LocatorLeadGen - BusinessLeadGen - ConsumerLeadGen - OccupantLeadGen - PropertyPersonator ConsumerPersonator IdentityProp…

C/C++与Matlab混合编程初探

Matlab 拥有丰富的功能,编程简单。不过,有些情况下,Matlab程序的执行速度比较慢。C/C编译执行的程序速度比较快,编程难度上比Matlab要高一些。因此存在一种方案,就是使用Matlab实现我们的实验程序,用C/C来实…

Centos7 安装数据库中间件mycat

0.准备工作 1)安装MySQL数据库 2)连接linux上的mysql数据库,创建三个数据库 CREATE database db1; CREATE database db2; CREATE database db3; 3)修改my.cnf----路径 /etc/my.cnf 中添加 lower_case_table_names 1 #My…

欧几里德算法和扩展欧几里德算法

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) gcd(b,a mod b) 证明:a可以表示成a kb r,则r a mod b 假设d是a,b的一个公约数&#x…