系统操作和维护
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。