RAID技术
RAID:磁盘阵列
优点:
提高磁盘IO能力,磁盘能够并行读写
提高耐用性,磁盘冗余来实现
实现方式:
级别:多块磁盘组成在一起工作的方式不同
外接式磁盘阵列:通过扩展卡提供适配功能
内接式磁盘阵列:集成到主板上的RAID控制器
Software RAID: 通过软件来实现RAID功能
级别:
RAID0
- 读写性能会提高
- 可用空间: N * MIN
- 没有冗余特性和容错特性
- 最少磁盘数量: 2
RAID1
- 读性能提升,写性能略有下降
- 可用空间: 1 * MIN
- 用容错能力
- 最少磁盘数量: 2
RAID4
- 读性能提升,写性能略有下降
- 可用空间:N * MIN
- 有冗余特性(有专门的备份盘)
- 最少磁盘数量: 2
RAID5
- 读写性能都会提高
- 可用空间: N-1 * MIN
- 有冗余特性(通过校验数据的方式:1个盘的空间)
- 最少磁盘数:4
RAID6
- 读写性能都会提高
- 可用空间: N-2 * MIN
- 有冗余特性(通过校验数据的方式:2个盘的空间)
- 最少磁盘数:4
RAID10 : 先做RAID1再做RAID0
- 读写性能都会提高
- 可用空间: N * min /2
- 有冗余特性
- 最少磁盘数: 4
RAID01 : 先做RAID0再做RAID1
- 读写性能会提高
- 可用空间:N * min /2
- 有冗余特性
- 最少磁盘数: 4
- 实现方式:
1. 软RAID:通过软件方式模拟实现
2. 硬RAID:从物理服务器层面:通过RAID适配器实现RAID
LVM技术
LVM 逻辑卷管理: 在物理设备上进行一层抽象,允许生成逻辑存储卷,相比于物理存储管理更加灵活
LVM将存储虚拟化,不受限于物理设备,屏蔽硬件相关存储参数,不需要卸载文件系统来去调整卷大小
或者数据迁移等
优点:灵活/可伸缩的存储池/在线的数据分配/管理命令简洁/卷快照等等
基本术语:
物理存储介质: 系统上的/dev/sda
物理卷: PV /dev/sda1 /dev/sdb1...
卷组: VG 由多个PV组成的存储资源池
逻辑卷: LV 从VG中拿存储资源直接使用
PE: 物理卷被划分成PE的基本单元(每个PE默认为4MB)
LE: 逻辑卷被划分成LE的基本单位(同一个卷组中 LE和PE相同的)
环境准备:
├─sdb1 8:17 0 5M 0 part
├─sdb2 8:18 0 5M 0 part
└─sdb3 8:19 0 5M 0 part
PV管理工具
pvcreate命令: 创建PV
使用方式: pvcreate <devices...>
[root@test ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
pvs命令: 显示pv的相关信息
pvdisplay命令:显示PV的详细信息
VG管理工具
vgcreate命令:创建VG
使用方式: vgcreate <vg_name> <pvs...>
[root@test ~]# vgcreate vg_test /dev/sdb1 /dev/sdb2
vgs命令:查看vg相关信息
vgdisplay命令:查看vg详细信息
vgextend命令:扩展vg大小
[root@test ~]# vgextend vg_test /dev/sdb3
vgreduce命令:缩减vg大小
vgremove命令:删除vg
LV管理工具:
lvcreate命令:创建lv
使用方式: lvcreate -L #[mMg...] -n [name] <vg_name>
lvs命令:显示lv相关信息
lvdisplay命令:显示lv详细信息
[root@test ~]# lvdisplay /dev/vg_test/lv_test1
lvsremove命令: 删除lv
使用方式:
1. lvremove <vg_name> <lv_name>
2. lvremove </path/to/lv>
path: [root@test ~]# cat /dev/vg_test/lv_test
[root@test ~]# lvremove vg_test lv_test1
扩展逻辑卷:
lvextend -L [+]#[MmGg] <lv_name|path/to/lv>
resize2fs <lv_name|/path/to/lv>
缩减逻辑卷:
umount /path/to/lv
lvreduce -L [+]#[MmGg] <lv_name|path/to/lv>
e2fsck -f /path/to/lv
resize2fs /path/to/lv
mount
快照功能:
lvcreate -s|--snapshot -L|--size Size[m|UNIT] LV
使用方式:
lvcreate -L Size[MmGg...] -s -n <Snapshot_name> <lv_name>
[ -p|--permission rw|r ] 设置快照权限
计划任务
Linux计划任务:
未来某个时间执行一次任务: at batch
周期性运行某个任务: crond
at命令
[root@test ~]# at --help
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
at [-V] [-q x] [-f file] [-mMlbv] -t time
at -c job ...
atq [-V] [-q x]
at [ -rd ] job ...
atrm [-V] job ...
batch
用法说明: at [options] [time|batch] [job]
options:
-f : 指定执行文件
times:
HH:MM [YY-mm-dd]
moon,midnight...
tomorrow
now+#[min,hours,seconds....]
batch命令:
让系统自动选择空间时间去执行指定任务
实例:
cat 1.sh
echo "hello"
at now +1 minutes -f 1.sh # 在1分钟后执行1.sh文件里的内容
atq命令: 可以去查看当前的任务队列
3 Thu Feb 13 03:16:00 2020 a root
Linux系统则是由crond服务来控制的;在Linux系统上面非常多的计划任务
都基本采用crond方式,因此crond服务默认是开机自启的;另外,由于用户可以
自定义计划任何,所以提供了crontab命令
Linux下的任务调度分为两类:
系统任务调度
用户任何调度
系统任务调度:系统周期性要执行的工作,比如定期写系统数据到磁盘中
[root@test ~]# systemctl status crond # 查看crond服务是正常运行的
[root@test ~]# cat /etc/crontab 就是系统任何调度的配置文件
SHELL=/bin/bash # 默认系统调度任务采用的shell程序
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 默认系统调度任务采用的命令路径
MAILTO=root # 默认本地邮件服务用户
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
分钟 小时 日 月 星期 执行用户(默认是root用户) 执行任务(命令|脚本)
举例: 执行用户root 执行任务: echo "hello"
时间表示法:
1. 特定值
给定时间有效取值范围的值
2. *
给定时间上有效取值范围的所有值,表示“每....”
实例1: root用户在每天晚上9.30执行指定任务
30 21 * * * root echo "hello"
3. 离散取值
#,#,# .....
实例2: root用户在每周一周五晚上8点执行执行任务
0 20 * * mon,fri root echo "hello"
4. 连续取值
实例3: zhangsan用户在每个月1-9晚上8点执行任务
0 20 1-9 * * zhangsan echo "准备还花呗"
5. 在执行时间范围上,定义步长
/# : 指定步长
实例4: zhangsan每5分钟执行指定任务
*/5 * * * * zhangsan echo "hi"
* */3 * * * zhangsan echo.sh # 每3小时执行一次
用户任务调度:
crontab命令定义:每个用户都有专用的crontab文件: /var/spool/crond/Username
crontab命令:
[root@test cron]# crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
常用参数:
-u user: 指定执行用户,默认是root
-l: 列出任务列表
-e: 便器任务
-r: 移除任务
-i: 同-r参数,交互式
实例:
[root@test cron]# crontab -e # 将计划任务写到指定文件中
[root@test cron]# cat /var/spool/cron/root
* * * * * echo "hello"
计划任务场景:
日志: 只保留7天内的日志(使用计划任务在每天0点删除7天前的日志即可)
* * * * * find /var/log/java/*.log -atime 7 -delete | -exec rm -rf {};
备份: 备份指定数据/mydata/
10 0 * * * tar -czxf /backup/mydata.zip.tar /mydata/