分布式存储算法介绍

章节一:传统的 Hash 存储算法
1.1 传统的 Hash 存储算法简介

  将数据进行切片,对每份切片进行 Hash 取值,并对获取的 Hash 值除以存储节点的数量以取余,余数是多少就将此切片存在第几个 OSD 节点里,主要是 Swift 在使用。

1.2 传统的 Hash 存储算法的缺点

  如果要增加存或减少存储节点,需要对所有已存储数据切片的 Hash 值重新取余,大概 90% 的数据需要重新均衡数据(rebalance)。

章节二:一致性 Hash 算法
2.1 一致性 Hash 算法简介

  1) 给电脑也计算 Hash 值(可以是给电脑名计算 Hash 值,也可以给 IP 地址计算 Hash 值)
  2) 再给数据也计算 Hash 值,将数据存到比它的 Hash 值大,且与它的差值最小的一台电脑上,如果没有 Hash 值比它大的电脑就直接将数据存在 Hash 值最小的电脑上
  3) 整个架构类似一个环

2.2 一致性 Hash 算法的缺点

  1) 电脑太少时切换数据也会有较大的数据量,但是可以多设置几个虚拟节点,给以后新增加的节点使用,虚拟节点里的数据会影射到对应的物理节点里面去
  2) 电脑太少时,两台电脑的 Hash 值比较接近导致,数据分配极度不平均

(注意:在开始创建数据架构时,要评估未来数据的规模,如果最后要添加的电脑数量超过了虚拟节点数量,那么这个架构就不能使用了。此时只能备份数据,然后新建一个架构出来)

章节三:CRUSH
3.1 CRUSH 简介

  CRUSH(Controlled Replication Under Scalable Hashing)算法,在可扩展 Hash 算法下的可控制复制,主要是 Ceph 在使用。

3.2 CRUSH 算法
3.2.1 CRUSH 算法的第一层

  由 Ceph 的 OSD(Object Storage Deivces)组成。

3.2.2 CRUSH 算法的第二层
3.2.3 CRUSH 算法的第二层的组成

  由 Ceph 的 PG(Placement Group)归置组组成。

3.2.4 CRUSH 算法的第二层的由来

  在 OSD 节点上虚拟出多个 PG,每个 PG 默认会被指定对应 3 个 OSD 节点(每个 OSD 节点同时可以属于多个 PG),其中第一个 OSD 节点为主要(primary)的硬盘,其他两 OSD 节点为从(second)硬盘,PG 会对应几个 OSD 节点取决于 Ceph 的存储副本被设置了几份。

3.2.5 CRUSH 算法的第二层的算法

  1) 给每个 OSD 节点设置一个权重值,OSD 节点的容量越大则其权重值越大
  2) 主要(primary)硬盘的 OSD 节点:将 PG 的 ID 值和 OSD 的 ID 值组合在一起并计算 Hash 值,将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时,此 PG 就和此 OSD 绑定在一起
  3) 第一个从(second)硬盘的 OSD 节点:将 PG 的 ID 值逐一和 OSD 的 ID 值和一个随机的常数组合在一起并计算 Hash 值(这个值在 Ceph 的代码里被叫做 draw),将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时(这个值在 Ceph 的源代码里叫做 straw)则此 PG 就和此 OSD 绑定在一起
  4) 第二个从(second)硬盘的 OSD 节点:将 PG 的 ID 值逐一和 OSD 的 ID 值和上一个随机常数加 1 的和组合在一起并计算 Hash 值(这个值在 Ceph 的代码里被叫做 draw),将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时(这个值在 Ceph 的源代码里叫做 straw),则此 PG 就和此 OSD 绑定在一起(如果找到的 OSD 节点和前面的 OSD 节点重复,则将这个随机常数再加 1 并进行重复操作,最终获得和前面不通的 OSD 节点为止)
……

3.3 CRUSH 算法的第三层
3.3.1 CRUSH 算法的第三层的组成

  由池组成。

3.3.2 CRUSH 算法的第三层的由来

  1) 在 PG 上虚拟出多个池,每个池对应多个 PG,数据可以存储到指定的池里
  2) 总硬盘容量有多大,每个池最大可以使用的容量就有多大,但是如果如果一个池使用了一部分容量,其他的池就要少使用一部分容量

3.4 CRUSH 算法的第四层
3.4.1 CRUSH 算法的第四层的组成

  由数据组成。

3.4.2 CRUSH 算法的第四层的算法

  1) 对要放入某个池里的数据进行切片,默认每片 4M
  2) 对每份切片进行 Hash 取值,并对获取的 Hash 值除以这个池里 PG 节点的数量以取余,余数是多少就存在第几个 OSD 节点里

[内容] Ceph 介绍

内容一:Ceph 简介

Ceph 是一种分布式存储架构和技术。此项目是 2004 年由 Sage Weil 在加州大学 Santa Cruz 分校攻读博士期间的创建和研究的课题,并于 2006 年将其开源,同时成立 Inktank 公司专注 Ceph 的研发。2014 年 5 月 Inktank 公司被 Red Hat 收购。

内容二:Ceph 的特点

1) 高性能(硬盘越多性能越高,所有硬盘可以同时读写)
2) 高可用(硬盘越多高可用越高)

内容三:Ceph 使用的方式

1) 自己写程序:通过 C C++ Java Python Ruby PHP 等语言写程序调用 Ceph 底层存储 LIBRADOS,此方法性能最高
2) 自己写脚本:写对象脚本,通过 RGW(RADOSGW)对象存储网关的 Rest API 接口去访问 Ceph 的底层存储 LIBRADOS,此方法性能第二高
3) 挂载块存储:通过 Linux 内核或者 KVM 等虚拟机存储驱动访问 Ceph 的块存储,此方法性能第三高
4) 挂载文件系统:通过 Linux 内核(POSIX 命令)挂载 Ceph 的文件系统存储,此方法性能最弱

内容四:Ceph 的组成

1) OSD(Object Storage Deivces):负责存储、复制、恢复数据等,默认要有 3 台以上才能实现高可用,因为 Ceph 默认有三副本
2) MON(Monitor):负责监控集群状态制作和更新存储地图(map),供客户端从下载,在生产环境里必须要有 3 台以上,且最好是奇数台,因为必须遵循过半原则
3) MDS(Metadata Servers):实现文件系统存储,允许客户端通过 Linux 内核(POSIX 命令)挂载 Ceph 的文件系统存储
4) RGW(RADOSGW):实现对象存储网关,允许客户端通过 RGW(RADOSGW)对象存储网关的 Rest API 接口去访问 Ceph 的底层存储 LIBRADOS
5) 客户端:使用从 MON 下载和更新的存储地图,通过算法,直接从 OSD 访问数据

内容五:Ceph 架构
5.1 Ceph 使用架构
5.1.1 Ceph 的上层

自己写程序、自己写脚本、挂载块存储、挂载文件系统 4 种使用方式。

5.1.2 Ceph 的下层

RADOS,基于对象的存储(比我们平时所说的对象存储更原始,更底层),通过软件实现自我检查、自我备份和自我修复的功能。

5.2 Ceph 组成架构

                                  File

                  Cut1(Objects1) Cut2(Objects2) Cut3(Objects3)......

                              choice Pool

              Pool1                                   Pool2
     PG1                PG2                  PG2               PG3
OSD1 OSD2 OSD3    OSD2 OSD5 OSD3        OSD1 OSD4 OSD3    OSD4 OSD5 OSD3
Disk Disk Disk    Disk Disk Disk        Disk Disk Disk    Disk Disk Disk

内容六:Ceph 的算法:CRUSH
6.1 CRUSH 简介

CRUSH(Controlled Replication Under Scalable Hashing)算法,在可扩展 Hash 算法下的可控制复制

6.2 CRUSH 算法的第一层

由 OSD(Object Storage Deivces)组成。

6.3 CRUSH 算法的第二层
6.3.1 CRUSH 算法的第二层的组成

由 PG(Placement Group)归置组组成。

6.3.2 CRUSH 算法的第二层的由来

在 OSD 节点上虚拟出多个 PG,每个 PG 默认会被指定对应 3 个 OSD 节点(每个 OSD 节点同时可以属于多个 PG),其中第一个 OSD 节点为主要(primary)的硬盘,其他两 OSD 节点为从(second)硬盘,PG 会对应几个 OSD 节点取决于 Ceph 的存储副本被设置了几份。

6.3.3 CRUSH 算法的第二层的算法

1) 给每个 OSD 节点设置一个权重值,OSD 节点的容量越大则其权重值越大
2) 主要(primary)硬盘的 OSD 节点:将 PG 的 ID 值和 OSD 的 ID 值组合在一起并计算 Hash 值,将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时,此 PG 就和此 OSD 绑定在一起
3) 第一个从(second)硬盘的 OSD 节点:将 PG 的 ID 值逐一和 OSD 的 ID 值和一个随机的常数组合在一起并计算 Hash 值(这个值在 Ceph 的代码里被叫做 draw),将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时(这个值在 Ceph 的源代码里叫做 straw)则此 PG 就和此 OSD 绑定在一起
4) 第二个从(second)硬盘的 OSD 节点:将 PG 的 ID 值逐一和 OSD 的 ID 值和上一个随机常数加 1 的和组合在一起并计算 Hash 值(这个值在 Ceph 的代码里被叫做 draw),将得到的 Hash 值乘以此 OSD 节点的权重,当最终获得的值最大时(这个值在 Ceph 的源代码里叫做 straw),则此 PG 就和此 OSD 绑定在一起(如果找到的 OSD 节点和前面的 OSD 节点重复,则将这个随机常数再加 1 并进行重复操作,最终获得和前面不通的 OSD 节点为止)
5) 第三个从(second)硬盘的 OSD 节点:仿照第二个从(second)硬盘的 OSD 节点方式以此类推

6.4 CRUSH 算法的第三层
6.4.1 CRUSH 算法的第三层的组成

由池组成。

6.4.2 CRUSH 算法的第三层的由来

1) 在 PG 上虚拟出多个池,每个池对应多个 PG,数据可以存储到指定的池里
2) 总硬盘容量有多大,每个池最大可以使用的容量就有多大,但是如果如果一个池使用了一部分容量,其他的池就要少使用一部分容量

6.5 CRUSH 算法的第四层
6.5.1 CRUSH 算法的第四层的组成

由数据组成。

6.5.2 CRUSH 算法的第四层的算法

1) 对要放入某个池里的数据进行切片,默认每片 4M
2) 对每份切片进行 Hash 取值,并对获取的 Hash 值除以这个池里 PG 节点的数量以取余,余数是多少就存在第几个 OSD 节点里

内容七:Ceph 的工作流程

1) 客户端从 MON 上下载最新的存储地图(map)
2) 存储地图(map)把集群里所有 MON、OSD 和 MDS 的信息告诉客户端,但是客户端依然不知道想要找的数据存放在哪
3) 客户端通过 CRUSH 计算出所需要读写的数据存放的 OSD 节点位置
4) 客户端直接在 OSD 节点位置上读写数据
5) 用户只需要把数据数据写入主要 OSD 节点硬盘上,然后 Ceph 自动同步给其他的从 OSD 节点硬盘上

内容八:Ceph 的维护

1) PG 的个数肯定要大于 OSD 节点的数量,在生产的环境中 PG 设计的数量往往会远远大于 OSD 节点的数量,以满足未来可能几年的需求,可能会在 3 个硬盘上添加上百个 PG
2) 当增加存或减少存储节点时,PG 的数量不会发生变化,只有 PG 对应 OSD 节点有变化的数据才会需要重新均衡数据(rebalance)的数据
3) 当增加存或减少 PG 数量时,就需要像传统的 Hash 存储算法那样,对所有已存储数据切片的 Hash 值重新取余,大概 90 % 的数据需要重新均衡数据(rebalance)

[内容] Linux 格式化特点

内容一:格式化后会产生的分区

格式化会格式出 inode 区和 block 区

内容二:inode 区和 block 区的作用

inode 区默认一格大小是 512 个字节,存储哪一份数据存在了哪些 block 里以及数据的所属者、权限创建时间等 metadata 元数据
block 区默认一格大小是 4k,只存储数据本身

内容三:Linux 文件格式的特点

ext3 和 ext4 的 inode 区每一格较小,而 xfs 的 inode 区每一格更大,可以存储更多种类,例如快照等 metadata 元数据

[内容] Ansible 使用方法层级

第一层:直接通过命令行使用 Ansible 命令
第二层:将 Ansible 里的内容写入到 Playbook 里,执行 Playbook,Playbook 类似于一个脚本
第三层:制作一个 Ansible role,之后在 Playbook 里调用 role,一次性调用多个 role 时可以用分号 “;” 相隔,role 类似于一个自定义的模块

[内容] Ansible 常模模块 (转载)

Ansible常用模块详解

Ansible常用模块详解

命令模块
command
shell
文件模块
copy
fetch
file
安装模块
yum
服务模块
service
挂载模块
mount
定时任务
cron
用户模块
group
user
压缩解压
unarchive

ansible内置了丰富的模块供用户使用,但是经常使用到的模块却不多。本文主要记录了ansible的一些常用模块以及详细参数 、注意事项等 ,供大家学习。
命令模块

command

概要
命令模块 适合使用简单的命令 无法支持"<",">","|",";","&"等符号
官方文档:https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module

参数	选项/默认值	释义
chdir		在执行命令前,进入到指定目录中
creates		判断指定文件是否存在,如果存在,不执行后面的操作
removes		判断指定文件是否存在,如果存在,执行后面的操作
free_form		必须要输入一个合理的命令
备注:无法支持"<",">","|",";","&"等符号
示例:

root@m01 ~]# ansible dkaiyun -m command -a "hostname"
web01 | CHANGED | rc=0 >>
web01

nfs01 | CHANGED | rc=0 >>
nfs01

backup01 | CHANGED | rc=0 >>
backup
1
2
3
4
5
6
7
8
9
chdir

[root@m01 ~]# ansible dkaiyun -m command -a "chdir=/data ls -l"
web01 | CHANGED | rc=0 >>
total 4
-rw-r--r-- 1 root root 158 Jan 12 11:11 hosts

backup01 | CHANGED | rc=0 >>
total 4
-rw-r--r-- 1 root root 4 Jan 13 18:06 lol.txt

nfs01 | CHANGED | rc=0 >>
total 4
-rw-r--r-- 1 root root 13 Jan 17 18:45 bbb.txt
1
2
3
4
5
6
7
8
9
10
11
12
creates

[root@m01 ~]# ansible dkaiyun -m command -a "touch /data/lol.txt creates=/data/lol.txt"
 [WARNING]: Consider using the file module with state=touch rather than running touch.  If you need to use command because file is insufficient you can add
warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message.

nfs01 | CHANGED | rc=0 >>


backup01 | SUCCESS | rc=0 >>
skipped, since /data/lol.txt exists

web01 | CHANGED | rc=0 >>


1
2
3
4
5
6
7
8
9
10
11
12
13
removes

[root@m01 ~]# ansible dkaiyun -m command -a "rm -f /data/hosts removes=/data/hosts"
nfs01 | SUCCESS | rc=0 >>
skipped, since /data/hosts does not exist

backup01 | SUCCESS | rc=0 >>
skipped, since /data/hosts does not exist

 [WARNING]: Consider using the file module with state=absent rather than running rm.  If you need to use command because file is insufficient you can add
warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message.

web01 | CHANGED | rc=0 >>

1
2
3
4
5
6
7
8
9
10
11
12
shell

概要
类似command模块升级版—万能模块
官方文档:https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module

参数	选项/默认值	释义
chdir		在执行命令前,进入到指定目录中
creates		判断指定文件是否存在,如果存在,不执行后面的操作
removes		判断指定文件是否存在,如果存在,执行后面的操作
free_form		必须要输入一个合理的命令
备注:可以使用"<",">","|",";","&"等符号特殊符号
示例:

[root@m01 ~]# ansible dkaiyun -m shell -a "ps -ef |grep /[s]sh"
backup01 | CHANGED | rc=0 >>
root       2042      1  0 09:06 ?        00:00:00 /usr/sbin/sshd -D

nfs01 | CHANGED | rc=0 >>
root       1258      1  0 08:32 ?        00:00:00 /usr/sbin/sshd -D

web01 | CHANGED | rc=0 >>
root       1197      1  0 11:39 ?        00:00:00 /usr/sbin/sshd -D

1
2
3
4
5
6
7
8
9
10
注:其它参数参考command模块 使用方法一致

文件模块

copy

概要
主要用于将管理主机上的数据信息传送给多台主机
官方文档:https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

参数	选项/默认值	释义
src		指定将本地管理主机的什么数据信息进行远程复制
backup	no* yes	默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份)
content		在文件中添加信息
dest(required)		将数据复制到远程节点的路径信息
group		文件数据复制到远程主机,设置文件属组用户信息
mode		文件数据复制到远程主机,设置数据的权限 eg 0644 0755
owner		文件数据复制到远程主机,设置文件属主用户信息
remote_src	no* yes	如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的数据进行分发操作
备注 (required)为必须使用的参数
*为默认参数
copy模块在复制数据时,如果数据为软链接文件,会将链接指定源文件进行复制
修改权限时候 需要加0 例如:chmod 0644 0755
示例:

[root@m01 ~]# ansible web01 -m copy -a "src=./anaconda-ks.cfg  dest=/data"
web01 | CHANGED => {
    "changed": true, 
    "checksum": "9d791df2961e299fac1206c2e1c6ab1cde2c86a2", 
    "dest": "/data/anaconda-ks.cfg", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "221e5656c9b59aec6c7596568fff8ad3", 
    "mode": "0644", 
    "owner": "root", 
    "size": 1499, 
    "src": "/root/.ansible/tmp/ansible-tmp-1548229670.84-2879942383233/source", 
    "state": "file", 
    "uid": 0
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
backup

[root@m01 ~]# ansible web01 -m copy -a "src=./anaconda-ks.cfg  dest=/data backup=yes"
web01 | CHANGED => {
    "backup_file": "/data/anaconda-ks.cfg.4263.2019-01-23@15:52:43~", 
    "changed": true, 
    "checksum": "9d791df2961e299fac1206c2e1c6ab1cde2c86a2", 
    "dest": "/data/anaconda-ks.cfg", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "221e5656c9b59aec6c7596568fff8ad3", 
    "mode": "0644", 
    "owner": "root", 
    "size": 1499, 
    "src": "/root/.ansible/tmp/ansible-tmp-1548229931.86-180942706957431/source", 
    "state": "file", 
    "uid": 0
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@web01 ~]# ll /data/
total 8
-rw-r--r-- 1 root root 1499 Jan 23 15:52 anaconda-ks.cfg
-rw-r--r-- 1 root root 1505 Jan 23 15:52 anaconda-ks.cfg.4263.2019-01-23@15:52:43~
1
2
3
4
owner group mode

[root@m01 ~]# ansible web01 -m copy -a "src=./anaconda-ks.cfg  dest=/data owner=www group=www mode=0644"
web01 | CHANGED => {
    "changed": true, 
    "checksum": "9d791df2961e299fac1206c2e1c6ab1cde2c86a2", 
    "dest": "/data/anaconda-ks.cfg", 
    "gid": 1086, 
    "group": "www", 
    "md5sum": "221e5656c9b59aec6c7596568fff8ad3", 
    "mode": "0644", 
    "owner": "www", 
    "size": 1499, 
    "src": "/root/.ansible/tmp/ansible-tmp-1548230667.08-106764271060692/source", 
    "state": "file", 
    "uid": 1086
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@web01 data]# ll
total 4
-rw-r--r-- 1 www www 1499 Jan 23 16:04 anaconda-ks.cfg
1
2
3
content

[root@m01 ~]# ansible web01 -m copy -a "content=test  dest=/data/anaconda-ks.cfg "
web01 | CHANGED => {
    "changed": true, 
    "checksum": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", 
    "dest": "/data/anaconda-ks.cfg", 
    "gid": 1086, 
    "group": "www", 
    "md5sum": "098f6bcd4621d373cade4e832627b4f6", 
    "mode": "0644", 
    "owner": "www", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1548231000.52-150895010308573/source", 
    "state": "file", 
    "uid": 1086
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@web01 data]# cat anaconda-ks.cfg 
test[root@web01 data]#
注:content添加内容不会添加回车符 
1
2
3
fetch

概要
抓取文件到管理机上
官方文档:https://docs.ansible.com/ansible/latest/modules/fetch_module.html#fetch-module

参数	选项/默认值	释义
src(required)		要获取的远程系统上的文件,必须是文件,而不是目录
dest		用于保存文件的目录
备注
示例:

[root@m01 ~]# ansible web01 -m fetch -a "src=/root/lol.txt dest=/root"
web01 | CHANGED => {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/root/web01/root/lol.txt", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "remote_md5sum": null
}
[root@m01 ~]# tree ~
/root
└── web01
    └── root
        └── lol.txt

2 directories, 1 file
[root@m01 ~]# 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
file

概要
实现创建/删除文件信息 对数据权限进行修改
官方文档:https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

参数	选项/默认值	释义
dest/path/name(required)		将数据复制到远程节点的路径信息
group		文件数据复制到远程主机,设置文件属组用户信息
mode		文件数据复制到远程主机,设置数据的权限 eg 0644 0755
owner		文件数据复制到远程主机,设置文件属主用户信息
src		指定将本地管理主机的什么数据信息进行远程复制
state	absent	将数据进行删除
=	directory	创建一个空目录信息
=	file	查看指定目录信息是否存在
=	touch	创建一个空文件信息
=	hard/link	创建链接文件
备注
示例:

安装模块

yum

概要
使用yum软件包管理器安装,升级,降级,删除和列出软件包和组。
官方文档:https://docs.ansible.com/ansible/latest/modules/yum_repository_module.html#yum-repository-module

参数	选项/默认值	释义
name(required)		指定软件名称信息
state	absent/removed	将软件进行卸载(慎用)
=	present/installed	将软件进行安装
latest		安装最新的软件 yum update
备注
示例:

[root@m01 ~]# ansible web01 -m yum -a "name=httpd-tools state=installed"
1
服务模块

service

概要
用于管理服务运行状态
官方文档:https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module

参数	选项/默认值	释义
enabled	no yes	设置服务是否开机自启动 如果参数不指定,原有服务开机自启动状态进行保留
name (required)		设置要启动/停止服务名称
state=	reloaded	平滑重启
=	restarted	重启
=	started	启动
=	stopped	停止
备注
示例:

[root@m01 ~]# ansible web01 -m service -a "name=crond state=started enabled=yes"
1
挂载模块

mount

概要
用于批量管理主机进行挂载卸载操作
官方文档:https://docs.ansible.com/ansible/latest/modules/mount_module.html#mount-module

参数	选项/默认值	释义
fstype		指定挂载的文件系统类型
opts		指定挂载的参数信息
path		定义一个挂载点信息
src		定义设备文件信息
state	absent	会进行卸载,也会修改fstab文件信息
=	unmounted	会进行卸载,不会修改fstab文件
=	present	不会挂载,只会修改fstab文件
=	mounted	会进行挂载,会修改fstab文件
在进行挂载的时候,使用state=mounted
在进行卸载的时候,使用state=absent
示例:

[root@m01 ~]# ansible web01 -m mount -a "src=172.16.1.31:/data/  path=/mnt fstype=nfs state=present"
以上信息只是在/etc/fstab文件中添加了配置信息,不会真正进行挂载(mount -a)
[root@m01 ~]# ansible web01 -m mount -a "src=172.16.1.31:/data/  path=/mnt fstype=nfs state=mounted"
以上信息是在/etc/fstab文件中添加了配置信息,并且也会真正进行挂载
1
2
3
4
定时任务

cron

概要
定时任务模块
官方文档:https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module

参数	选项/默认值	释义
minute/hour/day/month/weekday		和设置时间信息相关参数
job		和设置定时任务相关参数
name(required)		设置定时任务注释信息
state	absent	删除指定定时任务
disabled	yes	将指定定时任务进行注释
=	no	取消注释
备注:时间参数不写时,默认为 *
示例:
每五分钟同步一次时间

[root@m01 ~]# ansible web01 -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' "
web01 | CHANGED => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "None", 
        "ntpdate time"
    ]
}

1
2
3
4
5
6
7
8
9
10
结果

[root@web01 data]# crontab -l
#Ansible: ntpdate time
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
1
2
3
删除定时任务

[root@m01 ~]# ansible web01 -m cron -a "name='ntpdate time' state=absent"
web01 | CHANGED => {
    "changed": true, 
    "envs": [], 
    "jobs": []
}

1
2
3
4
5
6
7
注释定时任务
注意:注释和取消注释时必须填写 job和时间 参数

[root@m01 ~]# ansible web01 -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
web01 | CHANGED => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ntpdate time"
    ]
}

1
2
3
4
5
6
7
8
9
结果

[root@web01 data]# crontab -l
#Ansible: ntpdate time
#*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

1
2
3
4
取消注释

[root@m01 ~]# ansible web01 -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"
web01 | CHANGED => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ntpdate time"
    ]
}

1
2
3
4
5
6
7
8
9
结果

[root@web01 data]# crontab -l
#Ansible: ntpdate time
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

1
2
3
4
用户模块

group

概要
远程批量创建用户组信息
官方文档:https://docs.ansible.com/ansible/latest/modules/group_module.html#group-module

参数	选项/默认值	释义
gid		指创建的组ID信息
name		指创建组名称信息
state	absent	删除指定的用户组
=	present	创建指定的用户组
备注
示例:
创建一个指定的用户组dkaiyun gid=1055

ansible web01 -m group -a "name=dkaiyun gid=1055"
1
删除一个指定的用户组dkaiyun gid=1055

ansible web01 -m group -a "dkaiyun gid=1055 state=absent"
1
user

概要
远程批量创建用户信息
官方文档:https://docs.ansible.com/ansible/latest/modules/user_module.html#user-module

参数	选项/默认值	释义
password		请输入密码信息
name		指定用户名信息
uid		指定用户uid信息
group		指定用户主要属于哪个组
groups		指定用户属于哪个附加组信息
shell	/bin/bash或/sbin/nologin	指定是否能够登录
create_home	yes/no	是否创建家目录信息
home		指定家目录创建在什么路径 默认/home
备注:password设置密码时不能使用明文方式,只能使用密文方式
可以给用户设置密码 还可以给用户修改密码
示例:

压缩解压

unarchive

概要

官方文档:https://docs.ansible.com/ansible/latest/modules/unarchive_module.html#unarchive-module

参数	选项/默认值	释义
备注
示例:


————————————————
版权声明:本文为CSDN博主「最爱下一站」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34646546/article/details/86606408

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z