• Keepalived 配置高可用集群


    一、Keepalived 简介

    (1) Keepalived 能实现高可用也能实现负载均衡,Keepalived 是通过 VRRP 协议 ( Virtual Router Redundancy Protocol ) 来实现高可用的
    (2) Keepalived 有三个模块,core 模块是核心模块,负责主进程的启动 、维护及配置的加载和解析,check 模块负责健康检查,vrrp 模块用来实现 VRRP 协议
    (3) 在 VRRP 协议里,会将多台功能相同的服务器组成一个小组 ( 通常是一台 master 和一台 backup 角色 ) ,master 会通过组播的形式向各个 backup 发送 VRRP 协议的数据包,当 backup 收不到 master 发来的 VRRP 数据包时,就会认为 master 宕机了,此时就需要根据各个 backup 的优先级来决定谁成为新的 master

    二、实验环境

    1. 准备两台机器 ( CentOS 7 ) ,一台作为 master ( 192.168.119.130 ),一台作为 backup ( 192.168.119.134 ),设置 vip ( Virtual IP ) 为 192.168.119.132
    2. 两台机器上都安装 Keepalived 和 Nginx,Keepalived 用来实现高可用,Nginx 作为服务,当检测到 master 上的 Nginx 服务不可用之后,backup 接替 master 的工作

    三、master 配置

    [root@localhost ~]$ yum install -y nginx                # 安装 Nginx
    [root@localhost ~]$ yum install -y keepalived           # 安装 Keepalived
    [root@localhost ~]$ iptables -F                         # 关闭 iptables(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ setenforce 0                        # 关闭 SELinux(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ systemctl stop firewalld.service    # 关闭 firewall(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ vim /etc/keepalived/keepalived.conf    # 编辑Keepalived配置文件,替换为如下内容
    global_defs {              # 全局配置
       notification_email {    # 定义邮箱,当高可用出现问题时给指定的邮箱发邮件
         panzekai@37.com                         
       }
       notification_email_from root@linux.com    # 定义发件人,可以使用第三方邮件来发送(如163邮箱,qq邮箱等)
       smtp_server 127.0.0.1                     # 指定smtp服务器地址
       smtp_connect_timeout 30                   # 指定smtp连接超时时间
       router_id LVS_DEVEL                       # 指定运行keepalived机器的一个标识
    }
    
    vrrp_script chk_nginx {
        script "/usr/local/sbin/check_nginx.sh"       # 定义一个监控脚本,监控nginx服务是否正常运行(检测脚本需要自行添加)
        interval 3                                    # 每隔3秒钟执行一遍检测脚本
    }
    
    vrrp_instance VI_1 {        # 定义一个高可用实例,可以定义多个实例,对多个服务部署高可用
        state MASTER            # 指定本机的角色
        interface ens33         # master会通过组播的形式向各个backup发送VRRP协议的数据包,这里定义使用哪个网卡来发组播
        virtual_router_id 51    # VIP(虚拟IP)的标识ID,相同的ID属于同个组
        priority 100            # ID的优先级,当master宕机了,此时就需要根据各个backup的优先级来决定谁成为新的master
        advert_int 1            # 指定master与backup之间的检查间隔,默认是1s
        authentication {        # 指定master与backup之间认证的方式,两者的密码配置要一致
            auth_type PASS
            auth_pass ec9cd31a611f64b5
        }
        virtual_ipaddress {    # 指定VIP(虚拟IP)地址,master与backup定义要一致
            192.168.119.132
        }
    
        track_script {         # 指定在实例中要引用的脚本
            check_nginx            
        }
    
    }
    [root@localhost ~]$ vim /usr/local/sbin/check_nginx.sh    # 根据上面的配置定义监控脚本
    #!/bin/bash
    d=`date --date today +%Y%m%d_%H:%M:%S`    # 时间变量,用于记录日志
    n=`ps -C nginx --no-heading|wc -l`        # 计算nginx进程数量
    if [ $n -eq "0" ]; then                   # 如果进程为0,则启动nginx,并且再次检测nginx进程数量,
        /etc/init.d/nginx start               # 如果还为0,说明nginx无法启动,此时需要关闭keepalived
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
            echo "$d nginx down, keepalived will stop" >> /var/log/check_nginx.log
            systemctl stop keepalived
        fi
    fi
    [root@localhost ~]$ chmod 755 /usr/local/sbin/check_nginx.sh    # 增加执行权限
    [root@localhost ~]$ systemctl start keepalived.service          # 启动keepalived

    四、backup 配置

    [root@localhost ~]$ yum install -y nginx                # 安装 Nginx
    [root@localhost ~]$ yum install -y keepalived           # 安装 Keepalived
    [root@localhost ~]$ iptables -F                         # 关闭 iptables(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ setenforce 0                        # 关闭 SELinux(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ systemctl stop firewalld.service    # 关闭 firewall(只是为了做实验方便,在实际中应自行修改)
    [root@localhost ~]$ vim /etc/keepalived/keepalived.conf    # 编辑Keepalived配置文件,替换为如下内容
    global_defs { 
       notification_email {
         panzekai@37.com                         
       }
       notification_email_from root@linux.com
       smtp_server 127.0.0.1    
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_script chk_nginx {
        script "/usr/local/sbin/check_nginx.sh"
        interval 3
    }
    
    vrrp_instance VI_1 {
        state BACKUP            # 指定角色为BACKUP
        interface ens33  
        virtual_router_id 51    # 指定VIP,要与master相同
        priority 90             # 指定ID的优先级,要比master小
        advert_int 1         
        authentication {    
            auth_type PASS
            auth_pass ec9cd31a611f64b5
        }
        virtual_ipaddress {    # 指定VIP(虚拟IP)地址,master与backup定义要一致
            192.168.119.132
        }
    
        track_script {         # 指定在实例中要引用的脚本
            check_nginx            
        }
    
    }
    [root@localhost ~]$ vim /usr/local/sbin/check_nginx.sh    # 根据上面的配置定义监控脚本
    #!/bin/bash
    d=`date --date today +%Y%m%d_%H:%M:%S`    # 时间变量,用于记录日志
    n=`ps -C nginx --no-heading|wc -l`        # 计算nginx进程数量
    if [ $n -eq "0" ]; then                   # 如果进程为0,则启动nginx,并且再次检测nginx进程数量,
        /etc/init.d/nginx start               # 如果还为0,说明nginx无法启动,此时需要关闭keepalived
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
            echo "$d nginx down, keepalived will stop" >> /var/log/check_nginx.log
            systemctl stop keepalived
        fi
    fi
    [root@localhost ~]$ chmod 755 /usr/local/sbin/check_nginx.sh    # 增加执行权限
    [root@localhost ~]$ systemctl start keepalived.service          # 启动keepalived


    五、测试

    (1) 直接访问 VIP ( 192.168.119.132 ) 看是否能访问成功
    (2) 关闭 master 上的 keepalived 服务看是否能访问成功 ( 日志在 /var/log/messages 查看 )

        

  • 相关阅读:
    常见的代码报错信息总结(持续更新ing)
    ASCII码对照表
    python ord()与chr()用法以及区别
    Python random模块sample、randint、shuffle、choice随机函数
    日志相关
    tensorflow学习笔记
    tar 解压缩命令详解
    pandas使用
    相似度与距离计算python代码实现
    逻辑回归原理(python代码实现)
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10232507.html
Copyright © 2020-2023  润新知