陈奇网络工作室

Ansible自动操作和维护详细说明

系统操作和维护

Ansible作为开源运维自动化工具,今年越来越受欢迎。Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。Ansible可以通过自己丰富的模块实现各种管理任务,模块超过一千个。更重要的是,它操作简单,但提供了非常丰富的功能。在运维领域,它几乎无所不能。

自2012年发布以来,Ansible迅速风靡全球,其特点如下:

1.Ansible是基于Python开发的,其二次开发对于运维工程师来说相对容易。

2.Ansible丰富的内置模块几乎可以满足所有需求。

3.管理模式很简单。一条命令可以影响数千台主机。

4.没有客户端模式,底层通过SSH进行通信。

我们可以通过四种方式与Ansible进行交互,这里我只研究了其中的两种,对于我们的日常工作来说已经足够了。它们如下:

1.即席命令集:用户通过即席命令集直接调用Ansible工具集来完成任务。

2.剧本:用户预先编写可行的剧本,并通过执行剧本中预先安排的任务集来依次执行任务。

1.可行的工作集:

Ansible工作集包括清单、模块、插件和API,其中清单用于管理设备列表,可以通过分组实现,对组的调用直接影响组内所有主机;模块是各种执行模块,几乎所有的管理任务都是通过模块执行的;插件提供各种附加功能;API为程序员提供了一个接口,可用于Ansible的二次开发。

Ansible可以通过单个命令或配置文件来控制和更改多台主机,这些命令或配置文件将依次从安装和配置开始编写。

2.剧本配置文件。

剧本配置文件使用YAML语法,具有简洁明了的特点。与shell脚本类似,剧本配置文件是一个YAML格式的文件,用于保存特定需求的任务列表。虽然上面描述的ansible命令可以完成各种任务,但是在配置一些复杂的任务时,一个一个的输入是非常低效的。更有效的解决方案是将所有任务代码放在剧本配置文件中,用ansible-playbook命令执行该文件,可以实现自动化运维。YAML文件通常有扩展名。yaml或者。yml。

Ansible的安装和配置。

环境如下:

一、准备工作:

1.本地yum仓库:https://pan.baidu.com/s/1-ERCVm6QaUA4XQd_X5Kwow提取代码:exnp版本:Ansible 2.3.1.0。

2.如果这台机器是联网的,可以指向互联网百胜仓库。

3.默认情况下,TCP 22用于与客户端通信。如果有变化,需要设置自己的防火墙来发布。

二、安装Ansible:

[root @ ansi ble/]# mount/dev/sr0/media/# mount yum warehouse。

[root @ ansi ble/]# RM-RF/etc/yum . repos . d/* #删除或移动yum目录中的其他配置文件。

[root @ ansi ble/]# vim/etc/yum . repos . d/a . repo

[aaa]

baseurl=file:///media

gpgcheck=0

[root @ ansi ble yum . repos . d]# yum clean all #清除yum缓存

[root @ ansibleyum . repos . d]# yum-y installansible # Install ansible

[root @ ansi ble yum . repos . d]# ansi ble-version #可以看到这个信息,表示安装成功。

ansible 2.3.1.0

配置文件=/etc/ansible/ansible.cfg

...

我这里用的是互联网yum仓库进行安装,即ansible 2.4.2.0。

安装已经完成,但是如果想正常使用Ansible,还需要解决一个问题,就是在控制多台主机的时候,如果每次执行命令或者脚本都要输入相反的密码,会很尴尬,所以需要创建SSH来避免交互登录,如下:

以下操作在Ansible server上执行:

[root @ Ansible ~]# ssh-keygen-trsa #在ansi ble服务器上生成一个密钥对,执行后默认按Enter就可以了。

正在生成公钥/私钥对。

输入保存密钥的文件(/root/)。ssh/id _ RSA): #默认按回车键。

输入密码短语(空表示无密码短语):#默认情况下按Enter键。

再次输入相同的密码:#默认情况下按Enter键。

您的标识已保存在/root/中。ssh/id_rsa。

您的公钥已保存在/root/中。ssh/id_rsa.pub。

按键指纹默认为:#回车。

sha 256:zh D2 kvbyxfpe 4 zkmdmthp 6 CJ suiez 5m 26 qrkbfes root @ ansi ble

默认情况下,键的随机标记图像是:#按Enter键。

- [RSA 2048]

| o。o*。o |

| .=o* |

| .=.|

|.o o |

| .o.oSooo。|

| o. o .ooo

| .=oo.|

| o E.|

| .o.o=o |

- [SHA256]

#到目前为止,密钥对已经生成并隐藏在当前用户的主目录中。

[[root @ ansi ble ~]# ls-a | grep ssh # #视图。嘘

[root@ansible ~]# cd。嘘

【root@ansible。中查看文件。ssh目录,带有公钥和私钥。

id_rsa id_rsa.pub已知主机

[root @ ansi ble ~]# ssh-Copy-id root @ 192.168.1.20 #将公钥复制到主机192 . 168 . 1 . 20。

Root @ 192.168.1.20 \ \ \的密码:#输入主机1.20的Root密码。

[root @ ansi ble ~]# ssh-Copy-id root @ 192.168.1.30 #将公钥复制到主机192 . 168 . 1 . 30。

Root @ 192.168.1.30 \ \ \的密码:#输入主机1.30的Root密码。

#在实际生产环境中,不会使用root身份,只需更改复制公钥时指定的用户。

[root @ ansi ble ~]# ssh 192 . 168 . 1 . 20 #测试是否可以无密码登录。

最后一次登录:2019年7月23日星期二08:11:39从192.168.1.88开始

[root@server1 ~]# exit #退出192.168.1.2的shell环境。

[root @ ansi ble ~]# ssh 192 . 168 . 1 . 30 #测试是否可以无密码登录。

最后一次登录:2019年7月23日星期二08:43:16从192.168.1.88开始

[root@server 2 ~]# exit #退出192.168.1.3的shell环境。

三。可行配置:

Inventory是Ansible管理主机信息的配置文件,相当于系统的hosts文件功能。默认情况下,它存储在/etc/ansible/hosts中。在hosts文件中,设备通过分组来组织,Ansible通过清单来定义主机和组。如果不使用默认的/etc/Ansible/hosts,可以通过ansible -i的新库存路径来指定库存,我这里直接采用默认路径。

1.通过分组添加要管理的主机:

在管理之前,应该首先写入hosts文件,因为Ansible通过将hosts文件分组添加到设备列表中来实现对设备的管理。在主机文件中,[]包含组名,设备列表支持域名和IP地址。默认情况下,通过访问端口22 (SSH)来管理设备。如果目标主机使用非默认的SSH端口,也可以在主机名后标记一个冒号和端口号,用行分隔各个单元,并支持通配符。

[root @ ansi ble ~]# vim/etc/ansi ble/hosts #编辑清单文件,并在文件末尾写入以下内容。

...#省略部分内容。

[web] #定义一个名为web的组,下面是web组中的主机。

192.168.1.20

192.168.1.30

[test01] #定义一个名为test01的组,下面是test01组中的主机。

Www.test.com:222 #如果目标主机使用非默认SSH端口,可以通过在域名后添加端口号来指定。

Www[2:5].test.com #[2:5]表示2到5之间的所有数字,例如www2.test.com和www3.test.com的所有主机。

192.168.1.4:66 #IP地址后面还可以跟一个非默认端口号。

#写入要管理的主机后,保存并退出。请注意,该文件包含一个隐式分组“all”,这意味着所有主机。

配置完成后,可以对主机定义的组或组中指定的一台或多台主机执行远程操作,如下所示:

[root@ansible ~]# ansible web -m命令-a systemctl状态httpd - limit 192.168.1.20

#查看web组中192.168.1.20主机httpd服务的状态。

192.168.1.20 |失败| rc=3

httpd . service-Apache HTTP服务器

loaded:loaded(/usr/lib/systemd/system/httpd。预设:禁用)

活动:非活动(死亡)

文件:人:httpd(8)

man:apachectl(8)非零返回代码

#您也可以这样做:

[root @ ansi ble ~]# ansi ble 192 . 168 . 1 . 20-m命令-a systemctl状态httpd

192.168.1.20 |失败| rc=3

httpd . service-Apache HTTP服务器

loaded:loaded(/usr/lib/systemd/system/httpd。预设:禁用)

活动:非活动(死亡)

文件:人:httpd(8)

man:apachectl(8)非零返回代码

[root @ ansi ble ~]# ansi ble 192 . 168 . 1。* -m命令-a systemctl状态httpd

#查询192.168.1.0这个网段内所有主机的httpd服务状态。

192.168.1.20 |失败| rc=3

...

192.168.1.30 |失败| rc=3

...

第四,Ansible命令:

[root@ansible ~]#ansible #进入ansible后,连续按两次tab键即可查看ansible的所有相关命令。

ansi ble ansi ble-doc ansi ble-剧本-2

ansi ble-2 ansi ble-doc-2 ansi ble-剧本-2.7

易变-2.7易变-doc-2.7易变-拉

....

命令1,ansible:

Ansible是生产环境中最常用的命令之一,主要用于以下场景:

临时维护、不定期和临时任务也称为非固化需求。

临时一次性操作。

二次开发接口调用。

Ansible提供以下选项:

-v:输出执行过程的详细信息,可以得到执行过程的所有信息。

-i PATH:指定库存信息,默认值为/etc/ansible/hosts。

-f:并发线程的数量;默认值为5个线程。

private-key=private _ key _ file:指定密钥文件。

-m:指定用于执行的模块。

-M:指定模块的存储路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设置默认路径。

-a:指定模块参数。

-u:指定远程主机使用哪个用户运行命令。

-l:限制正在运行的主机,相当于“--limit”。

-List-hosts:列出符合条件的主机,而不执行任何命令。

使用示例1 (web组需要事先在/etc/ansible/hosts文件中定义):

[root @ ansi ble ~]# ansi ble all-f 5-m ping!-检查所有主机是否都处于活动状态-

192.168.1.30 |成功={

改:假的,

乒乓球:乒乓

}

192.168.1.20 |成功={

改:假的,

乒乓球:乒乓

}

!-其中192.168.1.30和1.20是执行主机,成功表示命令执行成功,“={”表示返回。

结果。“changed”:false表示没有对主机进行任何更改,“ping”:“pong”表示ping命令已经执行。

返回结果。上面提到的命令中的“all”关键字表示/etc/ansible/hosts文件中的所有主机。

它不需要在hosts文件中定义,默认情况下它存在于系统中-

使用示例2:

[root @ ansi ble ~]# ansi ble we b-list #列出web组中的所有主机。

主机(2台):

192.168.1.20

192.168.1.30

#以上表明web包含两个主机,分别是1.20和1.30。

使用示例3:

[root @ ansi ble ~]# ansi ble we b-m command-a df-ht #显示web组中主机的磁盘使用情况。

192.168.1.20 |成功| rc=0

文件系统类型已用容量可用已用% %u6302装载点

/dev/mapper/centos-root xfs 50G 5.8G 45G 12%/

devtmpfs devtmpfs 895M 0 895M 0%

....#省略部分

192.168.1.30 |成功| rc=0

文件系统类型已用容量可用已用% %u6302装载点

/dev/mapper/cl-root xfs 17G 5.5G 12G 33%/

devtmpfs devtmpfs 897m 0 897m 0%/dev

tmpfs tmpfs 912m 84K 912m 1%/dev/shm

....#省略部分

Ansible的返回结果非常友好,一般用三种颜色来表示执行结果:红色、绿色和橙黄色(那种颜色很和谐)。其中红色代表执行过程中的异常;橙黄色表示命令执行后目标有状态变化;绿色表示执行成功,未对目标主机进行任何修改。

命令2,ansible-doc:

Ansible-doc用于查询Ansible模块文档的描述,类似于man命令,对每个模块都有详细的使用说明和应用案例介绍。

[root @ ansi ble ~]# ansi ble-doc-l | WC-l #列出了支持的模块。

1378 #支持1378个模块。

[root @ ansi ble ~]# ansi ble-docping #查询ping模块的描述信息。

PING(/usr/lib/python 2.7/site-packages/ansi ble/modules/system/PING . py)

一个普通的测试模块,这个模块总是返回‘pong \ \ \’

联系成功。这在剧本中没有意义,但是

从/usr/bin/ansible\\\ '中验证以下功能很有用

..#省略部分内容。

命令3,ansi ble-剧本:

Ansible-playbook是日常应用中使用最频繁的命令,类似于Linux中的sh或source命令,用于执行一系列任务。其工作机制是:读取预先编写好的剧本文件,实现集中处理任务。ansible-playbook命令后面是yml格式的剧本文件,其中存储了要执行的任务代码。命令使用如下(需要提前写好playbook.yml文件,最好指定playbook.yml的绝对路径):

[root @ ansi ble ~]# ansi ble-playbook playbook . yml

命令4,ansible-console:

Ansible-console是Ansible提供的交互工具,类似于Windows中的cmd和Linux中的shell。Ansible内置命令可以像shell一样在ansible-console虚拟化的终端上使用,为习惯shell交互的用户提供了良好的体验。所有操作都类似于shell,并且支持tab键补全。具体操作如下:

[root @ ansi ble ~]# ansi ble-console #连接交互工具

金库密码:#ansible 2.4.2.0会提示输入密码,随便输入就行了,回车。不允许空值。

欢迎使用ansible控制台。

键入help或?列出命令。

Root@all (2)[f:5]$ cd web #切换到web组。

Root@web (2)[f:5]$ list #列出组中的主机。

192.168.1.20

192.168.1.30

root @ web(2)[f:5]$ ifconfig ens 33 #查询每台主机的网卡信息。

Root@web (2)[f:5]$ exit #退出ansible-console环境。

动词(verb的缩写)Ansible中包含的模块介绍:

1.命令模块:

命令模块在远程主机上执行命令,不支持管道和重定向等外壳功能。其余类似于壳,常用参数如下:

Chdir:在远程主机上运行命令之前需要预先输入的目录。

创建:在命令运行时创建一个文件。如果文件已经存在,将不会执行创建任务。

删除:在命令运行时删除文件。如果文件不存在,将不会执行删除任务。

Executeble:表示运行命令的shell程序。

[root@ansible ~]# ansible all -m命令-a chdir=/home ls。/

#跑吧。/"命令,并在运行之前切换到/home目录。

2、外壳模块(相当于通用模块,可以执行大部分命令):

shell模块在远程主机中执行命令,相当于调用远程主机的shell进程,然后打开一个子shell在shell下运行命令。与命令模块的区别在于它支持shell特性,比如管道字符、重定向等等。

[root @ ansi ble ~]# ansi ble we b-m shell-a \ \ \ ' echo hello world/tmp/hello . txt \ \ \ '

#在web组的主机上写一个txt文件。

192.168.1.20 |成功| rc=0

192.168.1.30 |成功| rc=0

[root @ ansi ble ~]# ansi ble we b-m shell-a \ \ ' cat/tmp/hello . txt \ \ ' #查看写入的文件。

192.168.1.30 |成功| rc=0

你好世界

192.168.1.20 |成功| rc=0

你好世界

3.复制模块:

复制模块用于将指定的主机文件复制到远程主机的位置。常见参数如下:

Src:表示源文件路径,可以使用相对路径和绝对路径。支持直接目录指定。如果源是目录,目标也必须是目录。

Dest:指示复制文件的目标目录位置,使用绝对路径,并支持直接目录指定。如果源是目录,目标也是目录。如果目标已经存在,原始内容将被覆盖。

Mode:表示复制时目标文件的权限;可选。

Owner:表示复制时目标文件的所有者;可选。

组:表示复制时目标文件所属的组;可选。

content:表示复制到目标主机的内容不能与src一起使用,相当于将Content指定的数据复制到目标文件。

[root @ ansi ble ~]# ansi ble we b-m copy-a src=/etc/hosts dest=/tmp/mode=777 owner=nobody group=root

#将本机的/etc/hosts文件复制到web组中的主机上,指定权限为777,所有者为nobody,所有者为root。

4.主机名模块:

主机名模块用于管理主机名,常用参数如下:

名称:表示主机名。

[root @ ansi ble ~]# ansi ble 192 . 168 . 1 . 20-m hostname-a name=web 1

#将主机192.168.1.20的主机名更改为web1。

192.168.1.20 |成功={

ansible_facts: {

ansible_domain:

ansible_fqdn: web1,

ansible_hostname web1

ansible_nodename: web1

},

已更改:真

名称:web1

}

192.168.1.20主机上的[root@server1 ~]# hostname #视图。

网站1

[root @ server 1 ~]# cat/etc/hostname #在192.168.1.20的主机上查看。

网站1

#更改主机名后,需要重新启动才能使新主机名生效。

5.yum模块:

Yum模块基于yum机制,为远程主机管理包。常见参数如下:

名称:包的名称,带有版本号。如果未指定版本,默认情况下将安装最新版本。

State=present | latest | absent:表示要对包执行的操作。“存在”表示安装软件包,“最新”表示安装软件包的最新版本,而“不存在”表示卸载软件包。

Disablerepo:用yum安装时,暂时禁用仓库的ID。

Enablerepo:用yum安装时,临时启用一个仓库的ID。

conf _ file:yum运行时的配置文件,而不是使用默认的配置文件。

Diable_gpg_check=yes | no:是否启用完整性检查功能。

[root @ ansi ble ~]# ansi ble we b-m yum-a name=httpd state=present

!-

在web组中的主机上安装httpd服务时,需要注意的是,管理只向主机发送yum指令。

在管理端,只有在有可用的yum仓库的情况下,托管端才能成功安装。

-

6.服务模块:

服务模块用于管理远程主机上的服务。常见参数如下:

名称:受管服务的名称。

state=started | stopped | restored | reloaded:操作包括启动、关闭、重新启动和重新加载配置文件。

Enabled=yes | no:指示是否将服务设置为自动启动。

Runlevel:如果enabled设置为自动启动,那么应该定义为在那些运行目标下自动启动,比如2/3/4/5。

[root @ ansi ble ~]# ansi ble we b-m service-a name=httpd state=started enabled=yes

#启动httpd服务并将其设置为boot。

7.用户模块:

用户模块用于管理远程主机上的用户帐户。常见参数如下:

名称:必选参数,账户名称。

State=present | absent:创建或删除一个帐户,其中present表示创建,absent表示删除。

System=yes | no:是否是系统账号。

uid:用户UID。

组:用户的基本组。

组:用户的附加组。

Shell:默认的shell。

Home:用户的主目录。

Move_home=yes | no:如果设置的主目录已经存在,是否移动现有的主目录。

密码:用户的密码。

评论:用户的评论信息。

Remove=yes | no:当state=缺席时是否删除用户的主目录。

[root @ ansi ble ~]# ansi ble we b-m user-a \ \ \ ' name=user 1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/home/user 1 password=user 1 comment=test user \ \ \ '

#创建一个名为user1的用户。

[root @ ansi ble ~]# ansi ble we B- m user-a name=user 1 remove=yes state=缺席

#删除您刚刚创建的user1用户。

8.群组模块:

群组模块用于管理群组以及创建或删除群组。常见参数如下:

Gid:指定组的gid。

Name:指定组的名称。

状态=存在|不存在:创建或删除

System=yes | no:是系统组吗?

[root @ ansi ble ~]# ansi ble we B- m group-a \ \ \ ' name=test GID=300 state=present system=yes \ \ \ '

#创建一个gid为300、组名为test的系统组。

[root @ ansi ble ~]# ansi ble we B- m group-a \ \ \ ' name=test GID=300 state=absent system=yes \ \ \ '

#删除您刚刚创建的组。

9.安装模块:

挂载模块用于挂载文件系统,常用参数如下:

Src:要挂载的设备或文件系统。

名称:指定挂载点

Fstype:指定文件系统类型。

Ots=w | r | o:设置文件读写类型,可以组合使用。

state=Present | Absent | Mounted | Unmounted:Present表示只修改fstab文件中的配置,不会自动创建挂载点,也不会挂载它。缺席意味着删除挂载点,修改fstab文件;挂载:自动创建挂载点并挂载,并添加自动挂载(fstab);卸载:仅卸载,不删除挂载点,不修改fstab文件。

[root@an.~]# ansi ble we b-m mount-a \ \ \ ' name=/warrent src=/dev/cdrom fs type=iso 9660 state=mounted \ \ \ '

#将iso镜像挂载到/Warren目录,并设置启动时自动挂载。

[root @ ansi ble ~]# ansi ble we B- m mount-a \ \ \ ' name=/warrent state=absent \ \ \ '

#卸载ISO映像,删除挂载点,并删除引导自动挂载。

[root@an.~]# ansi ble we B- m mount-a path=/mnt/data src=/dev/SD B1 fs type=xfs ots=wr state=mounted

#注意:mount使用了path而不是原始的name参数,但是name参数仍然可以使用。

10.cron模块:

Cron模块用于管理计划任务,常用参数如下:

名称:指定计划任务的描述;必需的。

作业:要执行的任务

用户:运行计划任务的用户。

执行时间:

分钟:0-59,默认值为*

小时:0-23,默认值为*

日:1-31,默认为*

月份:2012年1月12日,默认为*

工作日:1-7,默认值为*

State=Present | Absent: Present表示添加计划任务;缺席意味着删除计划任务。

[root @ ansi ble ~]# ansi ble we b-m cron-a \ \ \ ' name=test user=root minute=*/2 job=echo test/tmp/warrent . txt state=present \ \ \ '

#添加计划任务进行测试。

[root @ ansi ble ~]# ansi ble we b-m shell-acro tab-l #查看创建的任务计划。

192.168.1.20 |成功| rc=0

#Ansible:测试

*/2 * * * * echo test/tmp/warrent . txt

192.168.1.30 |成功| rc=0

#Ansible:测试

*/2 * * * * echo test/tmp/warrent . txt

11.脚本模块:

功能:在远程主机上执行主控终端的脚本,相当于scp shell组合。

用法如下:

[root @ ansi ble ~]# ansi ble we B- m script-a/home/test . sh

关于行动手册配置文件的使用,请参考https://blog.51cto.com/14227204/2442514.

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理官网:www.chenqinet.cn。

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3