Linux集群架构

本文介绍了Linux集群的基本概念,包括高可用和负载均衡两大类。重点讲解了高可用集群的工作原理,强调了心跳和冗余的重要性。同时,通过keepalived配置高可用集群的实践,详细阐述了如何利用VRRP协议确保服务的连续性,并提供了具体的配置和测试步骤。

集群介绍

1. 这里的集群架构指的是由多台机器组成一台大机器,单台机器完不成的任务可以多台机器一起来完成。


2. linux集群根据功能划分为2大类:高可用和负载均衡。

高可用集群通常为2台服务器(功能和角色是一样的),一台在工作,另一台作为冗余。当提供服务的机器宕机,冗余将接替继续提供服务,这样就可以提供系统可用的效率。

高可用集群的衡量标准
  要保证集群服务100%时间永远完全可用,几乎可以说是一件不可能完成的任务。比如,淘宝在这几年双十一刚开始的时候,一下子进来买东西的人很多,访问量大,都出现一些问题,如下单后却支付不了。所以说只能保证服务尽可能的可用,当然有些场景相信还是可能做到100%可用的。

   通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均故障维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%。

  具体HA衡量标准:

描述

通俗叫法

可用性级别

年度停机时间

基本可用性

2个9

99%

87.6小时

较高可用性

3个9

99.9%

8.8小时

具有故障自动恢复能力的可用性

4个9

99.99%

53分钟

极高可用性

5个9

99.999%

5分钟


实现高可用的开源软件有:heartbeat和keepalived(推荐使用)

负载均衡集群

需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少是2台。

实现负载均衡的开源软件有LVS keepalived haproxy nginx ,商业使用的有F5 和Netscaler等负载均衡器。优势在于更高的应答量和良好的稳定性。

使用开源软件来搭建的负载均衡,其稳定性依赖服务器的稳定性

———-

keepalived介绍

  • 使用keepalived来实现高可用集群,因为heartbeat在centos6上存在一些问题,影响实验效果。

  • keepalived通过VRRP(虚拟路由冗余协议)来实现高可用。

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

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

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


用keepalived配置高可用集群

  • 需要2台机器,一台作为master,另一台作为backup。并都安装keepalived,都需要有nginx.

  • keepalived需要包含一个服务,这个服务用来实现高可用,假如集群中角色出现单点故障,这个服务宕机后,就有问题啦。如果想让该服务实现高可用就需要使用keepalived或者heartbeat软件。搭建高可用集群首先需要keepliaved服务、并让哪一个服务实现高可用。这里使用nginx作为高可用的对象,是因为在生产环境中使用nginx作为负载均衡器,假如nginx一旦出现问题,即使后端的web是正常的,那也是不能访问的。不能出现单点故障。

  • 编辑master的keepalived的配置文件/etc/keepalived/keepalived.conf,清空里面的内容,并加入以下内容

global_defs {   
   notification_email {
     aming@aminglinux.com
   } //
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"   //检测这个服务是否正常,后面需要编写该脚本
    interval 3   //检测间断时间为3秒
}
vrrp_instance VI_1 {  
    state MASTER  //定义角色
    interface ens33   //定义发组播的网卡名
    virtual_router_id 51   //定义路由器的Id,主从上需要保持一致,说明它们是一组。
    priority 100   //定义角色的权重
    advert_int 1   
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {  //定义主从都使用的ip
        192.168.244.100
    }
    track_script {  加载定义的脚本
        chk_nginx
    }
}
  • 定义监控脚本,路径就是配置文件中的script “/usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`  //表示时间
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`  //计算nginx的进程数
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived  //nginx服务没有启动时,停止keepalived,给backup使用。
        fi
fi
  • 修改该脚本的权限为755,是为了自动加载该脚本,不能加载该脚本就不能启动keepalived服务
chmod 755 /usr/local/sbin/check_ng.sh
[root@chunt ~]# systemctl start keepalived
[root@chunt ~]# ps aux |grep keepalived 
root       1582  0.0  0.1 120740  1408 ?        Ss   00:38   0:00 /usr/sbin/keepalived -D
root       1583  0.0  0.3 127476  3276 ?        S    00:38   0:00 /usr/sbin/keepalived -D
root       1584  0.2  0.3 131780  3116 ?        S    00:38   0:00 /usr/sbin/keepalived -D
root       1640  0.0  0.0 112676   980 pts/1    S+   00:39   0:00 grep --color=auto keepalived
[root@chunt ~]# 
  • 在配置从之前需要检查是否有防火墙或selinux的存在,否则可能影响实验结果。主从都要关闭。
[root@spring ~]# getenforce
Disabled
[root@spring ~]# systemctl stop firewalld
[root@spring ~]# !ipt
iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@spring ~]# 
  • 在从上的keepliaved的配置文件写入如下内容
global_defs {
   notification_email {
     aming@aminglinux.com
   }
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.244.100
    }
    track_script {
        chk_nginx
    }
}

编写监控脚本/usr/local/sbin/check_ng.sh,加入以下内容

#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

并修改为755的权限,启动服务。

[root@spring ~]# chmod 755 !$
chmod 755 /usr/local/sbin//check_ng.sh
[root@spring ~]# systemctl start keepalived
[root@spring ~]# ps aux |grep keepalived
root       1516  0.0  0.0 120740  1408 ?        Ss   01:01   0:00 /usr/sbin/keepalived -D
root       1517  0.0  0.1 127476  3276 ?        S    01:01   0:00 /usr/sbin/keepalived -D
root       1518  0.1  0.1 131780  3108 ?        S    01:01   0:00 /usr/sbin/keepalived -D
root       1575  0.0  0.0 112676   976 pts/0    S+   01:02   0:00 grep --color=auto keepalived
[root@spring ~]# 

测试访问主IP显示的是master,访问从IP显示backup ,访问192.168.244.100显示的信息和主上是一样的。


测试高可用

  • 测试1; 关闭master上的nginx服务,它会自动的开启服务。
  • 测试2 :在master上增加iptables规则
iptables -I OUTPUT -p vrrp -j DROP

在master上关闭keepalived服务后再查看IP,发现192.168.244.100IP不在master上了,而是去到了backup上面。当启动master上的keepalived服务后,vip又回到了master上

第1讲 iscsi的概念、组成和工作原理 课程目标:了解iscsi的组成和工作原理。 课程内容: iscsi的概念。 iscsi的组成。 iscsi的工作原理。 第2-3讲 基于iscsi的ip san存储系统 课程目标: 能熟练搭建基于iscsi的ip san存储系统 安装iscsi target软件 配置一个简单的iscsi target 在windows上配置iscsi initiator 在linux上配置iscsi initiator 第4讲 基于iscsi 在安全方面相关设定 课程目标: 如何管理和使用iscsi存储网络 initiator主机以ip认证方式获取iscsi target资源 initiator主机以密码认证方式获取iscsi target资源 第5讲 nagios综述 课程目标:了解nagios的概念和组成以及特点 课程内容: 什么是nagios nagios的组成和特点。 iscsi的工作原理。 第6-9讲 安装与配置nagios监控系统 课程目标:快速搭建一个基于nagios的网络监控系统 安装nagios软件 安装nagios插件 nagios默认配置文件结束 nagios各个配置文件之间的关系 详细介绍nagios每个配置文件 第10讲 nagios的日常维护和管理 课程目标: 能够熟练运用和管理nagios监控系统 验证nagios配置文件的正确性 如何启动与停止nagios监控系统 第11-12讲 利用插件扩展nagios的监控功能 课程目标: 通过nagios的扩展插件补充nagios的监控功能 利用nrpe外部构件监控远程主机 利用飞信实现nagios短信报警功能 第13讲 heartbeat的概念组成以及工作原理 课程目标: 熟悉heartbeat的概念、组成和工作原理 课程内容: heartbeat的概念 ha集群相关术语 heartbeat的组成和工作原理 第14-15讲 安装与配置heartbeat集群系统 课程目标: 熟练掌握heartbeat的安装、配置和管理 安装heartbeat前的准备工作 安装heartbeat 详细介绍heartbeat相关配置文件 维护heartbeat 第16讲 测试heartbeat的ha功能 课程目标: 灵活掌握heartbeat在各种情况下的工作状态和切换流程 正常关闭和重启主节点的heartbeat 在主节点上拔去网线 在主节点上拔去电源线 切断主节点的所有网络连接 在主节点上非正常关闭heartbeat守护进程 第17讲 drbd的概念和运行原理 课程目标: 了解drbd的概念和实现原理以及应用范围 课程内容: 什么是drbd drbd是如何工作的 drbd的应用领域 第18讲 安装与配置drbd 课程目标: 熟练掌握drbd配置文件各个参数的含义,并能够迅速搭建一套drbd系统 安装drbd 配置drbd 启动并管理drbd系统 测试drbd的数据镜像功能 drbd在主备节点间的切换 第19讲 lvs的体系结构和特点 课程目标: 了解lvs集群的特点以及负载均衡调度算法 课程内容: lvs简介 lvs集群的体系结构 lvs集群的负载均衡方式与调度算法 第20-21讲 通过LVS+Keepalived搭建高可用的负载均衡集群系统 课程目标: 熟练掌握lvs的安装方式以及基于dr/tun模式的配置方式 安装lvs管理软件ipvs ipvsadm的用法 lvs在负载调度器上的配置 通过ipvsadm命令行方式配置LVS 通过Redhat提供的工具piranha来配置LVS 在Director上配置冗余策略 Ldirectord 启动LVS集群服务 lvs在后端realserver节点上的配置 配置lvs冗余策略 LVS+Keepalived构建拓扑图 安装Keepalived 配置Keepalived 启动Keepalived+lvs集群系统 第22讲 测试LVS+Keepalived高可用负载均衡集群 课程目标: 通过测试了解lvs负载均衡集群的工作机制和切换原理 启动LVS高可用集群服务 keepalived高可用性功能测试 测试lvs+keepalived的负载均衡集群功能 测试lvs+keepalived的故障透明转移功能 第23讲 drbd+mysql+heartbeat+lvs可行性分析 课程目标: 了解mysql与drbd+lvs+heartbeat整合的必要性 课程内容: mysql应用需求现状与存在问题 drbd+mysql+heartbeat+lvs方案实现原理 第24讲 mysql主从复制的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值