• RAID磁盘阵列及CentOS7启动流程


    1. 磁盘阵列

    1.1

    RAID,磁盘阵列磁盘通过硬件和软件的形式组合成一个容量巨大的磁盘组,提升整个磁盘的系统效能;RAID常见类型:

    RAID类型

    最低磁盘个数

    空间利用率

    各自的优缺点

    级别

    说明

    RAID0

    条带卷

    2+

    100%

    读写速度快,不容错

    RAID1

    镜像卷

    2

    50%

    读写速度一般。容错

    RAID5

    带奇偶校验的条带卷

    3+

    (n-1/n)

    读写速度快,容错,允许坏一块盘

    RAID10

    RAID1的安全+RAID0的快速

    4

    50%

    读写速度快,容错

    RAID基本思想:把好几块硬盘通过一定组合方式把它组合起来,成为一个新的硬盘阵列组,从而使它能够达到高性能硬盘的要求。

     

    1.2  RAID的三个关键技术

    镜像:提供了数据的安全性;

    条带(块大小也可以说是条带的粒度):它的存在的就是提供了数据并发性;

    数据的校验:提供了数据的安全。

     

    1.3 RAID工作原理

    1) RAID0:条带(strping),是最早出现的RAID模式,需磁盘数量:2块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可。

    特点:本低,可以提高整个磁盘的性能。RAID 0没有提供冗余或错误修复能力,速度快,任何一个磁盘的损坏将损坏全部数据;磁盘利用率为100%。

     

    2)RAID1:mirroring(镜像卷),磁盘两块以上;原理:是把一个磁盘的数据镜像到另一个磁盘上,即数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步);至少需要两块硬盘;磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间。如下图:

     

    3)RAID5:需要三块或以上硬盘,可以提供热备盘实现故障的恢复;只损坏一块,没有问题。但如果同时损坏两块磁盘,则数据将都会损坏。 空间利用率: (n-1)/n  ,2/3  如下图所示:

    奇偶校验信息的作用:当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

    异或运算:所谓的“奇偶校验”可以简单理解为二进制运算中的“异或运算”,通常用 xor 标识。

     

    最左边的是原始数据,右边分别是三块硬盘,假设第二块硬盘出了故障,通过第一块硬盘上的 1 和第三块硬盘上的 1 xor 2,就能够还原出 2。同理可以还原出 3 和 8。至于5 xor 6,直接5和6运算出来即可。
        

    4)RAID10:嵌套RAID级别,镜像+条带; RAID 10是将镜像和条带进行两级组合的RAID级别,第一级是RAID1镜像对,第二级为RAID 0。比如我们有8块盘,它是先两两做镜像,形成了新的4块盘,然后对这4块盘做RAID0;当RAID10有一个硬盘受损其余硬盘会继续工作,这个时候受影响的硬盘只有2块

     

    1.4  RAID 硬盘失效处理

    热备和热插拔。

     

    1)热备:HotSpare,当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用的情况下,用RAID系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性。备用盘有全局式和专用式,全局式备用硬盘为系统中所有冗余的RAID组共享,专用式备用硬盘位系统中某一组冗余RAID组专用。下图所示位一个全局热备的示例,该热备盘由系统中两个RAID组共享,可自动顶替任何一个RAID中的一个失效硬盘。

     

    2)热插拔:HotSwap,在不影响系统正常运转的情况下,用正常的物理硬盘替换RAID系统中失效硬盘。

     

    1.5  RAID-0-1-5-10搭建及使用-删除RAID及注意事项

    RAID的实现方式

    面试题:我们做硬件RAID,是在装系统前还是之后? 

    答:先做阵列才装系统 ,一般服务器启动时,有显示进入配置RAID的提示。

     

    硬RAID:需要RAID卡,我们的磁盘是接在RAID卡的,由它统一管理和控制。数据也由它来进行分配和维护;它有自己的cpu,处理速度快。

    软RAID:通过操作系统实现。

     

    2. 创建阵列方式

    硬件:磁盘阵列盒

    软件:mdadm

     

    3. mdadm命令

      linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm,mdadm是linux下用于创建和管理软件RAID的命令。

    mdadm命令常见参数

    -a

    检测设备名称;添加磁盘

    -n

    指定设备数量

    -l

    指定RAID级别

    -C

    创建

    -v

    显示创建过程

    -f

    模拟设备损坏

    -r

    移除设备

    -Q

    查看摘要信息

    -D

    查看详细信息

    -S

    停止RAID磁盘阵列

    -x

    备份盘

     

    4. 实验

    实验1:搭建RAID10阵列

     

    新添加4块硬盘

     

    查看磁盘

     

    下载mdadm,创建raid10阵列。

    格式:mdadm 选项 /dev/md0 -a yes -n 4 -l 10  /dev/sd{b,c,d,e}

    其中,-a yes表示检查设备。

     

    格式化(指定文件系统类型)磁盘阵列为ext4

     

    挂载

     

    查看/dev/md0的详细信息

    [root@localhost zxj]# mdadm -D /dev/md0
    /dev/md0:
               Version : 1.2
         Creation Time : Thu apr 11 01:18:16 2019
            Raid level : raid10
            array Size : 41908224 (39.97 GiB 42.91 GB)
         Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 4
           Persistence : Superblock is persistent
           Update Time : Thu apr 11 03:09:55 2019
                 State : clean
        active Devices : 4
       Working Devices : 4
        Failed Devices : 0
         Spare Devices : 0
                layout : near=2
            Chunk Size : 512K
    Consistency Policy : unknown
                  Name : localhost.localdomain:0  (local to host localhost.localdomain)
                  UUiD : 807aee75:479287b8:930103d6:cbf2a76a
                Events : 17
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync set-a   /dev/sdb
           1       8       32        1      active sync set-B   /dev/sdc
           2       8       48        2      active sync set-a   /dev/sdd
           3       8       64        3      active sync set-B   /dev/sde

    然后将其写入到配置文件中,实现开机自动挂载 。

     

    实验2:破损磁盘阵列及修复

      之所以在生产环境中部署RAID 10磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观。在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。

     

    模拟设备损坏:sdb不可用

     

    添加新的磁盘:

    在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。

     

     

    实验3:搭建raid5阵列+备份盘

    虚拟机恢复快照,RAID5最少需要3块硬盘,还要一块备份硬盘,所以新建四块硬盘:

     

    查看磁盘:

    创建RAID阵列:

     

    -x 1:指定一块备份盘;

     

    格式化为ext4文件系统:

    [root@localhost zxj]# mkfs.ext4  /dev/md0
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=128 blocks, Stripe width=256 blocks
    2621440 inodes, 10477568 blocks
    523878 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2157969408
    320 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
           32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
           4096000, 7962624
    allocating group tables: done                           
    Writing inode tables: done                           
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done  

      

    挂载:

    查看阵列信息:有一块备份盘

     

     

    模拟/dev/sdb损坏,可以看到备份盘/dev/sdc立即开始构建:

     

    4. CentOS7 系统启动过程及相关配置文件

    总的来说,centos7启动分为5个步骤

    1. uefi或BIOS初始化,开始post(power on self test)开机自检;

    2. 加载MBR到内存;
    3. GRUB阶段;
    4. 加载内核和initramfs模块;
    5. 内核开始初始化,centos7使用systemd来代替centos6及以前的init程序。

    POST:加电自检

      当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走。

    Boot sequence:选择引导顺序

      当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导,这个装过WINDOWS的都很熟悉了。

    Bootloader:引导加载器

      确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。

    grub2就是linux中Bootloader程序,由于MBR记录限制,所以grub2分为两个部分:

      1.在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件

      2.partition,/boot/grub[2],此为grub的主体。

    KERNEl + INITRAMFS(INITRD)—>ROOTFS :加载内核

      这时候kernel开始初始化,探测可识别的硬件设备,加载硬件启动程序。以只读方式加载根文件系统

      kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。

      ramdisk:内存上临时虚拟的系统

      amdisk(虚拟磁盘,双缓冲,双缓存)----> ramfs(虚拟文件系统)

      centos5:initrd

      工具程序:mkinitrd

      centos6,7:initramfs

      工具程序:dracut,mkinitrd

    /sbin/init:运行用户空间的第一个应用程序

      init:

           Centos 5: SysV init       配置文件:/etc/inittab

          Centos 6: Upstart         配置文件:/etc/inittab;/etc/init/*.conf(主要)

           Centos 7: systemd        配置文件:/etc/systemd/system;/usr/lib/systemd/system

      至此,内核空间就已经启动完毕,内核启动完成接着开始启动用户态启动过程。systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。

    那么用户态的启动顺序又是什么样的呢?

      设置默认允许级别—>初始化脚本,完成系统初始化--->关闭及启动对应级别下的服务----->设置登录终端----->[启动图形终端]

    Systemd新特性:

      系统引导时实现服务并行启动,没有顺序之分

      按需激活进程

      支持系统状态快照

    基于依赖关系定义服务控制逻辑

    关键特性:

      基于socket的激活机制:socket与服务程序分离;按需激活程序或服务,可并行启动

      基于bus的激活机制:

      基于device的激活机制:当某个硬件设备变得可用时就可激活某设备

      基于path的激活机制

      系统快照:保存各unit的当前状态信息于持久存储设备中

      向后兼容sysv init脚本

    不兼容:

      systemctl命令固定不变,非由systemd启动的服务,systemctl无法与之通信

    核心概念:unit

      配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息,保存至:

      /usr/lib/systemd/system

      /run/systemd/system

      /etc/systemd/system

    unit的类型

      Service unit:文件扩展名为.service 无需执行权限,用于定义系统服务

      Target unit:文件扩展名为.target,用于模拟实现“运行级别”

      Device unit:文件扩展名为.device,用于定义内核识别的设备

      Mount unit:文件扩展名为.mount,定义文件系统挂载点

      Socket unit:文件扩展名为.socket,用于标识进程间通信用的socket文件

      Snapshot unit:文件扩展名为.snapshot,管理系统快照

      Swap unit:文件扩展名为.swap,用于标识swap设备

      automount unit:文件扩展名为.automount,文件系统的自动挂载点

      Path unit:文件扩展名为.path,用于定义文件系统中的一个文件或目录

    管理系统服务

      启动:systemctl start name.service

      停止:systemctl stop name .service

      重启:systemctl restart name.service

      重载:systemctl reload name.service

      条件式重启:systemctl try-restart name.service

      查看某服务当前是否运行:systemctl is-active name.service

      查看所有已经激活的服务:systemctl list-units –type service systemctl list-units –type service –-all

      开机自启动:systemctl enable name.service

      开机不启动:systemctl disable name.service

      查看所有服务开机自启动状态:systemctl list-unit-files –-type service

      查看服务是否开机自启:systemctl is-enabled name.service

      查看服务的依赖关系:systemctl list-dependencies name.service

      禁止设定为开机自启:systemctl mask name.service

      取消禁止设定为开机自启:systemctl unmask name.service

    Target units:(模拟运行级别)

      unit配置文件,以.target后辍名结尾

      关机:runlevel0.target,poweroff.target

      救援:runlevel1.target,rescue.target

      多用户:multi-user.target

      图形:graphical.target

      重启:reboot.target

      级别切换:systemctl isolate name.target

      查看级别:systemctl list-units –-type target       systemctl get-default

      设置级别:systemctl set-default name.target

      切换至紧急救援模式:systemctl rescue

      切换至emergency模式:systemctl emergency(服务不加载不启动,驱动不加载,更彻底)

    其它常用命令

      关机:systemctl halt,systemctl poweroff

      重启:systemctl reboot

      挂起:systemctl suspend

      快照:systemctl hibernate

      快照并挂起:systemctl hybrid-sleep

  • 相关阅读:
    java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0
    CentOS7 firewalld 使用
    服务器设置主机名以及服务器间ssh连接
    httpclient处理返回数据
    httpclient如何获取请求参数
    httpclient请求转发实战
    Java自带的md5、sha和base64加密怎么用
    mongodb分页Spring-data-mongodb
    has been loaded by xml or sqlprovider
    052(十)
  • 原文地址:https://www.cnblogs.com/ajunyu/p/10881095.html
Copyright © 2020-2023  润新知