集群架构介绍

1、什么是集群 多台机器组成一个整体,共同提供服务支撑。

2、集群分类 1)高可用集群 两台或多台机器,相互之间是备份关系,同一时间一台机器提供服务,另外一台备着。当提供服务的机器故障,切换到另外一台。高可用集群中,有一个角色用来实现业务存活状态监测和切换。 高可用集群案例:redis哨兵、mysql组复制、MHA 开源高可用集群软件:keepalived、heartbeat 2)负载均衡集群 至少两台机器,所有机器同时提供服务,每一台机器都可以处理业务请求。在负载均衡集群中有一个负载均衡角色,它负责将请求均衡地分发到每一台服务器上。 开源负载均衡软件:Nginx、LVS、haproxy 分布式集群属于高可用+负载均衡集群综合体,案例:redis cluster、mongodb分片集群

3、为什么要做集群 1)解决单点故障

2)单节点不足以支撑业务体量

垂直扩容 : 用更好的服务器,提高 CPU 处理核数、内存数、带宽等 水平扩容 : 将任务分配到多台计算机上

../../_images/113.png

对于不持续的业务增长,并且增长量不是很大,可以使用垂直扩容,因为单纯地增加服务器硬件更加快捷高效,甚至成本也不高。 但反之,就需要水平扩容,即增加服务器数量。

keepalived

keepalived简介

keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。

在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。

master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。

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

keepalived高可用场景举例

  1. keepalived + nginx ../../_images/24.png

  2. keepalived + mysql ../../_images/34.png

  3. keepalived + NFS ../../_images/43.png

主机名 ip 角色
Centos8 192.168.158.101 keepalived1、nginx1
Centos8-1 192.168.158.102 keepalived2、nginx2
192.168.158.103 vip

安装nginx(两台机器都安装)

编辑源 vi /etc/yum.repos.d/nginx.repo #内容如下

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/Centos8/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true


[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/Centos8/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

安装

yum install -y nginx

启动

systemctl start nginx

安装keepalived(两台都安装)

yum install -y keepalived

配置keepalived(Centos8上)

将默认配置文件挪走

mv  /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.default

定义新的配置

vi /etc/keepalived/keepalived.conf  ## 写入如下内容

! Configuration File for keepalived
global_defs {
    router_id aming
    script_user root
    enable_script_security
}
vrrp_script chk_ng {
    ## 定义监测nginx是否正常的监控脚本
    script "/etc/keepalived/checkng.sh"
    interval 10
    fall 5
}
vrrp_instance VI_NG {
    ##这里定义成BACKUP,目的是为了配置成非抢占模式,即一旦切换到从,当主状态恢复时,不自动切回来
    state BACKUP
    nopreempt
    ##定义VRRP协议通信网卡
    interface ens160
    virtual_router_id 76
    ##权重高
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        ##8位字符串
        auth_pass dWc4Tddl
    }
    virtual_ipaddress {
        ## 定义vip以及绑定vip的网卡
        192.168.222.200 dev ens160 label ens160:1
    }
    unicast_src_ip 192.168.222.128
    unicast_peer {
        192.168.222.132
    }
    track_script {
        chk_ng
    }
}

定义keepalived配置(Centos8-1上)

将默认配置文件挪走

mv  /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.default

定义新的配置

vi /etc/keepalived/keepalived.conf  ## 写入如下内容

! Configuration File for keepalived
global_defs {
    router_id aming
    script_user root
    enable_script_security
}
vrrp_script chk_ng {
    ## 定义监测nginx是否正常的监控脚本
    script "/etc/keepalived/checkng.sh"
    interval 10
    fall 5
}
vrrp_instance VI_NG {
    ##这里定义成BACKUP,目的是为了配置成非抢占模式,即一旦切换到从,当主状态恢复时,不自动切回来
    state BACKUP
    nopreempt
    ##定义VRRP协议通信网卡
    interface ens160
    virtual_router_id 76
    ##权重低
    priority 90
    advert_int 2
    authentication {
        auth_type PASS
        ##8位字符串
        auth_pass dWc4Tddl
    }
    virtual_ipaddress {
        ## 这里的ens160为内网ip
        192.168.222.200 dev ens160 label ens160:1
    }
    unicast_src_ip 192.168.222.132
    unicast_peer {
        192.168.222.128
    }
    track_script {
        chk_ng
    }
}

定义监测脚本(两台机器)

vi  /etc/keepalived/checkng.sh  ##内容如下
#!/bin/bash
ng_pid_num=$(ps -ef | grep nginx | grep -v grep | wc -l)
if [[ ${ng_pid_num} -ne 0 ]];then
    exit 0
else
    exit 1
fi

##保存后,给执行权限
chmod a+x  /etc/keepalived/checkng.sh

启动服务

按如下顺序逐一启动

Centos8上:

systemctl start nginx
keepalived -t    ##启动之前,先检测配置是否正确
systemctl start keepalived

Centos8-1上:
systemctl start nginx
keepalived -t    ##启动之前,先检测配置是否正确
systemctl start keepalived

检测

Centos8上:
##查看进程
ps aux|grep keepalived

##查看vip
ip add

##查看日志
journalctl -u keepalived

验证

Centos8上停止nginx

systemctl stop nginx

实时查看日志

journalctl -f -u keepalived.service

等一会儿,vip会自动配置到Centos8-1上 先将Centos8上的nginx服务恢复

systemctl start nginx

Centos8-1上,停止keepalived服务

systemctl stop keepalived

vip会马上配置到Centos8。

另外,还可以将两台机器的nginx主页设置不一样,当vip切换的时候,可以通过直接浏览器访问vip来观察变化。

遇到keepalived问题,排查思路

看日志

journalctl -u keepalived

看进程

ps aux |grep keepalived

看脚本执行结果

sh -x /etc/keepalived/checkng.sh