keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

    keepalived工作原理:
    keepalived是以VRRP协议为实验基础的,当backup收不到yrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样我们就可以保证集群的高可用。
    VRRP全程Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。cheack负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的。

    脑裂(split-brain):
    什么是脑裂?
    脑裂:指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

    对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MYSQL)的HA,必须要严格防止脑裂。
    脑裂解决方案:shoot the other in the head 爆头 master

    LVS_DIRECTOR + keepalived 实验:
    准备五台服务器,其中一台服务器进行访问
    1、10.0.0.11 (master)
    2、10.0.0.12 (backup)
    3、10.0.0.13
    4、10.0.0.14
    其中1、2进行nginx负载均衡功能及高可用keeplived
    而3、4进行web服务器(nginx服务)负载均衡的real-server
    环境准备:关闭防火墙以及selinux、保证网络畅通、保证base、epel仓库可用

    web-1部署:
    >yum -y install nginx #下载nginx服务
    >systemctl start nginx #启动nginx服务
    >cd /etc/nginx/conf.d #切换工作目录
    >vim web-1.conf #编辑网站发布配置文件
    server {
    liten 80;
    server_name localhost;
    location / {
    root /web-1;
    index index.html;
    }
    }
    注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
    保存退出
    >mkdir /web-1 #创建网站发布目录
    >echo “this is web-1” > /web-1/index.html
    >nginx -s reload #重新加载配置文件 使修改添加的内容生效

    web-2部署:
    与web-1基本一致
    >yum -y install nginx #下载nginx服务
    >systemctl start nginx #启动nginx服务
    >cd /etc/nginx/conf.d #切换工作目录
    >vim web-2.conf #编辑网站发布配置文件
    server {
    liten 80;
    server_name localhost;
    location / {
    root /web-2;
    index index.html;
    }
    }
    注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
    保存退出
    >mkdir /web-2 #创建网站发布目录
    >echo “this is web-2” > /web-2/index.html
    >nginx -s reload #重新加载配置文件 使修改添加的内容生效

    使用客户服务器分别访问web-1以及web-2进行访问测试
    >curl 10.0.0.13
    >curl 10.0.0.14

    master部署负载均衡:
    >yum -y install nginx && systemctl start nginx #下载并启动nginx
    >cd /etv/nginx #切换工作目录
    >rm -rf nginx.conf #删除主配置文件
    >cp nginx.conf.default nginx.conf #将子配置文件转为主配置文件
    >vim nginx.conf #编辑主配置文件
    在http块以及http块下的server块下的location块添加以下内容:
    http {
    upstream web {
    server 10.0.0.13:80;
    server 10.0.0.14:80;
    }
    server{
    listen 80;
    server_name localhost;
    location / {
    proxy_pass http://web;
    }
    }
    注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
    保存退出
    >nginx -s reload #重新加载nginx使修改添加的配置生效

    backup配置负载均衡:
    与master流程基本一致:
    >yum -y install nginx && systemctl start nginx #下载并启动nginx
    >cd /etv/nginx #切换工作目录
    >rm -rf nginx.conf #删除主配置文件
    >cp nginx.conf.default nginx.conf #将子配置文件转为主配置文件
    >vim nginx.conf #编辑主配置文件
    在http块以及http块下的server块下的location块添加以下内容:
    http {
    upstream web {
    server 10.0.0.13:80;
    server 10.0.0.14:80;
    }
    server{
    listen 80;
    server_name localhost;
    location / {
    proxy_pass http://web;
    }
    }
    注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
    保存退出
    >nginx -s reload #重新加载nginx使修改添加的配置生效

    使用客户服务器访问:
    >curl 10.0.0.11
    >curl 10.0.0.12
    成功后进入下一步

    master服务器部署keepalived(为了防止脑裂请保证网络畅通)
    >yum -y install keepalived # 下载服务
    >cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份keepalived服务的配置文件,可以跳过此过程
    >vim /etc/keepalived/keepalived.conf #编辑配置文件
    将其中的内容删除,替换为以下内容:
    ! Configuration File for keepalived

    global_defs {
    router_id director1 #backup服务器改为director2
    }
    vrrp_script check_nginx {
    script “/etc/keepalived/check_nginx_status.sh”
    interval 1
    }

    vrrp_instance VI_1 {
    state MASTER #backup端改为BACKUP
    interface ens33 #VIP绑定接口
    virtual_router_id 80 # 与VRID同一组集群,backup保持一致
    priority 100 #本节点优先级backup服务器改为50
    advert_int 1 #检查间隔,默认为1s
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.10/24
    }
    track_script {
    check_nginx
    }
    }
    保存退出
    启动keepalived
    >systemctl start keepalived
    >ip addr #查看是否有VIP接口

    backup的keepalived部署:
    部署流程与master服务器基本一致:
    >yum -y install keepalived # 下载服务
    >cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份keepalived服务的配置文件,可以跳过此过程
    >vim /etc/keepalived/keepalived.conf #编辑配置文件
    将其中的内容删除,替换为以下内容:
    ! Configuration File for keepalived

    global_defs {
    router_id director2 #backup
    }
    vrrp_script check_nginx {
    script “/etc/keepalived/check_nginx_status.sh”
    interval 1
    }

    vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 80
    priority 50
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.10/24
    }
    track_script {
    check_nginx
    }
    }
    保存退出
    启动keepalived
    >systemctl start keepalived
    >ip addr #查看是否有VIP接口

    使用客户服务器进行访问验证:
    curl 10.0.0.10 #注意这里访问的是VIP地址