分类 系统运维 下的文章

人们创建日志的主要原因是排错。通常你会诊断为什么问题发生在你的 Linux 系统或应用程序中。错误信息或一系列的事件可以给你提供找出根本原因的线索,说明问题是如何发生的,并指出如何解决它。这里有几个使用日志来解决的样例。

登录失败原因

如果你想检查你的系统是否安全,你可以在验证日志中检查登录失败的和登录成功但可疑的用户。当有人通过不正当或无效的凭据来登录时会出现认证失败,这通常发生在使用 SSH 进行远程登录或 su 到本地其他用户来进行访问权时。这些是由插入式验证模块(PAM)来记录的。在你的日志中会看到像 Failed password 和 user unknown 这样的字符串。而成功认证记录则会包括像 Accepted password 和 session opened 这样的字符串。

失败的例子:

pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.2.2
Failed password for invalid user hoover from 10.0.2.2 port 4791 ssh2
pam_unix(sshd:auth): check pass; user unknown
PAM service(sshd) ignoring max retries; 6 > 3

成功的例子:

Accepted password for hoover from 10.0.2.2 port 4792 ssh2
pam_unix(sshd:session): session opened for user hoover by (uid=0)
pam_unix(sshd:session): session closed for user hoover

你可以使用 grep 来查找哪些用户失败登录的次数最多。这些都是潜在的攻击者正在尝试和访问失败的账户。这是一个在 ubuntu 系统上的例子。

$ grep "invalid user" /var/log/auth.log | cut -d ' ' -f 10 | sort | uniq -c | sort -nr
23 oracle
18 postgres
17 nagios
10 zabbix
6 test

由于没有标准格式,所以你需要为每个应用程序的日志使用不同的命令。日志管理系统,可以自动分析日志,将它们有效的归类,帮助你提取关键字,如用户名。

日志管理系统可以使用自动解析功能从 Linux 日志中提取用户名。这使你可以看到用户的信息,并能通过点击过滤。在下面这个例子中,我们可以看到,root 用户登录了 2700 次之多,因为我们筛选的日志仅显示 root 用户的尝试登录记录。

日志管理系统也可以让你以时间为做坐标轴的图表来查看,使你更容易发现异常。如果有人在几分钟内登录失败一次或两次,它可能是一个真正的用户而忘记了密码。但是,如果有几百个失败的登录并且使用的都是不同的用户名,它更可能是在试图攻击系统。在这里,你可以看到在3月12日,有人试图登录 Nagios 几百次。这显然​​不是一个合法的系统用户。

重启的原因

有时候,一台服务器由于系统崩溃或重启而宕机。你怎么知道它何时发生,是谁做的?

关机命令

如果有人手动运行 shutdown 命令,你可以在验证日志文件中看到它。在这里,你可以看到,有人从 IP 50.0.134.125 上作为 ubuntu 的用户远程登录了,然后关闭了系统。

Mar 19 18:36:41 ip-172-31-11-231 sshd[23437]: Accepted publickey for ubuntu from 50.0.134.125 port 52538 ssh
Mar 19 18:36:41 ip-172-31-11-231 23437]:sshd[ pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Mar 19 18:37:09 ip-172-31-11-231 sudo:   ubuntu : TTY=pts/1 ; PWD=/home/ubuntu ; USER=root ; COMMAND=/sbin/shutdown -r now

内核初始化

如果你想看看服务器重新启动的所有原因(包括崩溃),你可以从内核初始化日志中寻找。你需要搜索内核类(kernel)和 cpu 初始化(Initializing)的信息。

Mar 19 18:39:30 ip-172-31-11-231 kernel: [    0.000000] Initializing cgroup subsys cpuset
Mar 19 18:39:30 ip-172-31-11-231 kernel: [    0.000000] Initializing cgroup subsys cpu
Mar 19 18:39:30 ip-172-31-11-231 kernel: [    0.000000] Linux version 3.8.0-44-generic (buildd@tipua) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014 (Ubuntu 3.8.0-44.66~precise1-generic 3.8.13.25)

检测内存问题

有很多原因可能导致服务器崩溃,但一个常见的原因是内存用尽。

当你系统的内存不足时,进程会被杀死,通常会杀死使用最多资源的进程。当系统使用了所有内存,而新的或现有的进程试图使用更多的内存时就会出现错误。在你的日志文件查找像 Out of Memory 这样的字符串或类似 kill 这样的内核警告信息。这些信息表明系统故意杀死进程或应用程序,而不是允许进程崩溃。

例如:

[33238.178288] Out of memory: Kill process 6230 (firefox) score 53 or sacrifice child
[29923450.995084] select 5230 (docker), adj 0, size 708, to kill

你可以使用像 grep 这样的工具找到这些日志。这个例子是在 ubuntu 中:

$ grep “Out of memory” /var/log/syslog
 [33238.178288] Out of memory: Kill process 6230 (firefox) score 53 or sacrifice child

请记住,grep 也要使用内存,所以只是运行 grep 也可能导致内存不足的错误。这是另一个你应该中央化存储日志的原因!

定时任务错误日志

cron 守护程序是一个调度器,可以在指定的日期和时间运行进程。如果进程运行失败或无法完成,那么 cron 的错误出现在你的日志文件中。具体取决于你的发行版,你可以在 /var/log/cron,/var/log/messages,和 /var/log/syslog 几个位置找到这个日志。cron 任务失败原因有很多。通常情况下,问题出在进程中而不是 cron 守护进程本身。

默认情况下,cron 任务的输出会通过 postfix 发送电子邮件。这是一个显示了该邮件已经发送的日志。不幸的是,你不能在这里看到邮件的内容。

Mar 13 16:35:01 PSQ110 postfix/pickup[15158]: C3EDC5800B4: uid=1001 from=<hoover>
Mar 13 16:35:01 PSQ110 postfix/cleanup[15727]: C3EDC5800B4: message-id=<20150310110501.C3EDC5800B4@PSQ110>
Mar 13 16:35:01 PSQ110 postfix/qmgr[15159]: C3EDC5800B4: from=<[email protected]>, size=607, nrcpt=1 (queue active)
Mar 13 16:35:05 PSQ110 postfix/smtp[15729]: C3EDC5800B4: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.130.26]:25, delay=4.1, delays=0.26/0/2.2/1.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1425985505 f16si501651pdj.5 - gsmtp)

你可以考虑将 cron 的标准输出记录到日志中,以帮助你定位问题。这是一个你怎样使用 logger 命令重定向 cron 标准输出到 syslog的例子。用你的脚本来代替 echo 命令,helloCron 可以设置为任何你想要的应用程序的名字。

*/5 * * * * echo ‘Hello World’ 2>&1 | /usr/bin/logger -t helloCron

它创建的日志条目:

Apr 28 22:20:01 ip-172-31-11-231 CRON[15296]: (ubuntu) CMD (echo 'Hello World!' 2>&1 | /usr/bin/logger -t helloCron)
Apr 28 22:20:01 ip-172-31-11-231 helloCron: Hello World!

每个 cron 任务将根据任务的具体类型以及如何输出数据来记录不同的日志。

希望在日志中有问题根源的线索,也可以根据需要添加额外的日志记录。


via: http://www.loggly.com/ultimate-guide/logging/troubleshooting-with-linux-logs/

作者:Jason Skowronski 作者:Amy Echeverri 作者:Sadequl Hussain 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

MongoDB 已经成为市面上最知名的 NoSQL 数据库。MongoDB 是面向文档的,它的无模式设计使得它在各种各样的WEB 应用当中广受欢迎。最让我喜欢的特性之一是它的副本集(Replica Set),副本集将同一数据的多份拷贝放在一组 mongod 节点上,从而实现数据的冗余以及高可用性。

这篇教程将向你介绍如何配置一个 MongoDB 副本集。

副本集的最常见配置需要一个主节点以及多个副节点。这之后启动的复制行为会从这个主节点到其他副节点。副本集不止可以针对意外的硬件故障和停机事件对数据库提供保护,同时也因为提供了更多的节点从而提高了数据库客户端数据读取的吞吐量。

配置环境

这个教程里,我们会配置一个包括一个主节点以及两个副节点的副本集。

为了达到这个目的,我们使用了3个运行在 VirtualBox 上的虚拟机。我会在这些虚拟机上安装 Ubuntu 14.04,并且安装 MongoDB 官方包。

我会在一个虚拟机实例上配置好所需的环境,然后将它克隆到其他的虚拟机实例上。因此,选择一个名为 master 的虚拟机,执行以下安装过程。

首先,我们需要给 apt 增加一个 MongoDB 密钥:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

然后,将官方的 MongoDB 仓库添加到 source.list 中:

$ sudo su
# echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

接下来更新 apt 仓库并且安装 MongoDB。

$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

现在对 /etc/mongodb.conf 做一些更改

auth = true
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongod.log
logappend=true
keyFile=/var/lib/mongodb/keyFile
replSet=myReplica

第一行的作用是表明我们的数据库需要验证才可以使用。keyfile 配置用于 MongoDB 节点间复制行为的密钥文件。replSet 为副本集设置一个名称。

接下来我们创建一个用于所有实例的密钥文件。

$ echo -n "MyRandomStringForReplicaSet" | md5sum > keyFile

这将会创建一个含有 MD5 字符串的密钥文件,但是由于其中包含了一些噪音,我们需要对他们清理后才能正式在 MongoDB 中使用。

$ echo -n "MyReplicaSetKey" | md5sum|grep -o "[0-9a-z]\+" > keyFile

grep 命令的作用的是把将空格等我们不想要的内容过滤掉之后的 MD5 字符串打印出来。

现在我们对密钥文件进行一些操作,让它真正可用。

$ sudo cp keyFile /var/lib/mongodb
$ sudo chown mongodb:nogroup keyFile
$ sudo chmod 400 keyFile

接下来,关闭此虚拟机。将其 Ubuntu 系统克隆到其他虚拟机上。

这是克隆后的副节点1和副节点2。确认你已经将它们的MAC地址重新初始化,并且克隆整个硬盘。

请注意,三个虚拟机示例需要在同一个网络中以便相互通讯。因此,我们需要它们弄到“互联网"上去。

这里推荐给每个虚拟机设置一个静态 IP 地址,而不是使用 DHCP。这样它们就不至于在 DHCP 分配IP地址给他们的时候失去连接。

像下面这样编辑每个虚拟机的 /etc/networks/interfaces 文件。

在主节点上:

auto eth1
    iface eth1 inet static
    address 192.168.50.2
    netmask 255.255.255.0

在副节点1上:

auto eth1
    iface eth1 inet static
    address 192.168.50.3
    netmask 255.255.255.0

在副节点2上:

auto eth1
    iface eth1 inet static
    address 192.168.50.4
    netmask 255.255.255.0

由于我们没有 DNS 服务,所以需要设置设置一下 /etc/hosts 这个文件,手工将主机名称放到此文件中。

在主节点上:

127.0.0.1 localhost primary
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2

在副节点1上:

127.0.0.1 localhost secondary1
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2

在副节点2上:

127.0.0.1 localhost secondary2
192.168.50.2 primary
192.168.50.3 secondary1
192.168.50.4 secondary2

使用 ping 命令检查各个节点之间的连接。

$ ping primary
$ ping secondary1
$ ping secondary2

配置副本集

验证各个节点可以正常连通后,我们就可以新建一个管理员用户,用于之后的副本集操作。

在主节点上,打开 /etc/mongodb.conf 文件,将 auth 和 replSet 两项注释掉。

dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongod.log
logappend=true
#auth = true
keyFile=/var/lib/mongodb/keyFile
#replSet=myReplica

在一个新安装的 MongoDB 上配置任何用户或副本集之前,你需要注释掉 auth 行。默认情况下,MongoDB 并没有创建任何用户。而如果在你创建用户前启用了 auth,你就不能够做任何事情。你可以在创建一个用户后再次启用 auth。

修改 /etc/mongodb.conf 之后,重启 mongod 进程。

$ sudo service mongod restart

现在连接到 MongoDB master:

$ mongo <master-ip-address>:27017

连接 MongoDB 后,新建管理员用户。

> use admin
> db.createUser({
user:"admin",
pwd:"
})

重启 MongoDB:

$ sudo service mongod restart

再次连接到 MongoDB,用以下命令将 副节点1 和副节点2节点添加到我们的副本集中。

> use admin
> db.auth("admin","myreallyhardpassword")
> rs.initiate()
> rs.add ("secondary1:27017")
> rs.add("secondary2:27017")

现在副本集到手了,可以开始我们的项目了。参照 官方驱动文档 来了解如何连接到副本集。如果你想要用 Shell 来请求数据,那么你需要连接到主节点上来插入或者请求数据,副节点不行。如果你执意要尝试用副本集操作,那么以下错误信息就蹦出来招呼你了。

myReplica:SECONDARY>
myReplica:SECONDARY> show databases
2015-05-10T03:09:24.131+0000 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
    at Error ()
    at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
    at shellHelper.show (src/mongo/shell/utils.js:630:33)
at shellHelper (src/mongo/shell/utils.js:524:36)
    at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47

如果你要从 shell 连接到整个副本集,你可以安装如下命令。在副本集中的失败切换是自动的。

$ mongo primary,secondary1,secondary2:27017/?replicaSet=myReplica

如果你使用其它驱动语言(例如,JavaScript、Ruby 等等),格式也许不同。

希望这篇教程能对你有所帮助。你可以使用Vagrant来自动完成你的本地环境配置,并且加速你的代码。


via: http://xmodulo.com/setup-replica-set-mongodb.html

作者:Christopher Valerio 译者:mr-ping 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在 RAID 5 中,数据条带化后存储在分布式奇偶校验的多个磁盘上。分布式奇偶校验的条带化意味着它将奇偶校验信息和条带化数据分布在多个磁盘上,这样会有很好的数据冗余。

Setup Raid 5 in CentOS

在 Linux 中配置 RAID 5

对于此 RAID 级别它至少应该有三个或更多个磁盘。RAID 5 通常被用于大规模生产环境中,以花费更多的成本来提供更好的数据冗余性能。

什么是奇偶校验?

奇偶校验是在数据存储中检测错误最简单的常见方式。奇偶校验信息存储在每个磁盘中,比如说,我们有4个磁盘,其中相当于一个磁盘大小的空间被分割去存储所有磁盘的奇偶校验信息。如果任何一个磁盘出现故障,我们可以通过更换故障磁盘后,从奇偶校验信息重建得到原来的数据。

RAID 5 的优点和缺点

  • 提供更好的性能。
  • 支持冗余和容错。
  • 支持热备份。
  • 将用掉一个磁盘的容量存储奇偶校验信息。
  • 单个磁盘发生故障后不会丢失数据。我们可以更换故障硬盘后从奇偶校验信息中重建数据。
  • 适合于面向事务处理的环境,读操作会更快。
  • 由于奇偶校验占用资源,写操作会慢一些。
  • 重建需要很长的时间。

要求

创建 RAID 5 最少需要3个磁盘,你也可以添加更多的磁盘,前提是你要有多端口的专用硬件 RAID 控制器。在这里,我们使用“mdadm”包来创建软件 RAID。

mdadm 是一个允许我们在 Linux 下配置和管理 RAID 设备的包。默认情况下没有 RAID 的配置文件,我们在创建和配置 RAID 后必须将配置文件保存在一个单独的文件 mdadm.conf 中。

在进一步学习之前,我建议你通过下面的文章去了解 Linux 中 RAID 的基础知识。

我的服务器设置

操作系统 :  CentOS 6.5 Final
IP 地址  :    192.168.0.227
主机名    :  rd5.tecmintlocal.com
磁盘 1 [20GB]  :  /dev/sdb
磁盘 2 [20GB]  :  /dev/sdc
磁盘 3 [20GB]  :  /dev/sdd

这是9篇系列教程的第4部分,在这里我们要在 Linux 系统或服务器上使用三个20GB(名为/dev/sdb, /dev/sdc 和 /dev/sdd)的磁盘建立带有分布式奇偶校验的软件 RAID 5。

第1步:安装 mdadm 并检验磁盘

1、 正如我们前面所说,我们使用 CentOS 6.5 Final 版本来创建 RAID 设置,但同样的做法也适用于其他 Linux 发行版。

# lsb_release -a
# ifconfig | grep inet

Setup Raid 5 in CentOS

CentOS 6.5 摘要

2、 如果你按照我们的 RAID 系列去配置的,我们假设你已经安装了“mdadm”包,如果没有,根据你的 Linux 发行版使用下面的命令安装。

# yum install mdadm     [在 RedHat 系统]
# apt-get install mdadm     [在 Debain 系统]

3、 “mdadm”包安装后,先使用fdisk命令列出我们在系统上增加的三个20GB的硬盘。

# fdisk -l | grep sd

Install mdadm Tool in CentOS

安装 mdadm 工具

4、 现在该检查这三个磁盘是否存在 RAID 块,使用下面的命令来检查。

# mdadm -E /dev/sd[b-d]
# mdadm --examine /dev/sdb /dev/sdc /dev/sdd # 或

Examine Drives For Raid

检查 Raid 磁盘

注意: 上面的图片说明,没有检测到任何超级块。所以,这三个磁盘中没有定义 RAID。让我们现在开始创建一个吧!

第2步:为磁盘创建 RAID 分区

5、 首先,在创建 RAID 前磁盘(/dev/sdb, /dev/sdc 和 /dev/sdd)必须有分区,因此,在进行下一步之前,先使用fdisk命令进行分区。

# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd

创建 /dev/sdb 分区

请按照下面的说明在 /dev/sdb 硬盘上创建分区。

  • n 创建新的分区。
  • 然后按 P 选择主分区。选择主分区是因为还没有定义过分区。
  • 接下来选择分区号为1。默认就是1。
  • 这里是选择柱面大小,我们没必要选择指定的大小,因为我们需要为 RAID 使用整个分区,所以只需按两次 Enter 键默认将整个容量分配给它。
  • 然后,按 P 来打印创建好的分区。
  • 改变分区类型,按 L可以列出所有可用的类型。
  • t 修改分区类型。
  • 这里使用fd设置为 RAID 的类型。
  • 然后再次使用p查看我们所做的更改。
  • 使用w保存更改。

Create sdb Partition

创建 sdb 分区

注意: 我们仍要按照上面的步骤来创建 sdc 和 sdd 的分区。

创建 /dev/sdc 分区

现在,通过下面的截图给出创建 sdc 和 sdd 磁盘分区的方法,或者你可以按照上面的步骤。

# fdisk /dev/sdc

Create sdc Partition

创建 sdc 分区

创建 /dev/sdd 分区

# fdisk /dev/sdd

Create sdd Partition

创建 sdd 分区

6、 创建分区后,检查三个磁盘 sdb, sdc, sdd 的变化。

# mdadm --examine /dev/sdb /dev/sdc /dev/sdd
# mdadm -E /dev/sd[b-c]  # 或

Check Partition Changes

检查磁盘变化

注意: 在上面的图片中,磁盘的类型是 fd。

7、 现在在新创建的分区检查 RAID 块。如果没有检测到超级块,我们就能够继续下一步,在这些磁盘中创建一个新的 RAID 5 配置。

Check Raid on Partition

*在分区中检查 RAID *

第3步:创建 md 设备 md0

8、 现在使用所有新创建的分区(sdb1, sdc1 和 sdd1)创建一个 RAID 设备“md0”(即 /dev/md0),使用以下命令。

# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
# mdadm -C /dev/md0 -l=5 -n=3 /dev/sd[b-d]1   # 或

9、 创建 RAID 设备后,检查并确认 RAID,从 mdstat 中输出中可以看到包括的设备的 RAID 级别。

# cat /proc/mdstat

Verify Raid Device

验证 Raid 设备

如果你想监视当前的创建过程,你可以使用watch命令,将 cat /proc/mdstat 传递给它,它会在屏幕上显示且每隔1秒刷新一次。

# watch -n1 cat /proc/mdstat

Monitor Raid Process

监控 RAID 5 构建过程

Raid 5 Process Summary

Raid 5 过程概要

10、 创建 RAID 后,使用以下命令验证 RAID 设备

# mdadm -E /dev/sd[b-d]1

Verify Raid Level

验证 Raid 级别

注意: 因为它显示三个磁盘的信息,上述命令的输出会有点长。

11、 接下来,验证 RAID 阵列,假定包含 RAID 的设备正在运行并已经开始了重新同步。

# mdadm --detail /dev/md0

Verify Raid Array

验证 RAID 阵列

第4步:为 md0 创建文件系统

12、 在挂载前为“md0”设备创建 ext4 文件系统。

# mkfs.ext4 /dev/md0

Create md0 Filesystem

创建 md0 文件系统

13、 现在,在/mnt下创建目录 raid5,然后挂载文件系统到 /mnt/raid5/ 下,并检查挂载点下的文件,你会看到 lost+found 目录。

# mkdir /mnt/raid5
# mount /dev/md0 /mnt/raid5/
# ls -l /mnt/raid5/

14、 在挂载点 /mnt/raid5 下创建几个文件,并在其中一个文件中添加一些内容然后去验证。

# touch /mnt/raid5/raid5_tecmint_{1..5}
# ls -l /mnt/raid5/
# echo "tecmint raid setups" > /mnt/raid5/raid5_tecmint_1
# cat /mnt/raid5/raid5_tecmint_1
# cat /proc/mdstat

Mount Raid 5 Device

挂载 RAID 设备

15、 我们需要在 fstab 中添加条目,否则系统重启后将不会显示我们的挂载点。编辑 fstab 文件添加条目,在文件尾追加以下行。挂载点会根据你环境的不同而不同。

# vim /etc/fstab

/dev/md0                /mnt/raid5              ext4    defaults        0 0

Raid 5 Automount

自动挂载 RAID 5

16、 接下来,运行mount -av命令检查 fstab 条目中是否有错误。

# mount -av

Check Fstab Errors

检查 Fstab 错误

第5步:保存 Raid 5 的配置

17、 在前面章节已经说过,默认情况下 RAID 没有配置文件。我们必须手动保存。如果此步中没有跟随不属于 md0 的 RAID 设备,它会是一些其他随机数字。

所以,我们必须要在系统重新启动之前保存配置。如果配置保存它在系统重新启动时会被加载到内核中然后 RAID 也将被加载。

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Save Raid 5 Configuration

保存 RAID 5 配置

注意:保存配置将保持 md0 设备的 RAID 级别稳定不变。

第6步:添加备用磁盘

18、 备用磁盘有什么用?它是非常有用的,如果我们有一个备用磁盘,当我们阵列中的任何一个磁盘发生故障后,这个备用磁盘会进入激活重建过程,并从其他磁盘上同步数据,这样就有了冗余。

更多关于添加备用磁盘和检查 RAID 5 容错的指令,请阅读下面文章中的第6步和第7步。

结论

在这篇文章中,我们已经看到了如何使用三个磁盘配置一个 RAID 5 。在接下来的文章中,我们将看到如何故障排除并且当 RAID 5 中的一个磁盘损坏后如何恢复。


via: http://www.tecmint.com/create-raid-5-in-linux/

作者:Babin Lonston 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

RAID 镜像意味着相同数据的完整克隆(或镜像),分别写入到两个磁盘中。创建 RAID 1 至少需要两个磁盘,而且仅用于读取性能或者可靠性要比数据存储容量更重要的场合。

Create Raid1 in Linux

在 Linux 中设置 RAID 1

创建镜像是为了防止因硬盘故障导致数据丢失。镜像中的每个磁盘包含数据的完整副本。当一个磁盘发生故障时,相同的数据可以从其它正常磁盘中读取。而后,可以从正在运行的计算机中直接更换发生故障的磁盘,无需任何中断。

RAID 1 的特点

  • 镜像具有良好的性能。
  • 磁盘利用率为50%。也就是说,如果我们有两个磁盘每个500GB,总共是1TB,但在镜像中它只会显示500GB。
  • 在镜像如果一个磁盘发生故障不会有数据丢失,因为两个磁盘中的内容相同。
  • 读取性能会比写入性能更好。

要求

创建 RAID 1 至少要有两个磁盘,你也可以添加更多的磁盘,磁盘数需为2,4,6,8等偶数。要添加更多的磁盘,你的系统必须有 RAID 物理适配器(硬件卡)。

这里,我们使用软件 RAID 不是硬件 RAID,如果你的系统有一个内置的物理硬件 RAID 卡,你可以从它的功能界面或使用 Ctrl + I 键来访问它。

需要阅读: 介绍 RAID 的级别和概念

在我的服务器安装

操作系统 :  CentOS 6.5 Final
IP 地址    :  192.168.0.226
主机名    :  rd1.tecmintlocal.com
磁盘 1 [20GB]  :  /dev/sdb
磁盘 2 [20GB]  :  /dev/sdc

本文将指导你在 Linux 平台上使用 mdadm (用于创建和管理 RAID )一步步的建立一个软件 RAID 1 (镜像)。同样的做法也适用于如 RedHat,CentOS,Fedora 等 Linux 发行版。

第1步:安装所需软件并且检查磁盘

1、 正如我前面所说,在 Linux 中我们需要使用 mdadm 软件来创建和管理 RAID。所以,让我们用 yum 或 apt-get 的软件包管理工具在 Linux 上安装 mdadm 软件包。

# yum install mdadm     [在 RedHat 系统]
# apt-get install mdadm     [在 Debain 系统]

2、 一旦安装好mdadm包,我们需要使用下面的命令来检查磁盘是否已经配置好。

# mdadm -E /dev/sd[b-c]

Check RAID on Disks

检查 RAID 的磁盘

正如你从上面图片看到的,没有检测到任何超级块,这意味着还没有创建RAID。

第2步:为 RAID 创建分区

3、 正如我提到的,我们使用最少的两个分区 /dev/sdb 和 /dev/sdc 来创建 RAID 1。我们首先使用fdisk命令来创建这两个分区并更改其类型为 raid。

# fdisk /dev/sdb

按照下面的说明

  • n 创建新的分区。
  • 然后按 P 选择主分区。
  • 接下来选择分区号为1。
  • 按两次回车键默认将整个容量分配给它。
  • 然后,按 P 来打印创建好的分区。
  • L,列出所有可用的类型。
  • t 修改分区类型。
  • 键入 fd 设置为 Linux 的 RAID 类型,然后按 Enter 确认。
  • 然后再次使用p查看我们所做的更改。
  • 使用w保存更改。

Create Disk Partitions

创建磁盘分区

在创建“/dev/sdb”分区后,接下来按照同样的方法创建分区 /dev/sdc 。

# fdisk /dev/sdc

Create Second Partitions

创建第二个分区

4、 一旦这两个分区创建成功后,使用相同的命令来检查 sdb 和 sdc 分区并确认 RAID 分区的类型如上图所示。

# mdadm -E /dev/sd[b-c]

Verify Partitions Changes

验证分区变化

Check RAID Type

检查 RAID 类型

注意: 正如你在上图所看到的,在 sdb1 和 sdc1 中没有任何对 RAID 的定义,这就是我们没有检测到超级块的原因。

第3步:创建 RAID 1 设备

5、 接下来使用以下命令来创建一个名为 /dev/md0 的“RAID 1”设备并验证它

# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[b-c]1
# cat /proc/mdstat

Create RAID Device

创建RAID设备

6、 接下来使用如下命令来检查 RAID 设备类型和 RAID 阵列

# mdadm -E /dev/sd[b-c]1
# mdadm --detail /dev/md0

Check RAID Device type

检查 RAID 设备类型

Check RAID Device Array

检查 RAID 设备阵列

从上图中,人们很容易理解,RAID 1 已经创建好了,使用了 /dev/sdb1 和 /dev/sdc1 分区,你也可以看到状态为 resyncing(重新同步中)。

第4步:在 RAID 设备上创建文件系统

7、 给 md0 上创建 ext4 文件系统

# mkfs.ext4 /dev/md0

Create RAID Device Filesystem

创建 RAID 设备文件系统

8、 接下来,挂载新创建的文件系统到“/mnt/raid1”,并创建一些文件,验证在挂载点的数据

# mkdir /mnt/raid1
# mount /dev/md0 /mnt/raid1/
# touch /mnt/raid1/tecmint.txt
# echo "tecmint raid setups" > /mnt/raid1/tecmint.txt

Mount Raid Device

挂载 RAID 设备

9、为了在系统重新启动自动挂载 RAID 1,需要在 fstab 文件中添加条目。打开/etc/fstab文件并添加以下行:

/dev/md0                /mnt/raid1              ext4    defaults        0 0

Raid Automount Device

自动挂载 Raid 设备

10、 运行mount -av,检查 fstab 中的条目是否有错误

# mount -av

Check Errors in fstab

检查 fstab 中的错误

11、 接下来,使用下面的命令保存 RAID 的配置到文件“mdadm.conf”中。

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Save Raid Configuration

保存 Raid 的配置

上述配置文件在系统重启时会读取并加载 RAID 设备。

第5步:在磁盘故障后检查数据

12、我们的主要目的是,即使在任何磁盘故障或死机时必须保证数据是可用的。让我们来看看,当任何一个磁盘不可用时会发生什么。

# mdadm --detail /dev/md0

Raid Device Verify

验证 RAID 设备

在上面的图片中,我们可以看到在 RAID 中有2个设备是可用的,并且 Active Devices 是2。现在让我们看看,当一个磁盘拔出(移除 sdc 磁盘)或损坏后会发生什么。

# ls -l /dev | grep sd
# mdadm --detail /dev/md0

Test RAID Devices

测试 RAID 设备

现在,在上面的图片中你可以看到,一个磁盘不见了。我从虚拟机上删除了一个磁盘。此时让我们来检查我们宝贵的数据。

# cd /mnt/raid1/
# cat tecmint.txt

Verify RAID Data

验证 RAID 数据

你可以看到我们的数据仍然可用。由此,我们可以了解 RAID 1(镜像)的优势。在接下来的文章中,我们将看到如何设置一个 RAID 5 条带化分布式奇偶校验。希望这可以帮助你了解 RAID 1(镜像)是如何工作的。


via: http://www.tecmint.com/create-raid1-in-linux/

作者:Babin Lonston 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你已经阅读了前面的如何监控 NGINX,你应该知道从你网络环境的几个指标中可以获取多少信息。而且你也看到了从 NGINX 特定的基础中收集指标是多么容易的。但要实现全面,持续的监控 NGINX,你需要一个强大的监控系统来存储并将指标可视化,当异常发生时能提醒你。在这篇文章中,我们将向你展示如何使用 Datadog 安装 NGINX 监控,以便你可以在定制的仪表盘中查看这些指标:

NGINX dashboard

Datadog 允许你以单个主机、服务、流程和度量来构建图形和警告,或者使用它们的几乎任何组合构建。例如,你可以监控你的所有主机,或者某个特定可用区域的所有NGINX主机,或者您可以监视具有特定标签的所有主机的一个关键指标。本文将告诉您如何:

  • 在 Datadog 仪表盘上监控 NGINX 指标,就像监控其他系统一样
  • 当一个关键指标急剧变化时设置自动警报来通知你

配置 NGINX

为了收集 NGINX 指标,首先需要确保 NGINX 已启用 status 模块和一个 报告 status 指标的 URL。一步步的配置开源 NGINXNGINX Plus 请参见之前的相关文章。

整合 Datadog 和 NGINX

安装 Datadog 代理

Datadog 代理是一个开源软件,它能收集和报告你主机的指标,这样就可以使用 Datadog 查看和监控他们。安装这个代理通常仅需要一个命令

只要你的代理启动并运行着,你会看到你主机的指标报告在你 Datadog 账号下

Datadog infrastructure list

配置 Agent

接下来,你需要为代理创建一个简单的 NGINX 配置文件。在你系统中代理的配置目录应该在这儿找到。

在目录里面的 conf.d/nginx.yaml.example 中,你会发现一个简单的配置文件,你可以编辑并提供 status URL 和可选的标签为每个NGINX 实例:

init_config:

instances:

    -   nginx_status_url: http://localhost/nginx_status/
        tags:
            -   instance:foo

当你提供了 status URL 和任意 tag,将配置文件保存为 conf.d/nginx.yaml。

重启代理

你必须重新启动代理程序来加载新的配置文件。重新启动命令在这里,根据平台的不同而不同。

检查配置文件

要检查 Datadog 和 NGINX 是否正确整合,运行 Datadog 的 info 命令。每个平台使用的命令看这儿

如果配置是正确的,你会看到这样的输出:

Checks
======

  [...]

  nginx
  -----
      - instance #0 [OK]
      - Collected 8 metrics & 0 events 

安装整合

最后,在你的 Datadog 帐户打开“Nginx 整合”。这非常简单,你只要在 NGINX 整合设置中点击“Install Integration”按钮。

Install integration

指标!

一旦代理开始报告 NGINX 指标,你会看到一个 NGINX 仪表盘出现在在你 Datadog 可用仪表盘的列表中。

基本的 NGINX 仪表盘显示有用的图表,囊括了几个我们的 NGINX 监控介绍中的关键指标。 (一些指标,特别是请求处理时间要求进行日志分析,Datadog 不支持。)

你可以通过增加 NGINX 之外的重要指标的图表来轻松创建一个全面的仪表盘,以监控你的整个网站设施。例如,你可能想监视你 NGINX 的主机级的指标,如系统负载。要构建一个自定义的仪表盘,只需点击靠近仪表盘的右上角的选项并选择“Clone Dash”来克隆一个默认的 NGINX 仪表盘。

Clone dash

你也可以使用 Datadog 的主机地图在更高层面监控你的 NGINX 实例,举个例子,用颜色标示你所有的 NGINX 主机的 CPU 使用率来辨别潜在热点。

NGINX 指标警告

一旦 Datadog 捕获并可视化你的指标,你可能会希望建立一些监控自动地密切关注你的指标,并当有问题提醒你。下面将介绍一个典型的例子:一个提醒你 NGINX 吞吐量突然下降时的指标监控器。

监控 NGINX 吞吐量

Datadog 指标警报可以是“基于吞吐量的”(当指标超过设定值会警报)或“基于变化幅度的”(当指标的变化超过一定范围会警报)。在这个例子里,我们会采取后一种方式,当每秒传入的请求急剧下降时会提醒我们。下降往往意味着有问题。

  1. 创建一个新的指标监控。从 Datadog 的“Monitors”下拉列表中选择“New Monitor”。选择“Metric”作为监视器类型。

NGINX metric monitor

  1. 定义你的指标监视器。我们想知道 NGINX 每秒总的请求量下降的数量,所以我们在基础设施中定义我们感兴趣的 nginx.net.requestpers 之和。

NGINX metric

  1. 设置指标警报条件。我们想要在变化时警报,而不是一个固定的值,所以我们选择“Change Alert”。我们设置监控为无论何时请求量下降了30%以上时警报。在这里,我们使用一个一分钟的数据窗口来表示 “now” 指标的值,对横跨该间隔内的平均变化和之前 10 分钟的指标值作比较。

NGINX metric change alert

  1. 自定义通知。如果 NGINX 的请求量下降,我们想要通知我们的团队。在这个例子中,我们将给 ops 团队的聊天室发送通知,并给值班工程师发送短信。在“Say what’s happening”中,我们会为监控器命名,并添加一个伴随该通知的短消息,建议首先开始调查的内容。我们会 @ ops 团队使用的 Slack,并 @pagerduty 将警告发给短信

NGINX metric notification

  1. 保存集成监控。点击页面底部的“Save”按钮。你现在在监控一个关键的 NGINX 工作指标,而当它快速下跌时会给值班工程师发短信。

结论

在这篇文章中,我们谈到了通过整合 NGINX 与 Datadog 来可视化你的关键指标,并当你的网络基础架构有问题时会通知你的团队。

如果你一直使用你自己的 Datadog 账号,你现在应该可以极大的提升你的 web 环境的可视化,也有能力对你的环境、你所使用的模式、和对你的组织最有价值的指标创建自动监控。

如果你还没有 Datadog 帐户,你可以注册免费试用,并开始监视你的基础架构,应用程序和现在的服务。


via: https://www.datadoghq.com/blog/how-to-monitor-nginx-with-datadog/

作者:K Young 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

RAID 即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护。RAID 是一些磁盘的集合,是包含一个阵列的逻辑卷。驱动器可以组合起来成为一个阵列或称为(组的)集合。

创建 RAID 最少应使用2个连接到 RAID 控制器的磁盘组成,来构成逻辑卷,可以根据定义的 RAID 级别将更多的驱动器添加到一个阵列中。不使用物理硬件创建的 RAID 被称为软件 RAID。软件 RAID 也叫做穷人 RAID。

Setup RAID0 in Linux

在 Linux 中创建 RAID0

使用 RAID 的主要目的是为了在发生单点故障时保存数据,如果我们使用单个磁盘来存储数据,如果它损坏了,那么就没有机会取回我们的数据了,为了防止数据丢失我们需要一个容错的方法。所以,我们可以使用多个磁盘组成 RAID 阵列。

在 RAID 0 中条带是什么

条带是通过将数据在同时分割到多个磁盘上。假设我们有两个磁盘,如果我们将数据保存到该逻辑卷上,它会将数据保存在两个磁盘上。使用 RAID 0 是为了获得更好的性能,但是如果驱动器中一个出现故障,我们将不能得到完整的数据。因此,使用 RAID 0 不是一种好的做法。唯一的解决办法就是安装有 RAID 0 逻辑卷的操作系统来提高重要文件的安全性。

  • RAID 0 性能较高。
  • 在 RAID 0 上,空间零浪费。
  • 零容错(如果硬盘中的任何一个发生故障,无法取回数据)。
  • 写和读性能都很好。

要求

创建 RAID 0 允许的最小磁盘数目是2个,但你可以添加更多的磁盘,不过数目应该是2,4,6,8等的偶数。如果你有一个物理 RAID 卡并且有足够的端口,你可以添加更多磁盘。

在这里,我们没有使用硬件 RAID,此设置只需要软件 RAID。如果我们有一个物理硬件 RAID 卡,我们可以从它的功能界面访问它。有些主板默认内建 RAID 功能,还可以使用 Ctrl + I 键访问它的界面。

如果你是刚开始设置 RAID,请阅读我们前面的文章,我们已经介绍了一些关于 RAID 基本的概念。

我的服务器设置

操作系统 :  CentOS 6.5 Final
IP 地址    :  192.168.0.225
两块盘    :  20 GB each

这是9篇系列教程的第2部分,在这部分,我们将看看如何能够在 Linux 上创建和使用 RAID 0(条带化),以名为 sdb 和 sdc 两个 20GB 的硬盘为例。

第1步:更新系统和安装管理 RAID 的 mdadm 软件

1、 在 Linux 上设置 RAID 0 前,我们先更新一下系统,然后安装mdadm 包。mdadm 是一个小程序,这将使我们能够在Linux下配置和管理 RAID 设备。

# yum clean all && yum update
# yum install mdadm -y

install mdadm in linux

安装 mdadm 工具

第2步:确认连接了两个 20GB 的硬盘

2、 在创建 RAID 0 前,请务必确认两个硬盘能被检测到,使用下面的命令确认。

# ls -l /dev | grep sd

Check Hard Drives in Linux

检查硬盘

3、 一旦检测到新的硬盘驱动器,同时检查是否连接的驱动器已经被现有的 RAID 使用,使用下面的mdadm 命令来查看。

# mdadm --examine /dev/sd[b-c]

Check RAID Devices in Linux

检查 RAID 设备

从上面的输出我们可以看到,没有任何 RAID 使用 sdb 和 sdc 这两个驱动器。

第3步:创建 RAID 分区

4、 现在用 sdb 和 sdc 创建 RAID 的分区,使用 fdisk 命令来创建。在这里,我将展示如何创建 sdb 驱动器上的分区。

# fdisk /dev/sdb

请按照以下说明创建分区。

  • n 创建新的分区。
  • 然后按P 选择主分区。
  • 接下来选择分区号为1。
  • 只需按两次回车键选择默认值即可。
  • 然后,按P 来显示创建好的分区。

Create Partitions in Linux

创建分区

请按照以下说明将分区创建为 Linux 的 RAID 类型。

  • L,列出所有可用的类型。
  • t 去修改分区。
  • 键入fd 设置为 Linux 的 RAID 类型,然后按回车确认。
  • 然后再次使用p查看我们所做的更改。
  • 使用w保存更改。

Create RAID Partitions

在 Linux 上创建 RAID 分区

: 请使用上述步骤同样在 sdc 驱动器上创建分区。

5、 创建分区后,验证这两个驱动器是否正确定义 RAID,使用下面的命令。

# mdadm --examine /dev/sd[b-c]
# mdadm --examine /dev/sd[b-c]1

Verify RAID Partitions

验证 RAID 分区

第4步:创建 RAID md 设备

6、 现在使用以下命令创建 md 设备(即 /dev/md0),并选择 RAID 合适的级别。

# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1
# mdadm --create /dev/md0 --level=stripe --raid-devices=2 /dev/sd[b-c]1
  • -C – 创建
  • -l – 级别
  • -n – RAID 设备数

7、 一旦 md 设备已经建立,使用如下命令可以查看 RAID 级别,设备和阵列的使用状态。

# cat /proc/mdstat

Verify RAID Level

查看 RAID 级别

# mdadm -E /dev/sd[b-c]1

Verify RAID Device

查看 RAID 设备

# mdadm --detail /dev/md0

Verify RAID Array

查看 RAID 阵列

第5步:给 RAID 设备创建文件系统

8、 将 RAID 设备 /dev/md0 创建为 ext4 文件系统,并挂载到 /mnt/raid0 下。

# mkfs.ext4 /dev/md0

Create ext4 Filesystem in Linux

创建 ext4 文件系统

9、 在 RAID 设备上创建好 ext4 文件系统后,现在创建一个挂载点(即 /mnt/raid0),并将设备 /dev/md0 挂载在它下。

# mkdir /mnt/raid0
# mount /dev/md0 /mnt/raid0/

10、下一步,使用 df 命令验证设备 /dev/md0 是否被挂载在 /mnt/raid0 下。

# df -h

11、 接下来,在挂载点 /mnt/raid0 下创建一个名为tecmint.txt 的文件,为创建的文件添加一些内容,并查看文件和目录的内容。

# touch /mnt/raid0/tecmint.txt
# echo "Hi everyone how you doing ?" > /mnt/raid0/tecmint.txt
# cat /mnt/raid0/tecmint.txt
# ls -l /mnt/raid0/

Verify Mount Device

验证挂载的设备

12、 当你验证挂载点后,就可以将它添加到 /etc/fstab 文件中。

# vim /etc/fstab

添加以下条目,根据你的安装位置和使用文件系统的不同,自行做修改。

/dev/md0                /mnt/raid0              ext4    deaults         0 0

Add Device to Fstab

添加设备到 fstab 文件中

13、 使用 mount 命令的 -a 来检查 fstab 的条目是否有误。

# mount -av

Check Errors in Fstab

检查 fstab 文件是否有误

第6步:保存 RAID 配置

14、 最后,保存 RAID 配置到一个文件中,以供将来使用。我们再次使用带有-s (scan) 和-v (verbose) 选项的 mdadm 命令,如图所示。

# mdadm -E -s -v >> /etc/mdadm.conf
# mdadm --detail --scan --verbose >> /etc/mdadm.conf  
# cat /etc/mdadm.conf

Save RAID Configurations

保存 RAID 配置

就这样,我们在这里看到,如何通过使用两个硬盘配置具有条带化的 RAID 0 。在接下来的文章中,我们将看到如何设置 RAID 1。


via: http://www.tecmint.com/create-raid0-in-linux/

作者:Babin Lonston 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出