相信各界搞机人士都经历过磁盘损坏导致数据丢失的痛,博主家的 NAS 就曾经坏了一块 3T 硬盘,数据尽失,那个痛啊!此后,博主家的 NAS 就改成了 RAID 1。

Too young,too simple. RAID 1 虽然允许坏一块硬盘,但如果你都不知道它什么时候坏了,等两块都坏了那就真的无力回天了。

为了避免遇到这种困境,用户可以试用一款叫做 smartmontools 的软件包程序,它通过使用自我监控(Self-Monitoring)、分析(Analysis)和报告(Reporting)三种技术(缩写为S.M.A.R.T.或SMART)来管理和监控存储硬件。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。smartmontools由smartctl和smartd两部分工具程序组成,它们一起为Linux平台提供对磁盘退化和故障的高级警告。

安装 Smartmontools

[root@localhost ~]# yum install -y smartmontools

使用 smartctl 检测硬盘的健康状况

[root@localhost ~]# smartctl --info /dev/sdc

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.5.1.el7.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST500DM002-1BD142
Serial Number:    W2AL00M0
LU WWN Device Id: 5 000c50 05ccf9cc4
Firmware Version: KC45
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Mar 18 15:03:42 2019 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

- 阅读剩余部分 -

控制节点部署见:OpenStack Rocky(R版) 部署手册 - 控制节点

部署环境

主机名IP系统部署模块
controller192.168.31.11CentOS 7 x86_64MySQL-server RabbitMQ-server memcached
etcd keystone glance nova-api placement neutron
node2192.168.31.12CentOS 7 x86_64nova-compute neutron-linuxbridge
node3192.168.31.13CentOS 7 x86_64nova-compute neutron-linuxbridge

环境准备

关闭防火墙

[root@node2 ~]# systemctl disable firewalld
[root@node2 ~]# systemctl stop firewalld

关闭 SELinux

[root@node2 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled' /etc/selinux/config
[root@node2 ~]# setenforce 0

时间同步

[root@node2 ~]# yum install -y chrony
[root@node2 ~]# systemctl enable chronyd
[root@node2 ~]# systemctl start chronyd

Host 解析

192.168.31.11    controller
192.168.31.12    node2
192.168.31.13    node3

更新系统

[root@node2 ~]# yum upgrade -y

以 node2 为例,加入其它计算节点操作一样。

- 阅读剩余部分 -

部署环境

主机名IP系统部署模块
controller192.168.31.11CentOS 7 x86_64MySQL-server RabbitMQ-server memcached
etcd keystone glance nova-api placement neutron horizon
node2192.168.31.12CentOS 7 x86_64nova-compute neutron-linuxbridge
node3192.168.31.13CentOS 7 x86_64nova-compute neutron-linuxbridge

环境准备

关闭防火墙

[root@controller ~]# systemctl disable firewalld
[root@controller ~]# systemctl stop firewalld

关闭 SELinux

[root@controller ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@controller ~]# setenforce 0

时间同步

[root@controller ~]# yum install -y chrony
[root@controller ~]# systemctl enable chronyd
[root@controller ~]# systemctl start chronyd

Host 解析

192.168.31.11    controller
192.168.31.12    node2
192.168.31.13    node3

更新系统

[root@controller ~]# yum upgrade -y

- 阅读剩余部分 -

概述

关于XtraBackup

XtraBackup是由Percona公司开发的一款基于InnoDB的MySQL数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对InnoDB和XtraDB数据库进行热备的工具。其有如下特点:

  1. 备份过程快速、可靠;
  2. 备份过程不会打断正在执行的事务;
  3. 能够基于压缩等功能节约磁盘空间和流量;
  4. 自动实现备份检验;
  5. 还原速度快;

XtraBackup功能

  • 热备份
  • 增量备份
  • 备份到另一台MySQL服务器
  • 在MySQL服务器之间在线迁移表
  • 轻松创建新的从服务器
  • 备份时,不占用服务器资源

XtraBackup工作原理

XtraBackup是基于InnoDB的crash恢复功能。复制InnoDB数据文件,但是数据是不一致的,然后使用crash恢复让数据文件一致。当InnoDB启动时会去检查数据文件和日志文件,然后重做已提交事务,执行未提交事务。

XtraBackup记下LSN(Log Sequence Number),然后启动,复制数据文件。同时XtraBackup启动一个后台进程用来监控日志文件,然后复制修改,这个进程在备份期间一直是运行的,因为日志文件时回绕的,避免数据被覆盖无法恢复。直到备份完成。

第二阶段就是预备阶段,XtraBackup通过执行crash恢复,应用日志文件到数据文件上。等待复制InnoDB结束,然后执行FLUSH TABLES WITH READ LOCK,停止对mysql数据的修改。复制非innodb引擎表,直到复制完成,然后释放锁。

这样在prepare阶段后,InnoDB和非InnoDB相互保持了一致性。InnoDB会一直redo,直到备份完成。这个时间刚刚好和FLUSH TABLES WITH READ LOCK时间一直,所以InnoDB和非InnoDB是保持同步的。

- 阅读剩余部分 -

很有必要先说下注意事项:

  1. 严重声明大家在升级glibc时一定要特别特别特别的谨慎和小心,除非确定升级的必要,否则不要随意升级glibc,因为会带来很大的麻烦。
  2. 金牛座是在升级glibc后【姿势基本正确,但是这是不够的】,经过各种折腾,最后把系统玩死了【好在是虚拟机】,经过血的教训【不过,折腾有折腾的好,学到了很多LINUX动态库的有趣玩法,比如 pathelf 这个神器】,金牛座通过完全重装系统,梳理出了升级glibc的正确正确姿势,并分享给大家以防走弯路,请大家务必按严格按照本文的指令效仿操作。
  3. 很多人任性的升级glbc之后,普遍都会遇到一个类似问题就是:"......误删了/lib64/libc.so.6......",然后一番折腾虽然也能解决问题,但是事实上里面的痛苦谁折腾谁知道,根本原因就是安装姿势不正确,那么要是误删了怎么办,请自行google关键字【LD_PRELOAD】,它可以帮你起死回生。
  4. 不要在 glibc源码包里直接执行 ./configure 指令,否则你就等着被KO吧,假如安装包位置是: /path/to/glibc-2.15,正确的姿势是:

    mkdir -pv /path/to/glibc-2.15/build
    cd /path/to/glibc-2.15/build
    ../configure  参数1.... 参数2 ... 参数3...
  5. 不要将 glibc 安装到默认的目录【/usr/local】或者 【任何自定义的目录】,请务必安装到【/usr】目录,否则你就等着被KO吧。
  6. 最后建议大家每安装一个软件包,都要仔细阅读下源码包里的 README 以及 INSTALL 文档,很重要不解释。

查看系统默认的glibc版本:

[root@node1 ~]# /lib64/libc.so.6
GNU C Library stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.7 20120313 (Red Hat 4.4.7-18).
Compiled on a Linux 2.6.32 system on 2018-06-30.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

编译安装glibc-2.15:

[root@node1 ~]# mkdir -pv /path/to/glibc-2.15/build
[root@node1 ~]# cd /path/to/glibc-2.15/
[root@node1 ~]# wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz
[root@node1 ~]# tar xzvf glibc-2.15.tar.gz
[root@node1 ~]# cd /path/to/glibc-2.15/build
[root@node1 ~]# ../glibc-2.15/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
[root@node1 ~]# make
[root@node1 ~]# make install