Linux集群教程笔记

本文详细介绍了Linux集群的构建,包括负载均衡集群和高可用集群的原理及实践。重点讲解了LVS的NAT、TUN、DR三种工作模式,以及KeepAlived在高可用集群中的应用。此外,还探讨了Nginx结合HeartBeat实现高可用的方案,以及多级负载的部署策略。内容深入浅出,适合运维人员和系统管理员学习。
摘要由CSDN通过智能技术生成

Linux集群

集群概述

集群是一组协同工作的服务器,各有分工,但是对外表现为一个整体

单机模式成本低,时间长,效率低下,稳定性低,有性能极限,无法突破

集群模式成本高,效率高(1+1>2),适合大型业务,单机器宕机业务不中断

普通的单台服务器一般可以承受10万PV(点击量)的并发访问

集群分类

  • 负载均衡集群LBC:有人负责指挥分配任务,有人负责工作,典型的是Web服务器。负责管理的是负载均衡服务器,可以是一个服务器实体,也可以是一个LVS软件模拟
  • 高可用(故障转移)集群HAC:主服务器挂了后,备用服务器会自动切换过来继续承担主服务器的服务。主备服务器会通过keepalive模块进行检测(心跳线),主挂掉后备自动启动。当备份服务器启动后,如果有自动断电机,会自动切断主服务器电源,防止备份服务器误判,主备同时开启。
  • 高性能科学计算集群HPC:整合网络上有空闲资源的计算机,进行科学计算

负载均衡集群

负载均衡工作模式

用户访问负载均衡服务器,负载均衡服务器将请求转发到业务服务器

  • 常见的负载均衡服务器软件有:LVS(工作在7层模型的传输层),Nginx(工作在7层模型的应用层),Haproxy

  • 常见的负载均衡服务器硬件叫:F5(工作在7层模型的数据链路层)

LVS在网络传输层工作原理

LVS工作在7层模型的传输层,也就是在五层模型传输而后数据网络层之间

用户与LVS服务器都工作在公网上,Apache服务器工作在内网上

用户发送请求到LVS服务器,LVS收到socket,上面有双方IP,LVS收到请求后使用规则库,将目标IP从自己的公网IP改为某个服务器的内网IP进行链接

精度低,负载大,可用于B/S与C/S架构

Nginx网络应用层工作原理

用户发起请求到Nginx,Nginx根据用户请求类型,重新与服务器建立TCP链接发送请求

相当于LVS是收到一个包裹,直接根据规则修改目的地,继续发送,但是Nginx是收到包裹,拆开,然后重新打单,做一个全新的链接,这是因为Nginx是工作在应用层的,所以LVS的负载均衡能力可能达到Nginx的几百倍,但是得益于此,Nginx可以对不同请求智能判断类型,转发到不同服务器

精度高,负载小,只能应用于B/S服务

LVS在系统中工作方式

操作系统可以分为内核空间和用户空间,用户空间安装了用户需要的程序,内核空间只有内核,LVS需要两个部分的程序:IPVS和IPVSadmin,其中IPVS工作在内核空间实现了OSI模型的部分功能,IPVSadmin工作在用户空间,实现了对IPVS的修改,LVS目前在用的有三种模式:NAT,TUN,DR模式,第四种模式目前正在开发

  • NAT模式:

    负载均衡服务器和用户在公网,服务器在内网

    用户访问网站时访问到了负载均衡服务器的外网卡,LVS分配服务器,使用DNAT目标地址端口转换,通过内网网卡链接到服务器

    服务器发送对象的时候发送到负载均衡服务器(否则用户看到源地址不对不收),LVS使用SNAT源地址端口转换,修改socket的源地址为自己的外网IP,转发回去

    特点是

    • 来回都要负载均衡服务器
    • 负载均衡服务器一定程度扮演了网关的作用
    • 支持端口映射
  • TUN模式:

    服务器,负载均衡服务器,用户都在外网,但是负载均衡服务器和工作服务器不在一个广播域

    用户发送请求到负载均衡服务器,负载均衡服务器不修改目标IP,而是在数据包外面重封装了一个数据包,源IP是用户的,目标IP是真实服务器的

    真实服务器去掉包装,处理数据,使用内层的目标IP(负载均衡服务器IP)作为源IP,使用内层的源IP(用户IP)作为目标IP,发送回应对象

    特定是:

    • 两次借用公网IP,速度慢
    • 压力大
  • DR模式[负载能力最高]:

    服务器,负载均衡服务器,用户都在外网,但是负载均衡服务器和工作服务器在一个广播域,也就是负载均衡服务器和工作服务器是同级别的

    用户发起请求到负载均衡服务器,负载服务器转发到真实服务器,这次转发与NAT不同的是这次转发没有修改请求的目标IP,而是修改了请求的目标mac,由于负载均衡服务器和工作服务器是字啊一个广播域的,交换机可以通过MAC对请求进行转发,正常情况下,服务器收到了这个包,发现mac是自己的,但是IP不是自己的,不会收,但是我们在服务器上多设置了一个IP,IP地址与负载均衡服务器是一样的,于是服务器就会收下,但是这个IP是不能暴露的,只能用于通过MAC收到数据包验证用,否则就IP冲突了,于是我们需要把IP隐藏起来

    返回文件的时候,服务器不经过负载均衡服务器,直接用隐藏的IP发送数据包,客户机看到双方IP与端口都是对的,于是接受。

    特点是:

    • 由于负载均衡服务器转发使用的是MAC,所以必须在一个广播域

    • 真实服务器回应无需负载均衡服务器(高并发原因)

    • 不支持端口映射(根本就没有触碰到传输层)

  • TUN和DR的区别就是DR的机器都在一个广播域,可以通过修改MAC的方式实现数据包的转发,但是TUN不再一个广播域,就必须改IP,最后两者返回数据的方式都是将IP改为负载服务器IP返回的

实验环境配置
  • 物理机安装Chrome,由于浏览器缓存,可能无法明显感知服务器的切换,安装后使用无痕模式可以解决这个问题

  • 6台CentOS7 BaseServer 服务器

  • 1台CentOS7 GUI 桌面服务器

  • 关闭防火墙 SELinux

  • 网络选择仅主机(Host-Only)

    配置网卡地址10.10.10.01/24

    关闭DHCP服务器

    虚拟机IP从10.10.10.11开始命名

  • 虚拟机配置双网卡 全部是HostOnly==?==

  • 1G内存

  • 配置6台机器为静态IP

    vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
        # 修改
        BOOTPROTO="static"
        IPADDR=10.10.10.11
        NETMASK=255.255.255.0
    systemctl restart network.service 
    

    使用物理机ssh尝试连接

  • 配置本地yum源

    mkdir /mnt/cdrom
    mount -t iso9660 /dev/cdrom /mnt/cdrom/
    cd /etc/yum.repos.d/
    mkdir ./CentBak
    mv *.repo CentBak/
    cp ./CentBak/CentOS-Media.repo ./
    vim CentOS-Media.repo
        baseurl=file:///media/CentOS/
                file:///media/cdrom/
                file:///media/cdrecorder/
        gpgcheck=1
        enabled=0
        # 改为
        baseurl=file:///mnt/cdrom	# 改路径
        gpgcheck=0					# 不检查gpg
        enabled=1					# 启动
    yum clean all && yum makecache
    yum install gcc gcc-c++ lrzsz	# 安装编译器 文件上传工具(如果是xshell)
    
LVS-DR模式构建

需要三台虚拟机:

  • 机器C:客户机 物理机 192.168.177.162
  • 机器D:负载均衡服务器 虚拟机1 网卡1(enpxxx):10.10.10.11 网卡1(enpxxx)浮动:10.10.10.100
  • 机器RS1:服务器1 虚拟机2 网卡1(enpxxx):10.10.10.12 网卡0(lo)浮动:10.10.10.100
  • 机器RS2:服务器2 虚拟机3 网卡1(enpxxx)10.10.10.13 网卡0(lo)浮动:10.10.10.100

原理

  • 物理机C访问负载均衡服务器D网卡2 10.10.10.100

  • 负载均衡服务器D进行负载均衡计算,修改DMAC,用网卡1 10.10.10.11 发到广播域

  • 其他服务器修改lo卡 为10.10.10.100,接受数据报文

ARP 通讯行为

ARP响应级别(arp-ignore):数据报文到达网口后是否响应

  • 0级别(默认):只要收到了本机配置的IP就响应

  • 1级别:只有发送到了接受网卡的IP上才响应

    例如负载均衡服务器D有10.10.10.11 和 10.10.10.100 两张卡,10.10.10.11卡收到了一个发给10.10.10.100卡的报文,如果是0级别,发现本机有10.10.10.100 于是会手下,如果是1级别,发现不是本卡IP10.10.10.11就不接受

ARP通告级别:

  • 0级别:将本机上的所有的网络接口地址都进行通告(例如网卡上电后会向网络中中广播自己的地址)
  • 1级别:尽可能避免0的情况,倾向于2,但是不保证,尽量仅向该网卡回应与该网段匹配的ARP报文
  • 2级别:只向网络中通告自己的IP,MAC

这样,我们将配置修改为1,2,这样实际服务器的网卡2lo 不会主动接受发给10.10.10.12的消息,也不往外说

负载均衡服务器操作

  • 关闭所有虚拟机的NetworkManager

    [root@C7B1 ~]# systemctl stop NetworkManager
    [root@C7B1 ~]# systemctl disable NetworkManager
    

    这个服务主要是负责Linux的无线网络服务和危险网络策略的关闭,我们需要关闭这个服务,注意:服务名区分大小写

  • 开启网卡的子接口:也就是一块网卡两个IP地址

    [root@C7B1 network-scripts]# cp ifcfg-enp0s3 ifcfg-enp0s3:0
    [root@C7B1 network-scripts]# vim !$						# !$ 上一条命令最后一个参数
    

    修改复制过去的配置文件

    - IPADDR=10.10.10.11
    + IPADDR=10.10.10.100
    - DEVICE="enp0s3"
    + DEVICE="enp0s3:0"
    - NAME="enp0s3"
    - UUID="9b24b2da-f8e2-45c9-81dd-e3b364066858"
    

    重启网络服务

    [root@C7B1 network-scripts]# systemctl restart network
    

    这里复制的接口IP相当于是浮动IP,可以认为原来的IP是绝对IP,浮动IP通常是一个公开的、可以路由到的IP地址,并且不会自动分配给实体设备。项目管理者临时分配动态IP到一个或者多个实体设备。这个实体设备有自动分配的静态IP用于内部网间设备的通讯。这个内部网使用私有地址,这些私有地址不能被路由到。通过浮动IP内网实体的服务才能被外网识别和访问。在一个配置好浮点IP的切换场景是,IP地址飘到网络中的另一台设备。新设备无延迟的接替当掉的设备,并对外提供服务。

  • 修改内核文件/etc/sysctl.conf设置ARP关闭网卡的广播,这是一个优化功能,不强制要求,追加

    net.ipv4.conf.all.send_redirects = 0 
    net.ipv4.conf.default.send_redirects = 0 
    net.ipv4.conf.enp0s3.send_redirects = 0 
    

    sysctl -p刷新内核

  • 安装ipvsadm

    yum install ipvsadm
    
  • 将ipvs加入到系统内核

    modprobe ip_vs
    
  • 配置IPVS

    ipvsadm命令用来添加LVS规则

    • -A添加一个集群
    • -a添加集群的节点
    • -t tcp协议
    • -s算法
    ipvsadm -A -t 10.10.10.100:80 -s rr			# 轮询
    ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g
    ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g
    

    保存配置的规则

    ipvsadm -S > /etc/sysconfig/ipvsadm
    

真实服务器的操作

  • 启动Apache用于测试,写一个网页用来标识

    [root@C7B2 ~]# systemctl start httpd
    [root@C7B2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liukairui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值