服务高可用

高可用总结

keepalived介绍

  keepalived简介

Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。 VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议, VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求, ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址, VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组), BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。

高可用实验一(keepalived+nginx)

 方案规划

VIPIP主机名nginx端口默认主从
192.168.159.220192.168.159.128node180Master
192.168.159.220192.168.159.129node280BACKUP

 两个节点安装nginx

  • 安装 nginx
    • 添加nginx源
      rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    • 安装nginx
      yum install nginx
    • 启动
      systemctl start nginx.service
  • 简单设置区分主机
    # vim /usr/share/nginx/html/index.html
    <title>Welcome to nginx128</title> #另一个节点一样,修改为nginx129
    
    
  • 设置防火墙并测试
    • 设置防火墙
      firewall-cmd --zone=public --add-port=80/tcp --permanent
    • 防火墙生效
      firewall-cmd --reload
    • 测试
      curl 192.168.159.128:80
      curl 192.168.159.129:80
      如果不正常请检查防火墙是否开启成功

  两个节点安装keepalived

  • 安装keepalived
    yum install keepalived -y

  • 配置keepalived

    • Master节点配置文件(192.168.159.128)
     # vim /etc/keepalived/keepalived.conf
    global_defs {
       router_id LVS_DEVEL
    }
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" ##检测nginx状态的脚本路径
        interval 2 ## 检测时间间隔
        weight -55 ## 如果条件成立,权重-20
    }
    
    vrrp_instance VI_1 {
        state MASTER ## 主节点为MASTER 备节点BACKUP
        interface ens33 ## 绑定虚拟IP的网络接口,与本机IP网络接口相同 ,通过ip a查询
        virtual_router_id 51  ## 虚拟路由的ID号,两个节点的设置必须一样,相同ID为一个组
        priority 100  ##节点优先级,值范围0-254 MASTER要不BACKUP高
        nopreempt ## 优先级高的设置,解决异常恢复之后再次抢占的问题
        advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认1s
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
            chk_nginx
        }
        virtual_ipaddress {
            192.168.159.220
        }
    }
    
    virtual_server 192.168.159.220 80 {
        delay_loop 6 #设置健康检查的时间,单位是秒
        lb_algo rr # 设置负载的算法
        lb_kind DR # 设置LVS实现负载的机制,有NAT,TUN,DR三个模式
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.159.128 80 {
            weight 1
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
    
            }
        }
    }
    
    • BACKUP节点配置文件(192.168.159.129)
    # vim /etc/keepalived/keepalived.con
    global_defs {
    router_id LVS_DEVEL
    }
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" ##检测nginx状态的脚本路径
        interval 2 ## 检测时间间隔
        weight -20 ## 如果条件成立,权重-20
    }
    
    vrrp_instance VI_1 {
        state BACKUP ## 主节点为MASTER 备节点BACKUP
        interface ens33 ## 绑定虚拟IP的网络接口,与本机IP网络接口相同 ,通过ip a查询
        virtual_router_id 51  ## 虚拟路由的ID号,两个节点的设置必须一样,相同ID为一个组
        priority 45  ##节点优先级,值范围0-254 MASTER要不BACKUP高
        nopreempt ## 优先级高的设置,解决异常恢复之后再次抢占的问题
        advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认1s
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
            chk_nginx
         }
        virtual_ipaddress {
            192.168.159.220
        }
    }
    
    virtual_server 192.168.159.220 80 {
        delay_loop 6 #设置健康检查的时间,单位是秒
        lb_algo rr # 设置负载的算法
        lb_kind DR # 设置LVS实现负载的机制,有NAT,TUN,DR三个模式
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.159.129 80 { ## 后端真实ip
            weight 1
            TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
    
            }
        }
    
    • 配置检测脚本(两个节点都配置)

      • 建立如下脚本
      #vim /etc/keepalived/nginx_check.sh
      #!/bin/bash
      A=`ps -C nginx --no-header |wc -l`
      if [ $A -eq 0 ];then
              systemctl start nginx
              sleep 2
              if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                      systemctl stop keepalived.service
              fi
      fi
      
      • 授权脚本
        chmod a+x /etc/keepalived/nginx_check.sh

  验证keepalived

  • 启动MASTER(node1节点) keepalived
    systemctl start keepalived
    如下图:

    • 验证
      在这里插入图片描述
      在这里插入图片描述

可以看到通过虚拟IP可以访问主机

  • 停掉MASTER节点 keepalived ,启动BACKUP节点keepalived ,看可否正常问题
    在这里插入图片描述

如图可以看到node2节点的虚拟IP自动绑定了制定网卡接口
在这里插入图片描述

如上图看到 访问后台已经变为129

  总结

  • 问题记录
    • script 脚本不执行(前提脚本可正常运行)
      • 解决方案一 临时关闭,重启服务器失效
        setenforce 0
      • 解决方案二 永久可用,重启服务器继续生效
        sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值