Openvpn 笔记

服务端配置文件 server.conf

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#################################################
# 针对多客户端的OpenVPN 2.0 的服务器端配置文件示例
#
# 本文件用于多客户端<->单服务器端的OpenVPN服务器端配置
#
# OpenVPN也支持单机<->单机的配置(更多信息请查看网站上的示例页面)
#
# 该配置支持Windows或者Linux/BSD系统。此外,在Windows上,记得将路径加上双引号,
# 并且使用两个反斜杠,例如:"C:\\Program Files\\OpenVPN\\config\\foo.key"
#
# '#' or ';'开头的均为注释内容
#################################################

#OpenVPN应该监听本机的哪些IP地址?
#该命令是可选的,如果不设置,则默认监听本机的所有IP地址。
;local a.b.c.d

# OpenVPN应该监听哪个TCP/UDP端口?
# 如果你想在同一台计算机上运行多个OpenVPN实例,你可以使用不同的端口号来区分它们。
# 此外,你需要在防火墙上开放这些端口。
port 1194

#OpenVPN使用TCP还是UDP协议?
;proto tcp
proto udp

# 指定OpenVPN创建的通信隧道类型。
# "dev tun"将会创建一个路由IP隧道,
# "dev tap"将会创建一个以太网隧道。
#
# 如果你是以太网桥接模式,并且提前创建了一个名为"tap0"的与以太网接口进行桥接的虚拟接口,则你可以使用"dev tap0"
#
# 如果你想控制VPN的访问策略,你必须为TUN/TAP接口创建防火墙规则。
#
# 在非Windows系统中,你可以给出明确的单位编号(unit number),例如"tun0"。
# 在Windows中,你也可以使用"dev-node"。
# 在多数系统中,除非你部分禁用或者完全禁用了TUN/TAP接口的防火墙,否则VPN将不起作用。
;dev tap
dev tun

# 如果你想配置多个隧道,你需要用到网络连接面板中TAP-Win32适配器的名称(例如"MyTap")。
# 在XP SP2或更高版本的系统中,你可能需要有选择地禁用掉针对TAP适配器的防火墙
# 通常情况下,非Windows系统则不需要该指令。
;dev-node MyTap

# 设置SSL/TLS根证书(ca)、证书(cert)和私钥(key)。
# 每个客户端和服务器端都需要它们各自的证书和私钥文件。
# 服务器端和所有的客户端都将使用相同的CA证书文件。
#
# 通过easy-rsa目录下的一系列脚本可以生成所需的证书和私钥。
# 记住,服务器端和每个客户端的证书必须使用唯一的Common Name。
#
# 你也可以使用遵循X509标准的任何密钥管理系统来生成证书和私钥。
# OpenVPN 也支持使用一个PKCS #12格式的密钥文件(详情查看站点手册页面的"pkcs12"指令)
ca ca.crt
cert server.crt
key server.key  # 该文件应该保密

# 指定迪菲·赫尔曼参数。
# 你可以使用如下名称命令生成你的参数:
#   openssl dhparam -out dh1024.pem 1024
# 如果你使用的是2048位密钥,使用2048替换其中的1024。
dh dh1024.pem

# 设置服务器端模式,并提供一个VPN子网,以便于从中为客户端分配IP地址。
# 在此处的示例中,服务器端自身将占用10.8.0.1,其他的将提供客户端使用。
# 如果你使用的是以太网桥接模式,请注释掉该行。更多信息请查看官方手册页面。
server 10.8.0.0 255.255.255.0

# 指定用于记录客户端和虚拟IP地址的关联关系的文件。
# 当重启OpenVPN时,再次连接的客户端将分配到与上一次分配相同的虚拟IP地址
ifconfig-pool-persist ipp.txt

# 该指令仅针对以太网桥接模式。
# 首先,你必须使用操作系统的桥接能力将以太网网卡接口和TAP接口进行桥接。
# 然后,你需要手动设置桥接接口的IP地址、子网掩码;
# 在这里,我们假设为10.8.0.4和255.255.255.0。
# 最后,我们必须指定子网的一个IP范围(例如从10.8.0.50开始,到10.8.0.100结束),以便于分配给连接的客户端。
# 如果你不是以太网桥接模式,直接注释掉这行指令即可。
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# 该指令仅针对使用DHCP代理的以太网桥接模式,
# 此时客户端将请求服务器端的DHCP服务器,从而获得分配给它的IP地址和DNS服务器地址。
#
# 在此之前,你也需要先将以太网网卡接口和TAP接口进行桥接。
# 注意:该指令仅用于OpenVPN客户端,并且该客户端的TAP适配器需要绑定到一个DHCP客户端上。
;server-bridge

# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。
# (简而言之,就是允许客户端访问VPN服务器自身所在的其他局域网)
# 记住,这些私有子网也要将OpenVPN客户端的地址池(10.8.0.0/255.255.255.0)反馈回OpenVPN服务器。
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# 为指定的客户端分配指定的IP地址,或者客户端背后也有一个私有子网想要访问VPN,
# 那么你可以针对该客户端的配置文件使用ccd子目录。
# (简而言之,就是允许客户端所在的局域网成员也能够访问VPN)

# 举个例子:假设有个Common Name为"Thelonious"的客户端背后也有一个小型子网想要连接到VPN,该子网为192.168.40.128/255.255.255.248。
# 首先,你需要去掉下面两行指令的注释:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# 然后创建一个文件ccd/Thelonious,该文件的内容为:
#     iroute 192.168.40.128 255.255.255.248
#这样客户端所在的局域网就可以访问VPN了。
# 注意,这个指令只能在你是基于路由、而不是基于桥接的模式下才能生效。
# 比如,你使用了"dev tun"和"server"指令。

# 再举个例子:假设你想给Thelonious分配一个固定的IP地址10.9.0.1。
# 首先,你需要去掉下面两行指令的注释:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# 然后在文件ccd/Thelonious中添加如下指令:
#   ifconfig-push 10.9.0.1 10.9.0.2

# 如果你想要为不同群组的客户端启用不同的防火墙访问策略,你可以使用如下两种方法:
# (1)运行多个OpenVPN守护进程,每个进程对应一个群组,并为每个进程(群组)启用适当的防火墙规则。
# (2) (进阶)创建一个脚本来动态地修改响应于来自不同客户的防火墙规则。
# 关于learn-address脚本的更多信息请参考官方手册页面。
;learn-address ./script

# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。
# (为确保能正常工作,OpenVPN服务器所在计算机可能需要在TUN/TAP接口与以太网之间使用NAT或桥接技术进行连接)
;push "redirect-gateway def1 bypass-dhcp"

# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# 去掉该指令的注释将允许不同的客户端之间相互"可见"(允许客户端之间互相访问)。
# 默认情况下,客户端只能"看见"服务器。为了确保客户端只能看见服务器,你还可以在服务器端的TUN/TAP接口上设置适当的防火墙规则。
;client-to-client

# 如果多个客户端可能使用相同的证书/私钥文件或Common Name进行连接,那么你可以取消该指令的注释。
# 建议该指令仅用于测试目的。对于生产使用环境而言,每个客户端都应该拥有自己的证书和私钥。
# 如果你没有为每个客户端分别生成Common Name唯一的证书/私钥,你可以取消该行的注释(但不推荐这样做)。
;duplicate-cn

# keepalive指令将导致类似于ping命令的消息被来回发送,以便于服务器端和客户端知道对方何时被关闭。
# 每10秒钟ping一次,如果120秒内都没有收到对方的回复,则表示远程连接已经关闭。
keepalive 10 120

# 出于SSL/TLS之外更多的安全考虑,创建一个"HMAC 防火墙"可以帮助抵御DoS攻击和UDP端口淹没攻击。
# 你可以使用以下命令来生成:
#   openvpn --genkey --secret ta.key
#
# 服务器和每个客户端都需要拥有该密钥的一个拷贝。
# 第二个参数在服务器端应该为'0',在客户端应该为'1'。
;tls-auth ta.key 0 # 该文件应该保密

# 选择一个密码加密算法。
# 该配置项也必须复制到每个客户端配置文件中。
;cipher BF-CBC        # Blowfish (默认)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES

# 在VPN连接上启用压缩。
# 如果你在此处启用了该指令,那么也应该在每个客户端配置文件中启用它。
comp-lzo

# 允许并发连接的客户端的最大数量
;max-clients 100

# 在完成初始化工作之后,降低OpenVPN守护进程的权限是个不错的主意。
# 该指令仅限于非Windows系统中使用。
;user nobody
;group nobody

# 持久化选项可以尽量避免访问那些在重启之后由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun

# 输出一个简短的状态文件,用于显示当前的连接状态,该文件每分钟都会清空并重写一次。
status openvpn-status.log

# 默认情况下,日志消息将写入syslog(在Windows系统中,如果以服务方式运行,日志消息将写入OpenVPN安装目录的log文件夹中)。
# 你可以使用log或者log-append来改变这种默认情况。
# "log"方式在每次启动时都会清空之前的日志文件。
# "log-append"这是在之前的日志内容后进行追加。
# 你可以使用两种方式之一(但不要同时使用)。
;log         openvpn.log
;log-append  openvpn.log

# 为日志文件设置适当的冗余级别(0~9)。冗余级别越高,输出的信息越详细。
#
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。
verb 3

# 重复信息的沉默度。
# 相同类别的信息只有前20条会输出到日志文件中。
;mute 20

客户端配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
##############################################
# 针对多个客户端的OpenVPN 2.0 的客户端配置文件示例
#
# 该配置文件可以被多个客户端使用,当然每个客户端都应该有自己的证书和密钥文件
#
# 在Windows上此配置文件的后缀应该是".ovpn",在Linux/BSD系统中则是".conf"
##############################################

# 指定这是一个客户端,我们将从服务器获取某些配置文件指令
client

# 在大多数系统中,除非你部分禁用或者完全禁用了TUN/TAP接口的防火墙,否则VPN将不起作用。
;dev tap
dev tun

# 在Windows系统中,如果你想配置多个隧道,则需要该指令。
# 你需要用到网络连接面板中TAP-Win32适配器的名称(例如"MyTap")。
# 在XP SP2或更高版本的系统中,你可能需要禁用掉针对TAP适配器的防火墙。
;dev-node MyTap

# 指定连接的服务器是采用TCP还是UDP协议。
# 这里需要使用与服务器端相同的设置。
;proto tcp
proto udp

# 指定服务器的主机名(或IP)以及端口号。
# 如果有多个VPN服务器,为了实现负载均衡,你可以设置多个remote指令。
remote my-server-1 1194
;remote my-server-2 1194

# 如果指定了多个remote指令,启用该指令将随机连接其中的一台服务器,
# 否则,客户端将按照指定的先后顺序依次尝试连接服务器。
;remote-random

# 启用该指令,与服务器连接中断后将自动重新连接,这在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
resolv-retry infinite

# 大多数客户端不需要绑定本机特定的端口号
nobind

# 在初始化完毕后,降低OpenVPN的权限(该指令仅限于非Windows系统中使用)
;user nobody
;group nobody

# 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
persist-key
persist-tun

# 如果你是通过HTTP代理方式来连接到实际的VPN服务器,请在此处指定代理服务器的主机名(或IP)和端口号。
# 如果你的代理服务器需要身份认证,请参考官方手册页面。
;http-proxy-retry # 连接失败时自动重试
;http-proxy [proxy server] [proxy port #]

# 无线网络通常会产生大量的重复数据包。设置此标识将忽略掉重复数据包的警告信息。
;mute-replay-warnings

# SSL/TLS 参数配置。
# 更多描述信息请参考服务器端配置文件。
# 最好为每个客户端单独分配.crt/.key文件对。
# 单个CA证书可以供所有客户端使用。
ca ca.crt
cert client.crt
key client.key

# 指定通过检查证书的nsCertType字段是否为"server"来验证服务器端证书。
# 这是预防潜在攻击的一种重要措施。
#
# 为了使用该功能,你需要在生成服务器端证书时,将其中的nsCertType字段设为"server"
# easy-rsa文件夹中的build-key-server脚本文件可以达到该目的。
ns-cert-type server

# 如果服务器端使用了tls-auth密钥,那么每个客户端也都应该有该密钥。
;tls-auth ta.key 1

# 指定密码的加密算法。
# 如果服务器端启用了cipher指令选项,那么你必须也在这里指定它。
;cipher x

# 在VPN连接中启用压缩。
# 该指令的启用/禁用应该与服务器端保持一致。
comp-lzo

# 设置日志文件冗余级别(0~9)。
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。
verb 3

# 忽略过多的重复信息。
# 相同类别的信息只有前20条会输出到日志文件中。
;mute 20

撤销客户端证书

  • 生成/更新 crl.pem

Lvm 笔记

LVM 一览

lvm一览

LVM 结构

  • PE 物理扩展
  • PV 物理卷,在设备起始处放置一个标签,包括 uuid,lvm 配置元数据位置以及剩余空间
    • PV 可以由分区创建,也可以直接用磁盘创建
  • VG 卷组
  • LV 逻辑卷
    • Linear 线性卷
    • Stripe 条带卷
    • RAID raid 逻辑卷
    • Mirror 镜像卷
    • Thinly-Provision 精简配置逻辑卷
    • Snapshot 快照卷
    • Thinly-Provisioned Snapshot 精简配置快照卷
    • Cache 缓存卷

LVM 相关命令

PV

  • pvchange 更改物理卷属性
  • pvck 检查物理卷元数据
  • pvcreate 初始化磁盘或分区以供lvm使用
  • pvdisplay 显示物理卷的属性
  • pvmove 移动物理Exent
  • pvremove 删除物理卷
  • pvresize 调整lvm2使用的磁盘或分区的大小
  • pvs 报告有关物理卷的信息
  • pvscan 扫描物理卷的所有磁盘

VG

  • vgcfgbackup 备份卷组描述符区域
  • vgcfgrestore 恢复卷组描述符区域
  • vgchange 更改卷组的属性
  • vgck 检查卷组元数据
  • vgconvert 转换卷组元数据格式
  • vgcreate 创建卷组
  • vgdisplay 显示卷组的属性
  • vgexport 使卷组对系统不了解(这是个什么)
  • vgextend 将物理卷添加到卷组
  • vgimportclone 导入并重命名重复的卷组(例如硬件快照)
  • vgmerge 合并两个卷组
  • vgmknodes 重新创建卷组目录和逻辑卷特殊文件
  • vgreduce 通过删除一个或多个物理卷来减少卷组(将物理卷踢出VG)
  • vgremove 删除卷组
  • vgrename 重命名卷组
  • vgs 报告有关卷组信息
  • vgscan 扫描卷组的所有磁盘并重建高速缓存
  • vgsplit 将卷组拆分为两个,通过移动整个物理卷将任何逻辑卷从一个卷组移动到另一个卷组

LV

  • lvchange 更改逻辑卷属性
  • lvconvert 将逻辑卷从线性转换为镜像或快照
  • lvcreate 将现有卷组中创建逻辑卷
  • lvdisplay 显示逻辑卷的属性
  • lvextend 扩展逻辑卷的大小
  • lvmconfig 在加载lvm.conf和任何其他配置文件后显示配置信息
  • lvmdiskscan 扫描lvm2可见的所有设备
  • lvmdump 创建lvm2信息转储以用于诊断目的
  • lvreduce 减少逻辑卷的大小
  • lvremove 删除逻辑卷
  • lvrename 重命名逻辑卷
  • lvresize 调整逻辑卷大小
  • lvs 报告有关逻辑卷的信息
  • lvscan 扫描所有的逻辑卷

创建 LVM

  • 将磁盘创建为 pv(物理卷),其实物理磁盘被条带化为 pv,划成了一个一个的 pe,默认每个 pe 大小是 4MB
  • 创建 vg,其实它是一个空间池,不同PV加入同一 vg
  • 创建 lv,组成 lv 的 pe 可能来自不同的物理磁盘
  • 格式化 lv,挂载使用

PV 管理

  • 制作 pv
    1
    
    pvcreate /dev/sdb1
    
  • 删除 pv(需先踢出 vg)
    1
    
    pvremove /dev/sdb1
    
  • 同步物理卷容量
    1
    
    pvresize /dev/sdb1
    

VG 管理

  • 制作 vg
    1
    2
    3
    4
    5
    
    # vgcreate vg_name 磁盘设备或分区
    vgcreate datavg /dev/sdb1
    vgcreate datavg /dev/sdb1 /dev/sdb2
    # -s 指定pe的大小为16M,默认不指定是4M
    vgcreate -s 16M datavg2 /dev/sdb3
    
  • 从 vg 中移除缺失的磁盘
    1
    2
    
    vgreduce --removemissing datavg
    vgreduce --removemissing datavg --force # 强制移除
    
  • 扩展 vg 空间
    1
    
    vgextend datavg /dev/sdb3 /dev/sdc
    
  • 踢出 vg 中的某个成员
    1
    
    vgreduce datavg /dev/sdb3
    
  • 删除 vg
    1
    
    vgremove VG
    
  • 重命名 vg
    1
    
    vgrename xxxx-vgid-xxxx-xxxx new_name
    

LV 管理

  • 制作 lv
    1
    2
    
    # -n lv_name,-L lv_size,datavg(vg name)
    lvcreate -n lvdata1 -L 1.5G datavg
    
  • 激活修复后的逻辑卷
    1
    2
    
    lvchange -ay /dev/datavg/lvdata1
    lvchange -ay /dev/datavg/lvdata1 -K # 强制激活
    
  • 创建 lvm 快照
    1
    2
    3
    4
    
    # 数据一致性备份
    # 先做一个快照,冻结当前系统,这样快照里面的内容可暂时保持不变
    # 系统本身继续运行,通过重新挂载备份快照卷,实现不中断服务备份。
    lvcreate -s -n kuaizhao01 -L 100M /dev/datavg/lvdata1
    
  • 删除 lv
    1
    
    lvremove /dev/mapper/VG-mylv
    
  • 扩大一个 lv
    • 用vgdisplay查看vg还有多少空余空间
    • 扩充逻辑卷
      1
      2
      3
      
      lvextend -L +1G /dev/VG/LV01
      # -r 表示在扩展的同时也更新文件系统,不是所有的发行版本都支持
      lvextend -L +1G /dev/VG/LV01 -r
      
    • 扩充操作后,df -h 发现大小并没有变,需更新文件系统
      1
      2
      3
      4
      
      # 不同文件系统更新的命令不一样
      e2fsck -f /dev/datavg/lvdata1 # ext4 文件系统,检查 lv 的文件系统
      resize2fs /dev/VG/LV01 # ext4 文件系统命令,该命令后面接 lv 的设备名就行
      xfs_growfs /nas # xfs 文件系统,该命令后面直接跟的是挂载点
      
    • 更新文件系统后,df -h 正常
  • 缩小一个 lv
    • umount 卸载
    • 缩小文件系统
      1
      
      resize2fs /dev/VG/LV01 2G
      
    • 缩小 lv
      1
      
      lvreduce -L -1G /dev/VG/LV01
      
    • 查看 lvs,mount 挂载

lvm 灾难恢复

  • 场景: 三块盘做 lvm,现有一物理盘损坏,将剩下两块放到其他linux服务器上
  • 恢复步骤
    • 查看磁盘信息,lvm信息,确认能查到lvm相关信息,找到VG组的名字
      1
      2
      3
      4
      5
      
      pvs
      lvs
      vgs
      fidsk
      blkid
      
    • 删除 lvm 信息中损坏的磁盘角色,强制提出故障磁盘
      1
      
      vgreduce --removemissing VG_name
      
    • 强制激活 vg 组
      1
      
      vgchange -ay
      
    • 强制激活 lvm
      1
      
      lvchange -ay /dev/VG_name
      
    • 挂载

CentOS7 yum 安装 Zabbix 4.4

环境

  • centos 7
  • nginx 1.16
  • php 7.2
  • zabbix 4.4
  • mysql 5.7

虚拟机

  • 192.168.1.100 安装 nginx, php, mysql, zabbix-server, zabbix-agent
  • 192.168.1.101 安装 zabbix-agent

导入软件源

  • 只在 192.168.1.100 上操作
  • 创建 /etc/yum.repos.d/epel.repo,内容如下
    1
    2
    3
    4
    5
    6
    7
    
    [epel]
    name=Extra Packages for Enterprise Linux 7 - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
    failovermethod=priority
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    
  • 创建 /etc/yum.repos.d/nginx.repo,内容如下
    1
    2
    3
    4
    5
    6
    
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    enabled=1
    gpgcheck=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
  • 安装 webtatic 源,用于安装 php7.2
    1
    2
    
    #这货依赖 epel-release,前面已经手动创建 epel 源,不鸟它!
    rpm -Uvh --nodeps https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    
  • 创建 /etc/yum.repos.d/mysql5.7.repo,内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    [mysql-connectors-community]
    name=MySQL Connectors Community
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    
    [mysql-tools-community]
    name=MySQL Tools Community
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    
    [mysql57-community]
    name=MySQL 5.7 Community Server
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    
  • 创建 /etc/yum.repos.d/zabbix.repo,内容如下
    1
    2
    3
    4
    5
    6
    
    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.4/rhel/7/$basearch/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
    
  • 重建 yum 缓存
    1
    2
    
    yum clean all
    yum makecache fast
    

安装 nginx

  • 安装
    1
    
    yum install nginx
    
  • 修改 /etc/nginx/nginx.conf,内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    # Nginx main config
    user                 nginx;
    pid                  /run/nginx.pid;
    error_log            /var/log/nginx/error.log;
    worker_processes     auto;
    worker_rlimit_nofile 65535;
    include              /usr/share/nginx/modules/*.conf;
    events {
        use                epoll;
        multi_accept       on;
        worker_connections 10240;
    }
    http {
        log_format main     '$remote_addr - [$time_local] "$request_method $uri" "$args" '
                            '"-" $status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
        access_log          /var/log/nginx/access.log main;
        gzip                on;
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         off;
        server_tokens       off;
        keepalive_timeout   65;
        types_hash_max_size 2048;
        default_type        application/octet-stream;
        include             /etc/nginx/mime.types;
        include             /etc/nginx/conf.d/*.conf;
    }
    
  • 创建 /etc/nginx/conf.d/10080.conf,内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    # nginx listen 10080
    server {
        listen      10080;
        server_name _;
        location /zabbix/ {
            root       /usr/share;
            access_log /var/log/nginx/access-zabbix.log main;
            index      index.php index.html index.html;
        }
        location ~ ^/zabbix/.+\.php$ {
            root                    /usr/share;
            access_log              /var/log/nginx/access-zabbix.log main;
            index                   index.php index.html index.html;
            expires                 -1s;
            include                 fastcgi_params;
            try_files               $uri =404;
            fastcgi_pass            unix:/var/lib/php/phpfpm.sock;
            fastcgi_index           index.php;
            fastcgi_param           PATH_INFO $fastcgi_path_info;
            fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            break;
        }
        location / {
            access_log /var/log/nginx/access-illegal.log main;
            return     403;
        }
    }
    
  • 开机自启
    1
    
    systemctl enable nginx
    
  • 启动 nginx
    1
    
    systemctl start nginx
    

安装 php

  • 安装
    1
    2
    3
    4
    5
    6
    7
    8
    
    yum install php72w \
        php72w-cli \
        php72w-fpm \
        php72w-gd \
        php72w-mbstring \
        php72w-xml \
        php72w-mysqlnd \
        php72w-bcmath
    
  • 修改 /etc/php.ini 中如下配置项
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    max_execution_time = 300
    memory_limit = 128M
    post_max_size = 16M
    upload_max_filesize = 2M
    max_input_time = 300
    max_input_vars = 10000
    date.timezone = PRC
    #php 与 mysql 同机可指定 mysql 本地套接字
    pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
    mysqli.default_socket = /var/lib/mysql/mysql.sock
    
  • 修改 /etc/php-fpm.d/www.conf 中如下配置
    1
    2
    
    listen = /var/lib/php/phpfpm.sock
    listen.mode = 0666
    
  • 开机自启
    1
    
    systemctl enable php-fpm
    
  • 启动 php-fpm
    1
    
    systemctl start php-fpm
    

安装 mysql 5.7

  • 安装,参考 CentOS7 yum 安装 MySQL5.7
  • 启动 mysqld 服务,创建 zabbix 数据库及其用户
    1
    2
    3
    
    create database zabbix default charset utf8mb4;
    grant all on zabbix.* to zbx@localhost identified by 'Zbx_123456';
    flush privileges;
    

安装 zabbix server

  • 安装
    1
    
    yum install zabbix-server-mysql zabbix-web-mysql
    
  • 导入 zabbix server 初始数据
    1
    
    zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzbx -p -Dzabbix
    
  • 修改 /etc/zabbix/zabbix_server.conf 中如下配置
    1
    2
    3
    4
    5
    
    DBName=zabbix
    DBUser=zbx
    DBPassword=Zbx_123456
    DBSocket=/var/lib/mysql/mysql.sock
    AllowRoot=1
    
  • 开机自启
    1
    
    systemctl enable zabbix-server
    
  • 启动 zabbix-server
    1
    
    systemctl start zabbix-server
    

web 界面设置

  • 使用常用浏览器访问: http://192.168.1.100:10080/zabbix/
  • 根据界面提示提供数据库等信息
  • zabbix 安装完成,进入系统登陆界面,默认 admin/zabbix

安装 zabbix agent

  • 可以直接 yum 安装,这里推荐先下载 rpm 包,方便复制到其他服务器中运行
    1
    
    yum install zabbix-agent --downloadonly --downloaddir=.
    
  • 安装
    1
    
    rpm -Uvh zabbix-agent-4.4.*.rpm
    
  • 修改 /etc/zabbix/zabbix_agentd.conf 中如下配置
    1
    2
    3
    4
    
    EnableRemoteCommands=1
    AllowRoot=1
    #UnsafeUserParameters=1
    #UserParameter=UP[*],/etc/zabbix/UP.sh $1 $2 $3 $4 $5 $6 $7 $8 $9
    
  • 开机自启
    1
    
    systemctl enable zabbix-agent
    
  • 启动 zabbix-agent
    1
    
    systemctl start zabbix-agent
    

在其它服务器上安装 zabbix agent

  • 从 192.168.1.100 复制 zabbix-agent-4.4.*.rpm 到 192.168.1.101 下
  • 登陆 192.168.1.101,安装 zabbix-agent
    1
    
    rpm -Uvh zabbix-agent-4.4.\*.rpm
    
  • 修改 /etc/zabbix/zabbix_agentd.conf 中如下配置
    1
    2
    3
    4
    5
    6
    7
    
    EnableRemoteCommands=1
    Server=192.168.1.100
    ServerActive=192.168.1.100:10051
    Hostname=app101 #自定义,别和其他 agent 重名即可
    AllowRoot=1
    #UnsafeUserParameters=1
    #UserParameter=UP[*],/etc/zabbix/UP.sh $1 $2 $3 $4 $5 $6 $7 $8 $9
    
  • 开机自启
    1
    
    systemctl enable zabbix-agent
    
  • 启动 zabbix-agent
    1
    
    systemctl start zabbix-agent
    

Docker 启动 zabbix server

  • 下载镜像
    1
    
    docker pull ccr.ccs.tencentyun.com/colben/zabbix
    
  • 启动容器
    1
    2
    3
    4
    5
    
    docker run -d \
        --name zabbix-server \
        -p 80:80 \
        -p 10051:10051 \
        ccr.ccs.tencentyun.com/colben/zabbix
    
  • 浏览器访问 http://{ip}/zabbix/ ,打开 zabbix 页面向导,一直 “下一步” 即可
  • 配置文件
    • /etc/my.cnf
    • /etc/my.cnf.d/*.cnf
    • /etc/nginx/nginx.conf
    • /etc/nginx/conf.d
    • /etc/zabbix/zabbix_server.conf
  • 数据目录
    • /var/lib/mysql
    • /var/lib/mysql-bin
  • 日志目录
    • /var/log/mysql
    • /var/log/nginx
    • /var/log/php7
    • /var/log/zabbix

软 RAID

mdadm 命令

  • 创建软 raid
    1
    
    mdadm -C -v /dev/创建的设备名 -l级别 -n数量 添加的磁盘 [-x数量 添加的热备份盘]
    
    • -C: 创建一个新的阵列–create
    • -v: 显示细节–verbose
    • -l: 设定RAID级别–level=
    • -n: 指定阵列中可用device数目–raid-devices=
    • -x: 指定初始阵列的富余device数目–spare-devices=,空闲盘(热备磁盘)能在工作盘损坏后自动顶替
  • 查看详细信息
    1
    
    mdadm -D /dev/设备名
    
  • 查看 RAID 状态
    1
    
    cat /proc/mdstat
    
  • 模拟损坏
    1
    
    mdadm -f /dev/设备名 磁盘
    
  • 移除损坏的磁盘
    1
    
    mdadm -r /dev/设备名 磁盘
    
  • 添加新硬盘作为热备份盘
    1
    
    mdadm -a /dev/设备名 磁盘
    

RAID0

  • RAID0俗称条带,它将两个或多个硬盘组成一个逻辑硬盘,容量是所有硬盘之和,因为是多个硬盘组合成一个,故可并行写操作,写入速度提高,但此方式硬盘数据没有冗余,没有容错,一旦一个物理硬盘损坏,则所有数据均丢失。因而,RAID0适合于对数据量大,但安全性要求不高的场景,比如音像、视频文件的存储等
  • 实验: RAID0创建,格式化,挂载使用
  • 添加2块20G的硬盘,分区,类型ID为fd
    1
    2
    3
    
    [root@localhost ~]# fdisk -l | grep raid
    /dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect
    
  • 创建RAID0
    1
    2
    3
    4
    5
    
    [root@localhost ~]# mdadm -C -v /dev/md0 -l0 -n2 /dev/sd{b,c}1
    mdadm: chunk size defaults to 512K
    mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    
  • 查看raidstat状态
    1
    2
    3
    4
    5
    6
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid0]
    md0 : active raid0 sdc1[1] sdb1[0]
          41906176 blocks super 1.2 512k chunks
    
    unused devices: <none>
    
  • 查看RAID0的详细信息
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    [root@localhost ~]# mdadm -D /dev/md0
    /dev/md0:
               Version : 1.2
         Creation Time : Sun Aug 25 15:28:13 2019
            Raid Level : raid0
            Array Size : 41906176 (39.96 GiB 42.91 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:28:13 2019
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
            Chunk Size : 512K
    
    Consistency Policy : none
    
                  Name : localhost:0  (local to host localhost)
                  UUID : 7ff54c57:b99a59da:6b56c6d5:a4576ccf
                Events : 0
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
    
  • 格式化
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    [root@localhost ~]# mkfs.xfs /dev/md0
    meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=10475520, imaxpct=25
             =                       sunit=128    swidth=256 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=5120, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 挂载使用
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# mkdir /mnt/md0
    [root@localhost ~]# mount /dev/md0 /mnt/md0/
    [root@localhost ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/CentOS-root xfs        17G 1013M   16G   6% /
    devtmpfs                devtmpfs  901M     0  901M   0% /dev
    tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
    tmpfs                   tmpfs     912M  8.7M  904M   1% /run
    tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               xfs      1014M  143M  872M  15% /boot
    tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
    /dev/md0                xfs        40G   33M   40G   1% /mnt/md0
    

RAID1

  • RAID1俗称镜像,它最少由两个硬盘组成,且两个硬盘上存储的数据均相同,以实现数据冗余。RAID1读操作速度有所提高,写操作理论上与单硬盘速度一样,但由于数据需要同时写入所有硬盘,实际上稍为下降。容错性是所有组合方式里最好的,只要有一块硬盘正常,则能保持正常工作。但它对硬盘容量的利用率则是最低,只有50%,因而成本也是最高。RAID1适合对数据安全性要求非常高的场景,比如存储数据库数据文件之类
  • 实验: RAID1创建,格式化,挂载使用,故障模拟,重新添加热备份
  • 添加3块20G的硬盘,分区,类型ID为fd。
    1
    2
    3
    4
    
    [root@localhost ~]# fdisk -l | grep raid
    /dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdd1            2048    41943039    20970496   fd  Linux raid autodetect
    
  • 创建RAID1,并添加1个热备份盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [root@localhost ~]# mdadm -C -v /dev/md1 -l1 -n2 /dev/sd{b,c}1 -x1 /dev/sdd1
    mdadm: Note: this array has metadata at the start and
        may not be suitable as a boot device.  If you plan to
        store '/boot' on this device please ensure that
        your boot-loader understands md/v1.x metadata, or use
        --metadata=0.90
    mdadm: size set to 20953088K
    Continue creating array? y
    mdadm: Fail create md1 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md1 started.
    
  • 查看raidstat状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md1 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
          20953088 blocks super 1.2 [2/2] [UU]
          [========>............]  resync = 44.6% (9345792/20953088) finish=0.9min speed=203996K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md1 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
          20953088 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
  • 查看RAID1的详细信息。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    [root@localhost ~]# mdadm -D /dev/md1
    /dev/md1:
               Version : 1.2
         Creation Time : Sun Aug 25 15:38:44 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 3
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:39:24 2019
                 State : clean, resyncing
        Active Devices : 2
       Working Devices : 3
        Failed Devices : 0
         Spare Devices : 1
    
    Consistency Policy : resync
    
         Resync Status : 40% complete
    
                  Name : localhost:1  (local to host localhost)
                  UUID : b921e8b3:a18e2fc9:11706ba4:ed633dfd
                Events : 6
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
    
           2       8       49        -      spare   /dev/sdd1
    
  • 格式化。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    [root@localhost ~]# mkfs.xfs /dev/md1
    meta-data=/dev/md1               isize=512    agcount=4, agsize=1309568 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=5238272, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 挂载使用。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# mkdir /mnt/md1
    [root@localhost ~]# mount /dev/md1 /mnt/md1/
    [root@localhost ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs        17G 1014M   16G   6% /
    devtmpfs                devtmpfs  901M     0  901M   0% /dev
    tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
    tmpfs                   tmpfs     912M  8.7M  904M   1% /run
    tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               xfs      1014M  143M  872M  15% /boot
    tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
    /dev/md1                xfs        20G   33M   20G   1% /mnt/md1
    
  • 创建测试文件。
    1
    2
    3
    
    [root@localhost ~]# touch /mnt/md1/test{1..9}.txt
    [root@localhost ~]# ls /mnt/md1/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 故障模拟。
    1
    2
    
    [root@localhost ~]# mdadm -f /dev/md1 /dev/sdb1
    mdadm: set /dev/sdb1 faulty in /dev/md1
    
  • 查看测试文件。
    1
    2
    
    [root@localhost ~]# ls /mnt/md1/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md1 : active raid1 sdd1[2] sdc1[1] sdb1[0](F)
          20953088 blocks super 1.2 [2/1] [_U]
          [=====>...............]  recovery = 26.7% (5600384/20953088) finish=1.2min speed=200013K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md1
    /dev/md1:
               Version : 1.2
         Creation Time : Sun Aug 25 15:38:44 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 3
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:47:57 2019
                 State : active, degraded, recovering
        Active Devices : 1
       Working Devices : 2
        Failed Devices : 1
         Spare Devices : 1
    
    Consistency Policy : resync
    
        Rebuild Status : 17% complete
    
                  Name : localhost:1  (local to host localhost)
                  UUID : b921e8b3:a18e2fc9:11706ba4:ed633dfd
                Events : 22
    
        Number   Major   Minor   RaidDevice State
           2       8       49        0      spare rebuilding   /dev/sdd1
           1       8       33        1      active sync   /dev/sdc1
    
           0       8       17        -      faulty   /dev/sdb1
    
  • 再次查看状态
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md1 : active raid1 sdd1[2] sdc1[1] sdb1[0](F)
          20953088 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md1
    /dev/md1:
               Version : 1.2
         Creation Time : Sun Aug 25 15:38:44 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 3
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:49:28 2019
                 State : active
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 1
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:1  (local to host localhost)
                  UUID : b921e8b3:a18e2fc9:11706ba4:ed633dfd
                Events : 37
    
        Number   Major   Minor   RaidDevice State
           2       8       49        0      active sync   /dev/sdd1
           1       8       33        1      active sync   /dev/sdc1
    
           0       8       17        -      faulty   /dev/sdb1
    
  • 移除损坏的磁盘
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    [root@localhost ~]# mdadm -r /dev/md1 /dev/sdb1
    mdadm: hot removed /dev/sdb1 from /dev/md1
    
    [root@localhost ~]# mdadm -D /dev/md1
    /dev/md1:
               Version : 1.2
         Creation Time : Sun Aug 25 15:38:44 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:52:57 2019
                 State : active
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:1  (local to host localhost)
                  UUID : b921e8b3:a18e2fc9:11706ba4:ed633dfd
                Events : 38
    
        Number   Major   Minor   RaidDevice State
           2       8       49        0      active sync   /dev/sdd1
           1       8       33        1      active sync   /dev/sdc1
    
  • 重新添加热备份盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    [root@localhost ~]# mdadm -a /dev/md1 /dev/sdb1
    mdadm: added /dev/sdb1
    
    [root@localhost ~]# mdadm -D /dev/md1
    /dev/md1:
               Version : 1.2
         Creation Time : Sun Aug 25 15:38:44 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 3
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 15:53:32 2019
                 State : active
        Active Devices : 2
       Working Devices : 3
        Failed Devices : 0
         Spare Devices : 1
    
    Consistency Policy : resync
    
                  Name : localhost:1  (local to host localhost)
                  UUID : b921e8b3:a18e2fc9:11706ba4:ed633dfd
                Events : 39
    
        Number   Major   Minor   RaidDevice State
           2       8       49        0      active sync   /dev/sdd1
           1       8       33        1      active sync   /dev/sdc1
    
           3       8       17        -      spare   /dev/sdb1
    

RAID5

  • RAID5最少由三个硬盘组成,它将数据分散存储于阵列中的每个硬盘,并且还伴有一个数据校验位,数据位与校验位通过算法能相互验证,当丢失其中的一位时,RAID控制器能通过算法,利用其它两位数据将丢失的数据进行计算还原。因而RAID5最多能允许一个硬盘损坏,有容错性。RAID5相对于其它的组合方式,在容错与成本方面有一个平衡,因而受到大多数使用者的欢迎。一般的磁盘阵列,最常使用的就是RAID5这种方式
  • 实验: RAID5创建,格式化,挂载使用,故障模拟,重新添加热备份
  • 添加4块20G的硬盘,分区,类型ID为fd。
    1
    2
    3
    4
    5
    
    [root@localhost ~]# fdisk -l | grep raid
    /dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdd1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sde1            2048    41943039    20970496   fd  Linux raid autodetect
    
  • 创建RAID5,并添加1个热备份盘。
    1
    2
    3
    4
    5
    6
    7
    8
    
    [root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1
    mdadm: layout defaults to left-symmetric
    mdadm: layout defaults to left-symmetric
    mdadm: chunk size defaults to 512K
    mdadm: size set to 20953088K
    mdadm: Fail create md5 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md5 started.
    
  • 查看raidstat状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md5 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
          41906176 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
          [====>................]  recovery = 24.1% (5057340/20953088) finish=1.3min speed=202293K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md5 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
          41906176 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
    
    unused devices: <none>
    
  • 查看RAID5的详细信息。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    [root@localhost ~]# mdadm -D /dev/md5
    /dev/md5:
               Version : 1.2
         Creation Time : Sun Aug 25 16:13:44 2019
            Raid Level : raid5
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 3
         Total Devices : 4
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:15:29 2019
                 State : clean
        Active Devices : 3
       Working Devices : 4
        Failed Devices : 0
         Spare Devices : 1
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:5  (local to host localhost)
                  UUID : a055094e:9adaff79:2edae9b9:0dcc3f1b
                Events : 18
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
           4       8       49        2      active sync   /dev/sdd1
    
           3       8       65        -      spare   /dev/sde1
    
  • 格式化。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    [root@localhost ~]# mkfs.xfs /dev/md5
    meta-data=/dev/md5               isize=512    agcount=16, agsize=654720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=10475520, imaxpct=25
             =                       sunit=128    swidth=256 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=5120, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 挂载使用。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# mkdir /mnt/md5
    [root@localhost ~]# mount /dev/md5 /mnt/md5/
    [root@localhost ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs        17G 1014M   16G   6% /
    devtmpfs                devtmpfs  901M     0  901M   0% /dev
    tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
    tmpfs                   tmpfs     912M  8.7M  904M   1% /run
    tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               xfs      1014M  143M  872M  15% /boot
    tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
    /dev/md5                xfs        40G   33M   40G   1% /mnt/md5
    
  • 创建测试文件。
    1
    2
    3
    
    [root@localhost ~]# touch /mnt/md5/test{1..9}.txt
    [root@localhost ~]# ls /mnt/md5/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 故障模拟。
    1
    2
    
    [root@localhost ~]# mdadm -f /dev/md5 /dev/sdb1
    mdadm: set /dev/sdb1 faulty in /dev/md5
    
  • 查看测试文件。
    1
    2
    
    [root@localhost ~]# ls /mnt/md5/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md5 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F)
          41906176 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
          [====>................]  recovery = 21.0% (4411136/20953088) finish=1.3min speed=210054K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md5
    /dev/md5:
               Version : 1.2
         Creation Time : Sun Aug 25 16:13:44 2019
            Raid Level : raid5
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 3
         Total Devices : 4
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:21:31 2019
                 State : clean, degraded, recovering
        Active Devices : 2
       Working Devices : 3
        Failed Devices : 1
         Spare Devices : 1
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
        Rebuild Status : 12% complete
    
                  Name : localhost:5  (local to host localhost)
                  UUID : a055094e:9adaff79:2edae9b9:0dcc3f1b
                Events : 23
    
        Number   Major   Minor   RaidDevice State
           3       8       65        0      spare rebuilding   /dev/sde1
           1       8       33        1      active sync   /dev/sdc1
           4       8       49        2      active sync   /dev/sdd1
    
           0       8       17        -      faulty   /dev/sdb1
    
  • 再次查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md5 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F)
          41906176 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md5
    /dev/md5:
               Version : 1.2
         Creation Time : Sun Aug 25 16:13:44 2019
            Raid Level : raid5
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 3
         Total Devices : 4
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:23:09 2019
                 State : clean
        Active Devices : 3
       Working Devices : 3
        Failed Devices : 1
         Spare Devices : 0
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:5  (local to host localhost)
                  UUID : a055094e:9adaff79:2edae9b9:0dcc3f1b
                Events : 39
    
        Number   Major   Minor   RaidDevice State
           3       8       65        0      active sync   /dev/sde1
           1       8       33        1      active sync   /dev/sdc1
           4       8       49        2      active sync   /dev/sdd1
    
           0       8       17        -      faulty   /dev/sdb1
    
  • 移除损坏的磁盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    [root@localhost ~]# mdadm -r /dev/md5 /dev/sdb1
    mdadm: hot removed /dev/sdb1 from /dev/md5
    
    [root@localhost ~]# mdadm -D /dev/md5
    /dev/md5:
               Version : 1.2
         Creation Time : Sun Aug 25 16:13:44 2019
            Raid Level : raid5
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 3
         Total Devices : 3
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:25:01 2019
                 State : clean
        Active Devices : 3
       Working Devices : 3
        Failed Devices : 0
         Spare Devices : 0
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:5  (local to host localhost)
                  UUID : a055094e:9adaff79:2edae9b9:0dcc3f1b
                Events : 40
    
        Number   Major   Minor   RaidDevice State
           3       8       65        0      active sync   /dev/sde1
           1       8       33        1      active sync   /dev/sdc1
           4       8       49        2      active sync   /dev/sdd1
    
  • 重新添加热备份盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    [root@localhost ~]# mdadm -a /dev/md5 /dev/sdb1
    mdadm: added /dev/sdb1
    
    [root@localhost ~]# mdadm -D /dev/md5
    /dev/md5:
               Version : 1.2
         Creation Time : Sun Aug 25 16:13:44 2019
            Raid Level : raid5
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 3
         Total Devices : 4
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:25:22 2019
                 State : clean
        Active Devices : 3
       Working Devices : 4
        Failed Devices : 0
         Spare Devices : 1
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:5  (local to host localhost)
                  UUID : a055094e:9adaff79:2edae9b9:0dcc3f1b
                Events : 41
    
        Number   Major   Minor   RaidDevice State
           3       8       65        0      active sync   /dev/sde1
           1       8       33        1      active sync   /dev/sdc1
           4       8       49        2      active sync   /dev/sdd1
    
           5       8       17        -      spare   /dev/sdb1
    

RAID6

  • RAID6是在RAID5的基础上改良而成的,RAID6再将数据校验位增加一位,所以允许损坏的硬盘数量也由 RAID5的一个增加到二个。由于同一阵列中两个硬盘同时损坏的概率非常少,所以,RAID6用增加一块硬盘的代价,换来了比RAID5更高的数据安全性
  • 实验: RAID6创建,格式化,挂载使用,故障模拟,重新添加热备份
  • 添加6块20G的硬盘,分区,类型ID为fd。
    1
    2
    3
    4
    5
    6
    7
    
    [root@localhost ~]# fdisk -l | grep raid
    /dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdd1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sde1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdf1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdg1            2048    41943039    20970496   fd  Linux raid autodetect
    
  • 创建RAID6,并添加2个热备份盘。
    1
    2
    3
    4
    5
    6
    7
    8
    
    [root@localhost ~]# mdadm -C -v /dev/md6 -l6 -n4 /dev/sd[b-e]1 -x2 /dev/sd[f-g]1
    mdadm: layout defaults to left-symmetric
    mdadm: layout defaults to left-symmetric
    mdadm: chunk size defaults to 512K
    mdadm: size set to 20953088K
    mdadm: Fail create md6 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md6 started.
    
  • 查看raidstat状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md6 : active raid6 sdg1[5](S) sdf1[4](S) sde1[3] sdd1[2] sdc1[1] sdb1[0]
          41906176 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
          [===>.................]  resync = 18.9% (3962940/20953088) finish=1.3min speed=208575K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md6 : active raid6 sdg1[5](S) sdf1[4](S) sde1[3] sdd1[2] sdc1[1] sdb1[0]
          41906176 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
    
    unused devices: <none>
    
  • 查看RAID6的详细信息。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    [root@localhost ~]# mdadm -D /dev/md6
    /dev/md6:
               Version : 1.2
         Creation Time : Sun Aug 25 16:34:36 2019
            Raid Level : raid6
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 6
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:34:43 2019
                 State : clean, resyncing
        Active Devices : 4
       Working Devices : 6
        Failed Devices : 0
         Spare Devices : 2
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
         Resync Status : 10% complete
    
                  Name : localhost:6  (local to host localhost)
                  UUID : 7c3d15a2:4066f2c6:742f3e4c:82aae1bb
                Events : 1
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
           2       8       49        2      active sync   /dev/sdd1
           3       8       65        3      active sync   /dev/sde1
    
           4       8       81        -      spare   /dev/sdf1
           5       8       97        -      spare   /dev/sdg1
    
  • 格式化。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    [root@localhost ~]# mkfs.xfs /dev/md6
    meta-data=/dev/md6               isize=512    agcount=16, agsize=654720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=10475520, imaxpct=25
             =                       sunit=128    swidth=256 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=5120, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 挂载使用。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# mkdir /mnt/md6
    [root@localhost ~]# mount /dev/md6 /mnt/md6/
    [root@localhost ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs        17G 1014M   16G   6% /
    devtmpfs                devtmpfs  901M     0  901M   0% /dev
    tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
    tmpfs                   tmpfs     912M  8.7M  903M   1% /run
    tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               xfs      1014M  143M  872M  15% /boot
    tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
    /dev/md6                xfs        40G   33M   40G   1% /mnt/md6
    
  • 创建测试文件。
    1
    2
    3
    
    [root@localhost ~]# touch /mnt/md6/test{1..9}.txt
    [root@localhost ~]# ls /mnt/md6/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 故障模拟。
    1
    2
    3
    4
    
    [root@localhost ~]# mdadm -f /dev/md6 /dev/sdb1
    mdadm: set /dev/sdb1 faulty in /dev/md6
    [root@localhost ~]# mdadm -f /dev/md6 /dev/sdc1
    mdadm: set /dev/sdc1 faulty in /dev/md6
    
  • 查看测试文件。
    1
    2
    
    [root@localhost ~]# ls /mnt/md6/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md6 : active raid6 sdg1[5] sdf1[4] sde1[3] sdd1[2] sdc1[1](F) sdb1[0](F)
          41906176 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/2] [__UU]
          [====>................]  recovery = 23.8% (4993596/20953088) finish=1.2min speed=208066K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md6
    /dev/md6:
               Version : 1.2
         Creation Time : Sun Aug 25 16:34:36 2019
            Raid Level : raid6
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 6
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:41:09 2019
                 State : clean, degraded, recovering
        Active Devices : 2
       Working Devices : 4
        Failed Devices : 2
         Spare Devices : 2
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
        Rebuild Status : 13% complete
    
                  Name : localhost:6  (local to host localhost)
                  UUID : 7c3d15a2:4066f2c6:742f3e4c:82aae1bb
                Events : 27
    
        Number   Major   Minor   RaidDevice State
           5       8       97        0      spare rebuilding   /dev/sdg1
           4       8       81        1      spare rebuilding   /dev/sdf1
           2       8       49        2      active sync   /dev/sdd1
           3       8       65        3      active sync   /dev/sde1
    
           0       8       17        -      faulty   /dev/sdb1
           1       8       33        -      faulty   /dev/sdc1
    
  • 再次查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md6 : active raid6 sdg1[5] sdf1[4] sde1[3] sdd1[2] sdc1[1](F) sdb1[0](F)
          41906176 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md6
    /dev/md6:
               Version : 1.2
         Creation Time : Sun Aug 25 16:34:36 2019
            Raid Level : raid6
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 6
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:42:42 2019
                 State : clean
        Active Devices : 4
       Working Devices : 4
        Failed Devices : 2
         Spare Devices : 0
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:6  (local to host localhost)
                  UUID : 7c3d15a2:4066f2c6:742f3e4c:82aae1bb
                Events : 46
    
        Number   Major   Minor   RaidDevice State
           5       8       97        0      active sync   /dev/sdg1
           4       8       81        1      active sync   /dev/sdf1
           2       8       49        2      active sync   /dev/sdd1
           3       8       65        3      active sync   /dev/sde1
    
           0       8       17        -      faulty   /dev/sdb1
           1       8       33        -      faulty   /dev/sdc1
    
  • 移除损坏的磁盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    [root@localhost ~]# mdadm -r /dev/md6 /dev/sd{b,c}1
    mdadm: hot removed /dev/sdb1 from /dev/md6
    mdadm: hot removed /dev/sdc1 from /dev/md6
    
    [root@localhost ~]# mdadm -D /dev/md6
    /dev/md6:
               Version : 1.2
         Creation Time : Sun Aug 25 16:34:36 2019
            Raid Level : raid6
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 4
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:43:43 2019
                 State : clean
        Active Devices : 4
       Working Devices : 4
        Failed Devices : 0
         Spare Devices : 0
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:6  (local to host localhost)
                  UUID : 7c3d15a2:4066f2c6:742f3e4c:82aae1bb
                Events : 47
    
        Number   Major   Minor   RaidDevice State
           5       8       97        0      active sync   /dev/sdg1
           4       8       81        1      active sync   /dev/sdf1
           2       8       49        2      active sync   /dev/sdd1
           3       8       65        3      active sync   /dev/sde1
    
  • 重新添加热备份盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    [root@localhost ~]# mdadm -a /dev/md6 /dev/sd{b,c}1
    mdadm: added /dev/sdb1
    mdadm: added /dev/sdc1
    
    [root@localhost ~]# mdadm -D /dev/md6
    /dev/md6:
               Version : 1.2
         Creation Time : Sun Aug 25 16:34:36 2019
            Raid Level : raid6
            Array Size : 41906176 (39.96 GiB 42.91 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 4
         Total Devices : 6
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:44:01 2019
                 State : clean
        Active Devices : 4
       Working Devices : 6
        Failed Devices : 0
         Spare Devices : 2
    
                Layout : left-symmetric
            Chunk Size : 512K
    
    Consistency Policy : resync
    
                  Name : localhost:6  (local to host localhost)
                  UUID : 7c3d15a2:4066f2c6:742f3e4c:82aae1bb
                Events : 49
    
        Number   Major   Minor   RaidDevice State
           5       8       97        0      active sync   /dev/sdg1
           4       8       81        1      active sync   /dev/sdf1
           2       8       49        2      active sync   /dev/sdd1
           3       8       65        3      active sync   /dev/sde1
    
           6       8       17        -      spare   /dev/sdb1
           7       8       33        -      spare   /dev/sdc1
    

RAID10

  • RAID10是先将数据进行镜像操作,然后再对数据进行分组,RAID1在这里就是一个冗余的备份阵列,而RAID0则负责数据的读写阵列。至少要四块盘,两两组合做RAID1,然后做RAID0,RAID10对存储容量的利用率和RAID1一样低,只有50%。Raid10方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一RAID1中,就能保证数据安全性,RAID10能提供比RAID5更好的性能。这种新结构的可扩充性不好,使用此方案比较昂贵
  • 实验: RAID10创建,格式化,挂载使用,故障模拟,重新添加热备份
  • 添加4块20G的硬盘,分区,类型ID为fd。
    1
    2
    3
    4
    5
    
    [root@localhost ~]# fdisk -l | grep raid
    /dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sdd1            2048    41943039    20970496   fd  Linux raid autodetect
    /dev/sde1            2048    41943039    20970496   fd  Linux raid autodetect
    
  • 创建两个RAID1,不添加热备份盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    [root@localhost ~]# mdadm -C -v /dev/md101 -l1 -n2 /dev/sd{b,c}1
    mdadm: Note: this array has metadata at the start and
        may not be suitable as a boot device.  If you plan to
        store '/boot' on this device please ensure that
        your boot-loader understands md/v1.x metadata, or use
        --metadata=0.90
    mdadm: size set to 20953088K
    Continue creating array? y
    mdadm: Fail create md101 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md101 started.
    
    [root@localhost ~]# mdadm -C -v /dev/md102 -l1 -n2 /dev/sd{d,e}1
    mdadm: Note: this array has metadata at the start and
        may not be suitable as a boot device.  If you plan to
        store '/boot' on this device please ensure that
        your boot-loader understands md/v1.x metadata, or use
        --metadata=0.90
    mdadm: size set to 20953088K
    Continue creating array? y
    mdadm: Fail create md102 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md102 started.
    
  • 查看raidstat状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md102 : active raid1 sde1[1] sdd1[0]
          20953088 blocks super 1.2 [2/2] [UU]
          [=========>...........]  resync = 48.4% (10148224/20953088) finish=0.8min speed=200056K/sec
    
    md101 : active raid1 sdc1[1] sdb1[0]
          20953088 blocks super 1.2 [2/2] [UU]
          [=============>.......]  resync = 69.6% (14604672/20953088) finish=0.5min speed=200052K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1]
    md102 : active raid1 sde1[1] sdd1[0]
          20953088 blocks super 1.2 [2/2] [UU]
    
    md101 : active raid1 sdc1[1] sdb1[0]
          20953088 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
  • 查看两个RAID1的详细信息。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    
    [root@localhost ~]# mdadm -D /dev/md101
    /dev/md101:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:00 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:53:58 2019
                 State : clean, resyncing
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
         Resync Status : 62% complete
    
                  Name : localhost:101  (local to host localhost)
                  UUID : 80bb4fc5:1a628936:275ba828:17f23330
                Events : 9
    
        Number   Major   Minor   RaidDevice State
           0       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
    
    [root@localhost ~]# mdadm -D /dev/md102
    /dev/md102:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:23 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:54:02 2019
                 State : clean, resyncing
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
         Resync Status : 42% complete
    
                  Name : localhost:102  (local to host localhost)
                  UUID : 38abac72:74fa8a53:3a21b5e4:01ae64cd
                Events : 6
    
        Number   Major   Minor   RaidDevice State
           0       8       49        0      active sync   /dev/sdd1
           1       8       65        1      active sync   /dev/sde1
    
  • 创建RAID10。
    1
    2
    3
    4
    5
    
    [root@localhost ~]# mdadm -C -v /dev/md10 -l0 -n2 /dev/md10{1,2}
    mdadm: chunk size defaults to 512K
    mdadm: Fail create md10 when using /sys/module/md_mod/parameters/new_array
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md10 started.
    
  • 查看raidstat状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1] [raid0]
    md10 : active raid0 md102[1] md101[0]
          41871360 blocks super 1.2 512k chunks
    
    md102 : active raid1 sde1[1] sdd1[0]
          20953088 blocks super 1.2 [2/2] [UU]
    
    md101 : active raid1 sdc1[1] sdb1[0]
          20953088 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
  • 查看RAID10的详细信息。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    [root@localhost ~]# mdadm -D /dev/md10
    /dev/md10:
               Version : 1.2
         Creation Time : Sun Aug 25 16:56:08 2019
            Raid Level : raid0
            Array Size : 41871360 (39.93 GiB 42.88 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:56:08 2019
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
            Chunk Size : 512K
    
    Consistency Policy : none
    
                  Name : localhost:10  (local to host localhost)
                  UUID : 23c6abac:b131a049:db25cac8:686fb045
                Events : 0
    
        Number   Major   Minor   RaidDevice State
           0       9      101        0      active sync   /dev/md101
           1       9      102        1      active sync   /dev/md102
    
  • 格式化。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    [root@localhost ~]# mkfs.xfs /dev/md10
    meta-data=/dev/md10              isize=512    agcount=16, agsize=654208 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=10467328, imaxpct=25
             =                       sunit=128    swidth=256 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=5112, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
  • 挂载使用。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    [root@localhost ~]# mkdir /mnt/md10
    [root@localhost ~]# mount /dev/md10 /mnt/md10/
    [root@localhost ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs        17G 1014M   16G   6% /
    devtmpfs                devtmpfs  901M     0  901M   0% /dev
    tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
    tmpfs                   tmpfs     912M  8.7M  903M   1% /run
    tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               xfs      1014M  143M  872M  15% /boot
    tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
    /dev/md10               xfs        40G   33M   40G   1% /mnt/md10
    
  • 创建测试文件。
    1
    2
    3
    
    [root@localhost ~]# touch /mnt/md10/test{1..9}.txt
    [root@localhost ~]# ls /mnt/md10/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 故障模拟。
    1
    2
    3
    4
    
    [root@localhost ~]# mdadm -f /dev/md101 /dev/sdb1
    mdadm: set /dev/sdb1 faulty in /dev/md101
    [root@localhost ~]# mdadm -f /dev/md102 /dev/sdd1
    mdadm: set /dev/sdd1 faulty in /dev/md102
    
  • 查看测试文件。
    1
    2
    
    [root@localhost ~]# ls /mnt/md10/
    test1.txt  test2.txt  test3.txt  test4.txt  test5.txt  test6.txt  test7.txt  test8.txt  test9.txt
    
  • 查看状态。
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1] [raid0]
    md10 : active raid0 md102[1] md101[0]
          41871360 blocks super 1.2 512k chunks
    
    md102 : active raid1 sde1[1] sdd1[0](F)
          20953088 blocks super 1.2 [2/1] [_U]
    
    md101 : active raid1 sdc1[1] sdb1[0](F)
          20953088 blocks super 1.2 [2/1] [_U]
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md101
    /dev/md101:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:00 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:01:11 2019
                 State : clean, degraded
        Active Devices : 1
       Working Devices : 1
        Failed Devices : 1
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:101  (local to host localhost)
                  UUID : 80bb4fc5:1a628936:275ba828:17f23330
                Events : 23
    
        Number   Major   Minor   RaidDevice State
           -       0        0        0      removed
           1       8       33        1      active sync   /dev/sdc1
    
           0       8       17        -      faulty   /dev/sdb1
    
    [root@localhost ~]# mdadm -D /dev/md102
    /dev/md102:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:23 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:00:43 2019
                 State : clean, degraded
        Active Devices : 1
       Working Devices : 1
        Failed Devices : 1
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:102  (local to host localhost)
                  UUID : 38abac72:74fa8a53:3a21b5e4:01ae64cd
                Events : 19
    
        Number   Major   Minor   RaidDevice State
           -       0        0        0      removed
           1       8       65        1      active sync   /dev/sde1
    
           0       8       49        -      faulty   /dev/sdd1
    
    [root@localhost ~]# mdadm -D /dev/md10
    /dev/md10:
               Version : 1.2
         Creation Time : Sun Aug 25 16:56:08 2019
            Raid Level : raid0
            Array Size : 41871360 (39.93 GiB 42.88 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 16:56:08 2019
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
            Chunk Size : 512K
    
    Consistency Policy : none
    
                  Name : localhost:10  (local to host localhost)
                  UUID : 23c6abac:b131a049:db25cac8:686fb045
                Events : 0
    
        Number   Major   Minor   RaidDevice State
           0       9      101        0      active sync   /dev/md101
           1       9      102        1      active sync   /dev/md102
    
  • 移除损坏的磁盘。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    
    [root@localhost ~]# mdadm -r /dev/md101 /dev/sdb1
    mdadm: hot removed /dev/sdb1 from /dev/md101
    [root@localhost ~]# mdadm -r /dev/md102 /dev/sdd1
    mdadm: hot removed /dev/sdd1 from /dev/md102
    
    [root@localhost ~]# mdadm -D /dev/md101
    /dev/md101:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:00 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 1
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:04:59 2019
                 State : clean, degraded
        Active Devices : 1
       Working Devices : 1
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:101  (local to host localhost)
                  UUID : 80bb4fc5:1a628936:275ba828:17f23330
                Events : 26
    
        Number   Major   Minor   RaidDevice State
           -       0        0        0      removed
           1       8       33        1      active sync   /dev/sdc1
    
    [root@localhost ~]# mdadm -D /dev/md102
    /dev/md102:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:23 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 1
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:05:07 2019
                 State : clean, degraded
        Active Devices : 1
       Working Devices : 1
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:102  (local to host localhost)
                  UUID : 38abac72:74fa8a53:3a21b5e4:01ae64cd
                Events : 20
    
        Number   Major   Minor   RaidDevice State
           -       0        0        0      removed
           1       8       65        1      active sync   /dev/sde1
    
  • 重新添加热备份盘。
    1
    2
    3
    4
    
    [root@localhost ~]# mdadm -a /dev/md101 /dev/sdb1
    mdadm: added /dev/sdb1
    [root@localhost ~]# mdadm -a /dev/md102 /dev/sdd1
    mdadm: added /dev/sdd1
    
  • 再次查看状态。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1] [raid0]
    md10 : active raid0 md102[1] md101[0]
          41871360 blocks super 1.2 512k chunks
    
    md102 : active raid1 sdd1[2] sde1[1]
          20953088 blocks super 1.2 [2/1] [_U]
          [====>................]  recovery = 23.8% (5000704/20953088) finish=1.2min speed=208362K/sec
    
    md101 : active raid1 sdb1[2] sdc1[1]
          20953088 blocks super 1.2 [2/1] [_U]
          [======>..............]  recovery = 32.0% (6712448/20953088) finish=1.1min speed=203407K/sec
    
    unused devices: <none>
    
    [root@localhost ~]# cat /proc/mdstat
    Personalities : [raid1] [raid0]
    md10 : active raid0 md102[1] md101[0]
          41871360 blocks super 1.2 512k chunks
    
    md102 : active raid1 sdd1[2] sde1[1]
          20953088 blocks super 1.2 [2/2] [UU]
    
    md101 : active raid1 sdb1[2] sdc1[1]
          20953088 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
    [root@localhost ~]# mdadm -D /dev/md101
    /dev/md101:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:00 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:07:28 2019
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:101  (local to host localhost)
                  UUID : 80bb4fc5:1a628936:275ba828:17f23330
                Events : 45
    
        Number   Major   Minor   RaidDevice State
           2       8       17        0      active sync   /dev/sdb1
           1       8       33        1      active sync   /dev/sdc1
    
    [root@localhost ~]# mdadm -D /dev/md102
    /dev/md102:
               Version : 1.2
         Creation Time : Sun Aug 25 16:53:23 2019
            Raid Level : raid1
            Array Size : 20953088 (19.98 GiB 21.46 GB)
         Used Dev Size : 20953088 (19.98 GiB 21.46 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Sun Aug 25 17:07:36 2019
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : localhost:102  (local to host localhost)
                  UUID : 38abac72:74fa8a53:3a21b5e4:01ae64cd
                Events : 39
    
        Number   Major   Minor   RaidDevice State
           2       8       49        0      active sync   /dev/sdd1
           1       8       65        1      active sync   /dev/sde1
    

常用 RAID 比较

名称 硬盘数量 容量/利用率 读性能 写性能 数据冗余
RAID0 N N块总和 N倍 N倍 无,一个故障,丢失所有数据
RAID1 N(偶数) 50% 写两个设备,允许一个故障
RAID5 N≥3 (N-1)/N ↑↑ 计算校验,允许一个故障
RAID6 N≥4 (N-2)/N ↑↑ ↓↓ 双重校验,允许两个故障
RAID10 N(偶数,N≥4) 50% (N/2)倍 (N/2)倍 允许基组中的磁盘各损坏一个

参考

Linux 硬盘随机读写

前言

  • 随机写会导致磁头不停地换道,造成效率的极大降低
  • 顺序写磁头几乎不用换道,或者换道的时间很短

fio 介绍

  • fio的输出报告中的几个关键指标:
    • slat: 是指从 I/O 提交到实际执行 I/O 的时长(Submission latency)
    • clat: 是指从 I/O 提交到 I/O 完成的时长(Completion latency)
    • lat: 指的是从 fio 创建 I/O 到 I/O 完成的总时长
    • bw : 吞吐量
    • iops: 每秒 I/O 的次数

同步写测试

同步随机写

  • 使用strace工具查看系统调用
    1
    2
    
    strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \
    -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db
    
  • 提取关键信息
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    root@wilson-ubuntu:~# strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \
    > -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db
    randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
    fio-2.2.10
    Starting 1 process
    ...
    randwrite: (groupid=0, jobs=1): err= 0: pid=26882: Wed Aug 14 10:39:02 2019
      write: io=1024.0MB, bw=52526KB/s, iops=13131, runt= 19963msec
        clat (usec): min=42, max=18620, avg=56.15, stdev=164.79
         lat (usec): min=42, max=18620, avg=56.39, stdev=164.79
    ...
        bw (KB  /s): min=50648, max=55208, per=99.96%, avg=52506.03, stdev=1055.83
    ...
    
    Run status group 0 (all jobs):
      WRITE: io=1024.0MB, aggrb=52525KB/s, minb=52525KB/s, maxb=52525KB/s, mint=19963msec, maxt=19963msec
    
    Disk stats (read/write):
    ...
      sda: ios=0/262177, merge=0/25, ticks=0/7500, in_queue=7476, util=36.05%
    
  • 重点关注的信息
    • clat: 平均时长56ms左右
    • lat: 平均时长56ms左右
    • bw: 吞吐量,大概在52M左右
  • 内核调用信息,随机读每一次写入之前都要通过lseek去定位当前的文件偏移量
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    root@wilson-ubuntu:~# more /tmp/randwrite.log
    ...
    26882 10:38:41.919904 lseek(3, 665198592, SEEK_SET) = 665198592
    26882 10:38:41.919920 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.919969 lseek(3, 4313088, SEEK_SET) = 4313088
    26882 10:38:41.919985 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920032 lseek(3, 455880704, SEEK_SET) = 455880704
    26882 10:38:41.920048 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920096 lseek(3, 338862080, SEEK_SET) = 338862080
    26882 10:38:41.920112 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920161 lseek(3, 739086336, SEEK_SET) = 739086336
    26882 10:38:41.920177 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920229 lseek(3, 848175104, SEEK_SET) = 848175104
    26882 10:38:41.920245 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920296 lseek(3, 1060147200, SEEK_SET) = 1060147200
    26882 10:38:41.920312 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920362 lseek(3, 863690752, SEEK_SET) = 863690752
    26882 10:38:41.920377 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920428 lseek(3, 279457792, SEEK_SET) = 279457792
    26882 10:38:41.920444 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920492 lseek(3, 271794176, SEEK_SET) = 271794176
    26882 10:38:41.920508 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    26882 10:38:41.920558 lseek(3, 1067864064, SEEK_SET) = 1067864064
    26882 10:38:41.920573 write(3, "\220\240@\6\371\341\277>\0\2402\24\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096
    ...
    

同步顺序写

  • 测试顺序写
    1
    2
    
    strace -f -tt -o /tmp/write.log -D fio -name=write -rw=write \
    -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db
    
  • 可以看到,吞吐量提升至70M左右
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
    fio-2.2.10
    Starting 1 process
    Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/70432KB/0KB /s] [0/17.7K/0 iops] [eta 00m:00s]
    write: (groupid=0, jobs=1): err= 0: pid=27005: Wed Aug 14 10:53:02 2019
      write: io=1024.0MB, bw=70238KB/s, iops=17559, runt= 14929msec
        clat (usec): min=43, max=7464, avg=55.95, stdev=56.24
         lat (usec): min=43, max=7465, avg=56.15, stdev=56.25
    ...
        bw (KB  /s): min=67304, max=72008, per=99.98%, avg=70225.38, stdev=1266.88
    ...
    
    Run status group 0 (all jobs):
      WRITE: io=1024.0MB, aggrb=70237KB/s, minb=70237KB/s, maxb=70237KB/s, mint=14929msec, maxt=14929msec
    
    Disk stats (read/write):
    ...
      sda: ios=0/262162, merge=0/10, ticks=0/6948, in_queue=6932, util=46.49%
    
  • 内核调用
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    root@wilson-ubuntu:~# more /tmp/write.log
    ...
    27046 10:54:28.194508 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\360\t\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194568 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194627 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194687 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194747 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194807 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194868 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194928 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.194988 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195049 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195110 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195197 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195262 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195330 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195426 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195497 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195567 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195637 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195704 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195757 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195807 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195859 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195910 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.195961 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196012 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196062 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0\220\24\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196112 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196162 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196213 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196265 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196314 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196363 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196414 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196472 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196524 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    27046 10:54:28.196573 write(3, "\0\0\23\0\0\0\0\0\0\300\16\0\0\0\0\0\0 \26\0\0\0\0\0\0\320\17\0\0\0\0\0"..., 4096) = 4096
    ...
    
  • 顺序读不需要反复定位文件偏移量,所以能够专注于写操作

异步顺序写

  • 前面 fio 的测试报告中没有发现slat,那是由于上述都是同步操作,对同步 I/O 来说,由于 I/O 提交和 I/O 完成是一个动作,所以 slat 实际上就是 I/O 完成的时间
  • 异步顺序写测试命令
    1
    2
    
    # 同步顺序写的命令添加 -ioengine=libaio
    fio -name=write -rw=write -ioengine=libaio -direct=1 -bs=4k -size=1G -numjobs=1  -group_reporting -filename=/tmp/test.db
    
  • slat指标出现,lat 近似等于 slat + clat 之和(avg平均值);并且换成异步io之后,吞吐量得到了极大的提升,120M左右
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1
    fio-2.2.10
    Starting 1 process
    Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/119.3MB/0KB /s] [0/30.6K/0 iops] [eta 00m:00s]
    write: (groupid=0, jobs=1): err= 0: pid=27258: Wed Aug 14 11:14:36 2019
      write: io=1024.0MB, bw=120443KB/s, iops=30110, runt=  8706msec
        slat (usec): min=3, max=70, avg= 4.31, stdev= 1.56
        clat (usec): min=0, max=8967, avg=28.13, stdev=55.68
         lat (usec): min=22, max=8976, avg=32.53, stdev=55.72
    ...
        bw (KB  /s): min=118480, max=122880, per=100.00%, avg=120467.29, stdev=1525.68
    ...
    
    Run status group 0 (all jobs):
      WRITE: io=1024.0MB, aggrb=120442KB/s, minb=120442KB/s, maxb=120442KB/s, mint=8706msec, maxt=8706msec
    
    Disk stats (read/write):
    ...
      sda: ios=0/262147, merge=0/1, ticks=0/6576, in_queue=6568, util=74.32%
    

参考

Zabbix 企业微信告警

环境

  • CentOS7,docker-ce 20.0

  • 启动 zabbix5 容器

    1
    2
    3
    4
    
    docker run -d \
        --net host \
        --name zabbix \
        harbor.colben.cn/general/alpine-zabbix
    
  • 打开浏览器,访问 http://ip/zabbix/,打开 zabbix web 安装界面

Zabbix 邮件告警

环境

  • CentOS7
  • sendEmail 1.56

部署 sendEmail

  • 安装 sendEmail
    1
    2
    
    curl -O http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
    tar zxf sendEmail-v1.56.tar.gz && cp sendEmail-v1.56/sendEmail /usr/local/bin/
    
  • 查看 zabbix_server.conf 找到告警脚本存放目录,即 AlertScriptsPath,默该目录已存在
  • 在该目录下创建 sendemail.sh,内容如下:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #!/bin/bash
    
    recipients="${1//;/ }"
    subject="$2"
    message="$3"
    
    for recipient in $recipients; do
        /usr/local/bin/sendEmail \
            -f <发件人邮箱> \
            -t $recipient \
            -s <发件人邮箱的服务器> \
            -o tls=no \
            -o message-charset=utf8 \
            -xu <发件人邮箱> \
            -xp <发见人邮箱的密码> \
            -u "$subject" \
            -m "$message" \
            -l /var/log/sendEmail.log &
    done
    wait
    
  • 测试,如果正常收到邮件,则表示脚本正常
    1
    
    ./sendemail.sh person1@email.com;person2@email.com;person3@email.com test_subject test_content
    

配置 zabbix

  • 登陆 zabbix web,点击“报警媒介类型”-“创建媒体类型”,打开“报警媒介类型”窗口,配置如下
    • 名称: 脚本发邮件报警
    • 类型: 脚本
    • 脚本名称: sendemail.sh #注意这里的名称与上一步创建脚本名称一致
    • 脚本参数:
      • {ALERT.SENDTO}
      • {ALERT.SUBJECT}
      • {ALERT.MESSAGE}
    • 已启用: 启用
  • 点击“添加”完成脚本媒介配置
  • 点击“管理”-“用户”-“admin”-“报警媒介”-“添加”,打开“报警媒介”窗口,配置如下
    • 类型: 脚本发邮件报警
    • 收件人: 一个或多个收件人email,用空格或分号分隔
  • 点击“添加”完成该报警媒介配置
  • 点击“配置”-“动作”-“Report problems to Zabbix administrators”-“操作”,自定义报警信息

测试

  • 触发器被触发后,收件人邮箱收到告警邮件

rsync 命令

简介

  • rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
  • 支持:
    • 本地复制
    • 与其他SSH同步
    • 与rsync主机同步

rsyncd 源服务

  • 创建 rsync 配置文件 /etc/rsyncd.conf,内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    # 限制客户端登陆身份为 nobody:nobody
    uid = nobody
    gid = nobody
    # 禁锢在源目录下
    use chroot = yes
    # 指定监听端口,默认监听 tcp 873 端口
    port = 873
    # 指定监听地址,默认监听全部网卡
    address = 192.168.1.101
    # 允许访问的客户端地址
    hosts allow = 192.168.1.0/24
    max connections = 4
    # 日志位置
    log file = /var/log/rsyncd.log
    # PID 文件位置
    pid file = /var/run/rsyncd.pid
    exclude = lost+found/
    transfer logging = yes
    timeout = 900
    ignore nonreadable = yes
    # 同步时不压缩的文件类型
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    # 账户文件,每行格式 user:password,权限 600
    secrets file = /etc/rsyncd_users.db
    
    [data1]
    # 源目录实际路径,注意该目录需要对 nobody 用户可读
    path = /path/to/data1
    # 描述
    comment = sth about dir data1
    # 只读
    read only = yes
    # 授权账户
    auth users = backuper
    
  • 创建备份帐号信息
    1
    2
    
    echo 'backuper:123456' > /etc/rsyncd_users.db
    chmod 0600 /etc/rsyncd_users.db
    
  • 启动 rsyncd 服务
    1
    
    systemctl start rsyncd
    

rsync 命令选项

  • -r: 递归模式,包含目录及子目录中所有文件
  • -l: 对于符号链接文件仍然复制为符号链接文件
  • -p: 保留文件的权限标记
  • -t: 保留文件的时间标记
  • -g: 保留文件的属组标记(仅超级用户使用)
  • -o: 保留文件的属主标记(仅超级用户使用)
  • -D: 保留设备文件及其他特殊文件
  • -a: 归档模式,递归并保留对象属性,等同于 -rlptgoD
  • -v: 显示同步过程的详细(verbose)信息
  • -z: 在传输文件时进行压缩(compress)
  • -H: 保留硬连接文件
  • -A: 保留ACL属性信息
  • –delete: 删除目标位置有而原始位置没有的文件
  • –checksum: 根据对象的校验和来决定是否跳过文件
  • –password-file: 指定包含密码的文件

简单使用

  • 本地复制,类似 cp 命令
    1
    
    rsync -a /etc/passwd 123.txt
    
  • 与其他 ssh 同步
    1
    
    rsync -av root@192.168.1.100:/root/123.txt .
    
  • 与 rsync 主机同步
    1
    2
    3
    
    rsync -avz backuper@192.168.1.100::data1 /root
    # 或者
    rsync -avz rsync://backuper@192.168.1.100/data1 /root
    
  • 向同步源服务上传文件时,直接调换源参数和目的参数,注意客户端可写上传目录

参考

Tomcat 笔记

部署 jre8

  • 下载 oracle jre8,下载界面
  • 解压
    1
    2
    
    tar zxf jre-8u221-linux-x64.tar.gz -C /opt/
    cd /opt && mv jre-8u221-linux jre
    
  • 创建 /etc/profile.d/jre.sh,内容如下
    1
    2
    
    export JAVA_HOME=/opt/jre
    export PATH=$JAVA_HOME/bin:$PATH
    

部署 tomcat8

  • 下载 tomcat
    1
    
    curl -O http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.tar.gz
    
  • 解压
    1
    2
    
    tar zxf apache-tomcat-8.5.45.tar.gz -C /opt/
    cd /opt/ && mv apache-tomcat-8.5.45 tomcat
    
  • 创建文件 /opt/tomcat/bin/setenv.sh,内容如下
    1
    2
    3
    4
    5
    
    export JAVA_HOME=/opt/jre
    export JAVA_OPTS="$JAVA_OPTS -server -Xms8192M -Xmx8192M -Xmn3072M -Xss512K -Djava.security.egd=file:/dev/./urandom -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Ddruid.registerToSysProperty=true"
    # -Djava.library.path=/opt/tomcat/libs/tcnative # tcnative 库位置
    #export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=10087"
    export CATALINA_PID="/var/run/tomcat.pid"
    
  • 创建 /usr/lib/systemd/system/tomcat.service 文件,内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    [Unit]
    Description=The Apache Tomcat
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/var/run/tomcat.pid
    ExecStart=/opt/tomcat/bin/catalina.sh start
    ExecStop=/opt/tomcat/bin/catalina.sh stop
    SuccessExitStatus=143
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动 tomcat 服务
    1
    2
    
    systemctl daemon-reload
    systemctl start tomcat
    

验证码字体

1
yum install dejagnu dejavu-sans-mono-fonts dejavu

python pip

配置 pip 源

  • 创建 $HOME/.pip/pip.conf 文件,内容如下
    1
    2
    3
    4
    5
    6
    7
    8
    
    [global]
    index-url=https://pypi.tuna.tsinghua.edu.cn/simple
    
    [install]
    trusted-host=pypi.tuna.tsinghua.edu.cn
    
    [list]
    format=columns