网络自动化运维教程-实验手册汇总- 项目1-12 Ansible 基础 -Ansible部署Nginx和Keepalived高可用集群_第1页
网络自动化运维教程-实验手册汇总- 项目1-12 Ansible 基础 -Ansible部署Nginx和Keepalived高可用集群_第2页
网络自动化运维教程-实验手册汇总- 项目1-12 Ansible 基础 -Ansible部署Nginx和Keepalived高可用集群_第3页
网络自动化运维教程-实验手册汇总- 项目1-12 Ansible 基础 -Ansible部署Nginx和Keepalived高可用集群_第4页
网络自动化运维教程-实验手册汇总- 项目1-12 Ansible 基础 -Ansible部署Nginx和Keepalived高可用集群_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IT行业的工作变得越来越有趣了,我们不再是把软件交付给客户,然后安装在单独的服务器上运行,我们都慢慢地变成了系统工程师。我们现在部署应用软件的方式是通过服务串联起来,运行在一系列分布式的计算资源上并用各种不同的网络协议进行通信。常见的应用包括Web服务、应用服务、基于内存的缓存服务系统、任务队列、消息队列、SQL数据库、NosOL数据存储、负载均衡等。我们也需要确保采用合适的冗余,当故障发生时软件系统能够很好地处理、适应这些故障。另外有些辅助的服务需要部署、维护,例如日志管理、监控系统、分析系统,需要与第三方服务交互,如通过与las接口交互来管理虚拟主机实例。你可以用于动方式来搭建这些服务:安装服务器操作系统,,SSH登录每一台,安装软件包,编辑配置文件,等等。这种方式耗费大量时间还经常出错,特别是在做了3~4次之后,这钟枯燥重复的手工旁动是令人非常痛苦的。对于更复杂的任务,比如在你应用环境中接建一个openStack云环境,由手工来操作会让人发疯。应有更好的方法。IT自动化配置管理最近20年获得了迅猛的发展,特别最近几年在移动互联、云计算、大数据、互联网+等大规模应用平台的需求推动下,涌现出一批成熟的大规模自动化运维工具。维基百科里列出了二十多个,其中Puppet,Chet和Salt,以及CFEngineVagrant和Nixos等。不过后起之秀Ansible(/)的人气更高,已经是当今最常用的管理基础架构的开源管理工具之一。项目1、Ansible基础Ansible基础Ansible基于PythonParamikoPyYAML两个关键模块构建,巧妙地设计、实现了简单易用、功能强大的自动化管理工具。Ansible的第一个版本发布于2012年2月,软件发布周期大约是2个月发布一个新版本,目前最高版本已经到2.9。Ansible只依赖SSH,无需在远程机器上安装代理,极为容易上手。Ansible的特点:部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;默认使用SSH协议对设备进行管理;有大量常规运维操作模块,可实现日常绝大部分操作;配置简单、功能强大、扩展性强;支持API及自定义模块,可通过Python轻松扩展;通过Playbooks来定制强大的配置、状态管理;轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;提供一个功能强大、操作性强的Web管理界面和RESTAPI接口——AWX平台。Ansible架构模式Ansible结构模式通常由控制机(manage)和被管机(managed)组成。控制机是用来安装Ansible工具软件、执行维护指令的服务器或工作,是Ansible维尹的核心。被管理是运行亚、业务服务的服务器,由控制机通过SSH来进行管理,无需在被管节点上安装附加软件。Ansible通过模块来运行任务,有ansible自带的核心模块库,扩展模块是为了完成一些自定义的功能,插件是为了完成一些小型的特定功能和辅助模块完成操作。核心:ansible核心模块(CoreModules):这些都是Ansible自带的模块扩展模块(CustomModules):如果核心模块不足以完成某种功能,可以添加扩展模块插件(Plugins):完成模块功能的补充剧本(Playbooks):Ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行连接插件(ConnectiorPlugins):ansible基于连接插件连接到各个主机上,虽然Ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件主机群(HostInventory):定义ansible管理的主机项目2、Ansible安装配置项目2、Ansible安装配置(1)准备虚拟机Ansible快速入门(1)准备虚拟机准备3台虚拟机虚拟机1:2vCPU管理节点2GMem20GDiskCentOS7.630/24Ansible虚拟机2:2vCPU被管理节点2GMem20GDiskCentOS7.631/24Ansible虚拟机3:2vCPU被管理节点2GMem20GDiskCentOS7.632/24Ansible修改主机名在虚拟机1上禁用Selinux,设置SELINUX=disabled,重启生效[root@localhost~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config3虚拟机1作为Ansible管理节点,主机名更名为:Ansi_Manager[root@localhost~]#hostnamectlset-hostnameAnsi_Manager[root@localhost~]#reboot-f在虚拟机2上禁用Selinux,设置SELINUX=disabled,重启生效[root@localhost~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config3虚拟机2作为Ansible被管理节点,主机名更名为:Node01[root@localhost~]#hostnamectlset-hostnameNode01[root@localhost~]#reboot-f在虚拟机3上禁用Selinux,设置SELINUX=disabled,重启生效[root@localhost~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config3虚拟机3作为Ansible被管理节点,主机名更名为:Node02[root@localhost~]#hostnamectlset-hostnameNode01[root@localhost~]#reboot-fAnsible安装Ansible配置管理系统由管理主机和被管理节点组成。Ansible对被管理主机没有太多要求,当前管理节点的操作系统可以选用Linux或OSx,被管理节点的要求更少,支持Linux,类UNIX、Windows等类型的主机节点,还支持Cisco,Juniper等网络设备、负载均衡器。Ansible默认是基于SSH协议进行通信的。安装Ansible之后,管理节点不需要启动或运行任何Ansible的后台进程,也不需要有数据库。只要在一台管理节点上安装好,就可以通过这台主机管理一组远程的被管理节点。在远程被管理节点上,同样也不需要安装、运行任何Ansible特有的软件。这样如果Ansible版本需要升级,只需升级管理节点,不涉及被管理节点。不需要安装客户端,因此,相对于其他配置管理工具,Ansible的安装简单得多,只需要在控制端安装Ansible即可。Ansible使用Python语言开发,我们可以直接使用pip进行安装,也可以使用Linux下的包管理工具(如yumI、apt-get)进行安装。在Ansible管理节点上使用yum安装Ansible。Yum源更换为国内阿里源yuminstallwget-ymv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backupwget-O/etc/yum.repos.d/CentOS-Base.repo/repo/Centos-7.repo5添加阿里的epel源wget-O/etc/yum.repos.d/epel.repo/repo/epel-7.repo8yum重新建立缓存yumcleanallyummakecachepythonpythonversion=2.7.5(default,Oct302018,23:45:53)[GCC4.8.520150623(RedHat4.8.5-36)]ansible二进制执行路径executablelocation=/usr/bin/ansible10119 ansiblepythonmodulelocation=/usr/lib/python2.7/site-packages/ansible#Python对应模块路径ansible模块路径configuredmodulesearchpath=[u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modules']#ansible版本ansible配置文件路径#验证ansible的安装[root@ansi_manager~]#ansible--versionansible2.9.17configfile=/etc/ansible/ansible.cfg#使用YUM安装ansible[root@ansi_manager~]#yum-yinstallansible123456781 1 [root@ansi_manager~]#cat/etc/ansible/ansible.cfg23 #inventory/etc/ansible/hosts 表示资源清单的文件位置,就是Ansible管理的主机列表4567#library/usr/share/my_modules/ Ansible运行都需要使用模块,这个路径就是模块存放的路径#module_utils/usr/share/my_module_utils/ 一样也是模块默认的存放路径,一般不要改。#remote_tmp~/.ansible/tmp 指定远程执行的路径;ansible在远程主机上操作时,会在对应远程主机用户的/目录下创建‘.ansible’这个目录,然后再创建一个tmp文件,ansible管理端会把相关模块的python脚本拷贝到此文件里,然后 远程节点根据这个pthon配置脚本文件来执行操作。#local_tmp~/.ansible/tmp 管理节点的执行路径;在ansible管理端本地也会有这个一个文件,将一些功能模块放进去,来执行相应的操作。8#forks=5#定义并发处理的进程数量,通俗的讲就是定义能有多少个进程同时工作,这个需要根据主机的性能和被管理的节点数量来控制。9#poll_interval=15#轮训的间隔10#sudo_user=root#sudo使用的默认用户,默认是root11#ask_sudo_pass=True#是否需要用户输入sudo密码12#ask_pass=True#是否需要用户输入连接密码13#remote_port=22#指定连接对端节点的管理端口,默认是2214#module_lang=C#这是默认模块和系统之间通信的计算机语言,默认为’C’语言.15#host_key_checking=False#跳过ssh首次连接提示验证部分,False表示跳过,推荐去掉注释16#timeout=10#设置SSH连接的超时时间17#module_name=command#指定ansible默认的执行模块18#nocolor=1#默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:19 #private_key_file=/path/to/file.pem 在使用ssh公钥私钥登录系统时候,使用的密钥路径。2021ssh-为了避免Ansible下发指令时输入目标主机密码,使用SSH免密登录。使用ssh-keygen与ssh-copy-idssh-keygensh-copy-id来下发生成的公钥。在上创建密钥,执行ssh-keygen-trsa,有询同直接按回车键即可。在管理节点上创建密钥,执行ssh-keygen-trsa[root@ansi_manager~]#ssh-keygen-trsaGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):回车Createddirectory'/root/.ssh'.Enterpassphrase(emptyfornopassphrase):回车Entersamepassphraseagain:回车Youridentificationhasbeensavedin/root/.ssh/id_rsa.Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.Thekeyfingerprintis:SHA256:qwSaZVnlAP1tBX7Z8dK9M7Wk6ReSo27cBQuzYqZ7CfUroot@ansi_managerThekey'srandomartimageis:131314151617181920212223242526272829+[RSA2048]+|||||||||.o . |.+. .o+.|oo.=|o ..o+.=.+|=S..+*o*|=..=Eo.o.+|o.*+|.oo.o.. |..o..|+[SHA256]+在/root/.ssh下生成一对密钥,其中id_rsa为私钥id_rsa.pub为公钥.[root@ansi_manager~]#ll/root/.sshtotal8-rw1rootroot1679Feb2315:23id_rsa-rw-r--r--1rootroot 399Feb2315:23id_rsa.pub下发密钥就是把管理节点的公钥id_rsa.pub下发到被管理节点上用户下的.ssh目录,并重命名为authorized_keys,且权限值为400.这些只要执行ssh-copy-id命令即可完成。在管理节点上向被管理节点Node01(31)下发密钥[root@ansi_manager~]#ssh-copy-idroot@31/usr/bin/ssh-copy-id:INFO:Sourceofkey(s)tobeinstalled:"/root/.ssh/id_rsa.pub"4 Theauthenticityofhost'31(31)'can'tbeestablished.ECDSAkeyfingerprintisSHA256:jAeINGWIlFbgLhmGgK/V7kXxjuiz1UJQxFvt+oQyMmk.ECDSAkeyfingerprintisMD5:20:d7:65:18:f2:7d:76:52:1d:93:9b:2f:ba:fb:cc:f4.Areyousureyouwanttocontinueconnecting(yes/no)?yes/usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled/usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeys10 root@31'spassword:1112 Numberofkey(s)added:113Nowtryloggingintothemachine,with: "ssh'root@31'"andchecktomakesurethatonlythekey(s)youwantedwereadded.16在管理节点上向被管理节点Node02(32)下发密钥[root@ansi_manager~]#ssh-copy-idroot@32/usr/bin/ssh-copy-id:INFO:Sourceofkey(s)tobeinstalled:"/root/.ssh/id_rsa.pub"20 Theauthenticityofhost'32(32)'can'tbeestablished.ECDSAkeyfingerprintisSHA256:em+n8XDyYAc3/iApdsjOmu7YSkmEowa8RNkftq8KFtc.ECDSAkeyfingerprintisMD5:a5:52:dc:4d:e6:ac:d5:23:a0:f4:65:91:c6:9a:24:ea.Areyousureyouwanttocontinueconnecting(yes/no)?yes/usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled/usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeys26 root@32'spassword:2727282930313233Numberofkey(s)added:1Nowtryloggingintothemachine,with:"ssh'root@32'"andchecktomakesurethatonlythekey(s)youwantedwereadded.[root@ansi_manager~]#sshNode02(32),无需密码,可直接登录[root@ansi_manager~]#sshroot@32Lastlogin:TueFeb2314:50:102021from[root@node02~]#[root@node02~]#exitlogoutConnectionto32closed.sshNode01(31),无需密码,可直接登录[root@ansi_manager~]#sshroot@31Lastlogin:TueFeb2314:50:032021from[root@node01~]#[root@node01~]#exitlogoutConnectionto31closed.12345678910111213141516Ansible快速入门Ansible安装完成之后,初步体验两个小场景:主机连通性测试和远程执行命令,体会一下Ansible的便捷、强大。Ansible主要指令:1123456789/usr/bin/ansible/usr/bin/ansible-doc/usr/bin/ansible-galaxy/usr/bin/ansible-playbook/usr/bin/ansible-pull/usr/bin/ansible-vault/usr/bin/ansible-console#主程序,临时命令执行工具#查看配置文档,模块功能查看工具下载/上传优秀代码或Roles模块的官网平台#定制自动化任务,编排剧本工具#远程执行命令的工具#文件加密工具#基于Console界面与用户交互的执行工具常用的是/usr/bin/ansible和/usr/bin/ansible-playbook主机连通性测试/etc/ansible/hosts为了使用Ansible,第一步需要修改主机与组配置,默认的配置文件为/etc/ansible/hosts123#ansible配置文件/etc/ansible/hosts[root@ansi_manager~]#ll/etc/ansible/total244-rw-r--r--1rootroot19985Jan2505:08ansible.cfg#主配置文件,配置5ansible工作特性-rw-r--r--1rootroot1016Jan2505:08hosts#主机清单6drwxr-xr-x2rootroot6Jan2505:08roles#存放角色的目录7webservers在hosts中添加两台主机的IP地址,同时定义一个 组包含这两个IP地址,内容如下:webservers[webservers][webservers]3132[root@ansi_manager~]#vim/etc/ansible/hosts313212345678使用ping模块对单台主机进行ping操作对单台主机进行ping操作[root@ansi_manager~]#ansible31-mping3 31|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },"changed":false,"ping":"pong"9 }10使用ping模块对webservers组进行ping操作1 1 [root@ansi_manager~]#ansiblewebservers-mping2 31|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"5 },"changed":false,"ping":"pong"8 }9 32|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"12 },"changed":false,"ping":"pong"15 }16远程执行命令:在被管理节点上批量执行命令在用户homel录下创建一个资源清单文件hosts112345678910当前目录为/root,在/root目录下,新建一个hosts文件[root@ansi_manager~]#pwd/root在/root目录下,新建一个hosts文件[root@ansi_manager~]#vimhosts[webservers]3132111112131415161718192021#获取webservers组中被管理节点的主机名-m指定使用的模块-a指定要执行的命令-i指定资产文件.Ansible会默认读取/etc/ansible/hosts文件中配置的远程服务器列表[root@ansi_manager~]#ansible-ihostswebservers-mshell-a'hostname'31|CHANGED|rc=0>>node0132|CHANGED|rc=0>>node02项目3Inventory资产项目3Inventory资产(1)静态资产(2)资产变量(3)资产内置变量在Ansible中,将可管理的服务器的集合称为Inventory。因此,Inventory管理便是服务器管理(主机清单)。在大规模的配置管理工作中需要管理不同业务的不同主机,这些主机的信息都存放在Ansible的Inventory组件中。在工作中配置部署的主机必须先存放在Inventory中,这样才能使用Ansible对它进行操作。默认Ansible的Inventory放在文件/etc/ansible/hosts。还可以通过ANSIBLE_HOSTS环境变量指定或运行ansible和ansible-playbook时用-i参数临时设置。在Ansible中,常用的有2种方式制定hosts文件。默认读取/etc/ansible/hosts文件;-i指定hosts文件;(1)静态资产Ansible的资产分为静态资产和动态资产。静态资产本身是一个文本文件,一个格式类似INI的文件。默认的资产文件是/etc/ansible/hosts定义主机和主机组添加完主机和主机组后,就可以使用ansible命令针对这些主机进行操作和管理了。主机(host)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般多使用IP地址。自定义资产[root@ansi_manager~]#catinventory.ini345631登录密码32单独定义一个主机,由于配置了SSH免密登录,不需要指定SSH33ansible_ssh_pass='123456'定义一个主机,使用Inventory内置变量定义了SSH登录密码78934ansible_ssh_pass='123456'10111213[webservers]下由两台主机3132中括号定义一个主机组,webservers是主机组名该主机组[db]中括号定义一个主机组,db是主机组名14192.168.1.[241:243]43db中6台主机从41到151617[db:vars]ansible_ssh_pass='123456'定义db组主机的SSH登录密码18181920212223把一个组作为另一个组的子成员[docker:children]dbwebservers定义一个docker组,它有2个子组db和webserver验证资产##列出某个主机组的资产[root@ansi_manager~]#ansiblewebservers-iinventory.ini--list-hostshosts(2):3132[root@ansi_manager~]#ansibledocker-iinventory.ini--list-hostshosts(5):4142433132#列出所有资产[root@ansi_manager~]#ansibleall-iinventory.ini--list-hostshosts(7):32333441424331123456789101112131415161718192021222324(2)资产变量资产变量分为主机变量和组变量,分别针对资产中的单个主机和主机组。主机变量以下资产中,定义了2个主机变量user和port此变量只针对31这台服务器有效。[root@ansi_manager~]#vimhostvars[webservers]4 31user=tomport=88885 32验证11234567#获取变量的值[root@ansi_manager~]#ansible31-ihostvars-mdebug-a"msg='{{user}}{{port}}'"31|SUCCESS=>{"msg":"tom8888"}3132主机无效8 8 [root@ansi_manager~]#ansible32-ihostvars-mdebug-a"msg='{{user}}{{port}}'"9 32|FAILED!=>{10 "msg":"Thetaskincludesanoptionwithanundefinedvariable.Theerrorwas:'user'isundefined"11 }12131415161718192021#通过对组的操作,得到相同的结果[root@ansi_manager~]#ansiblewebservers-ihostvars-mdebug-a"msg='{{user}}{{port}}'"32|FAILED!=>{"msg":"Thetaskincludesanoptionwithanundefinedvariable.Theerrorwas:'user'isundefined"}31|SUCCESS=>{"msg":"tom8888"}主机组变量在以下资产中,定义一个组变量home。此变量针对webservers这个主机组中的所有主机有效[webservers:vars][webservers:vars]home="/home/tom"[root@ansi_manager~]#vimhostgroupvars[webservers]31user=tom3212345678验证home是webservers的组变量,针对组中的所有主机有效[root@ansi_manager~]#ansiblewebservers-ihostgroupvars-mdebug-a"var=home"3 31|SUCCESS=>{4 "home":"/home/tom"5 }6 32|SUCCESS=>{7 "home":"/home/tom"8 }主机变量VS主机组变量主机变量和主机组变量重名,谁优先?[webservers:vars][webservers:vars]user=john[root@ansi_manager~]#vimhost_group_vars[webservers]31user=tom321234567验证user31user优先于userer"er""var=us|SUCCESS=>{"user":"tom"}|SUCCESS=>{"user":"john"}23456781 [root@ansi_manager~]#ansiblewebservers-ihost_group_vars-mdebug-a(3)资产内置变量ansible_为前缀1名称默认值描述2ansible_ssh_host主机的名字SSH目的主3机名或IPansible_ssh_port22SSH目的端口4ansible_ssh_user用的用户名rootSSH登录使5ansible_ssh_pass使用的密码noneSSH认证所6ansible_connection用何种连接模式连接到主机smartansible使7ansible_ssh_private_key_file使用的私钥noneSSH认证所8ansible_shell_typesh命令所使用9的shellansible_python_interpreter/usr/bin/python主机上的python解释器项目4Ansible常用模块ad-hoc命令ad-hoc是指ansible下执行一条命令,并且不需要保存命令。ad-hoc所有的命令都要依赖于模块,默认ansible里有很多自带的模块,例如:command,raw,shell,file,cron等,可通过“ansible-hoc-l”ad-hoc命令在使用时都用ansibleansiblehost2-mcommand-adate,这里的ansiblead-hoc命令。常用的ansible选项参数:-m-m模块名:指定要执行的模块的名称,如果不指定-m选项,默认是command模块。-a命令:指定执行模块对应的参数选项。SSH登录的密码而不是基于密钥的验证,小写ksu或sudo操作时需要的认证密码,大写K-b:表示提升权限操作。新版ansible才有的一个选项操作。--become-method:指定提升权限的方法,常用的有sudo和su,默认是sudo。--become-user:指定执行sudo或su命令时要切换到哪个用户下,默认是root用户。-BSECONDS:后台运行超时时间-C:测试一下会改变什么内容,不会真正去执行,主要用来测试一些可能发生的变化-fFORKS,:设置ansible并行的任务数。默认值是5-iINVENTORY:指定主机清单文件的路径,默认为/etc/ansible/hosts。。-h:查看帮助,关于ad-hoc的一些选项的详细参数执行格式:1 1 ansible主机或组-m模块名-a模块参数ansible参数23 主机和组:是在`/etc/ansible/hosts`里或通过-i参数进行指定的部分,这里可以用主机名/IP/域名/all,当然动态Inventory使用的 是脚本从外部应用里获取的主机。45 模块名:可以通过ansible-doc-l查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查 看/etc/ansible/ansible.cfg的“#module_name=command"部分,默认模块可以在该配置文件中进行修改;67 模块参数:可以通过“ansible-doc模块名查看具体的用法及后面的参数;89 ansible参数:可以通过ansible命令的帮忙信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。Command&shell模块command模块包含如下选项:creates:后跟文件名,文件名后再跟命令。当该文件存在,则该命令不执行,反之,则执行。一般用于检测服务有没有开启。free_form:要执行的Linux指令chdir:在执行指令之前,先切换到该指定的目录removes:后跟文件名,文件名后再跟命令,当该文件存在时,则该选项执行,反之,不执行。注意:command模块的执行,在远程主机上,需要有python环境的支持。Command-a模块通过 跟上要执行的命令可以直接执行,但命令里如果有带有特殊字符(“<“,Command-a“|”,“&”等)那么则执行不成功。首先确定资产文件[root@ansi_manager~]#cathosts[webservers]4 315 3267chdir:在执行指令之前,先切换到该指定的目录chdir先切换进了/etc/selinuxpwd命令,所以返回结果为/etc/selinux。[root@ansi_manager~]#ansiblewebservers-ihosts-mcommand-a"chdir=/etc/selinuxpwd"32|CHANGED|rc=0>>/etc/selinux31|CHANGED|rc=0>>/etc/selinux23456789101 在ansibleCommand,在被管理节点上切换目录到/etc/selinux,在使用pwd输出当前目录create:后跟文件名,文件名后再跟命令。当该文件存在,则该命令不执行,反之,则执行。一般用于检测服务有没有开启。跳过,原因是/tmp/text文件存在skipped,since/tmp/textexists#再执行,现在/tmp/text文件已经存在,所以不执行date命令[root@ansi_manager~]#ansible31-a'creates=/tmp/textdate'31|SUCCESS|rc=0>>#远程在/tmp目录下创建一个/tmp/text文件测试[root@ansi_manager~]#ansible31-a'touch/tmp/text'31|CHANGED|rc=0>>查看text这个文件是否存在。不存在就执行date./tmp/text文件是不存在的,所以执行了date命令[root@ansi_manager~]#ansible31-a'creates=/tmp/textdate'31|CHANGED|rc=0>>WedFeb2415:44:19CST2021[root@ansi_manager~]#123456789101112131415remove:后跟文件名,文件名后再跟命令,当该文件存在时,则该选项执行,反之,不执行112345678[root@ansi_manager~]#ansible31-a'removes=/tmp/textdate'31|CHANGED|rc=0>>WedFeb2415:50:54CST2021[root@ansi_manager~]#ansible31-a'removes=/tmp/tttttdate'31|SUCCESS|rc=0>>skipped,since/tmp/tttttdoesnotexist跳过,原因是/tmp/ttttt文件不存在Shell模块和Command模块用法一致,不过shell模块执行命令时候使用的是/bin/sh,所以可以使用任何命令command模块:无法在远端执行命令的参数中加入*、|、等特殊符号,shell3root687910Feb23?00:00:00/usr/sbin/sshd-D4root706926879215:54?00:00:00sshd:root@pts/05root7076170756015:54pts/000:00:00/bin/sh-cps-ef|grep6sshdroot7076370761015:54pts/000:00:00grepsshd71 [root@ansi_manager~]#ansible1 [root@ansi_manager~]#ansible31-mshell-a"ps-ef|grepsshd"2 31|CHANGED|rc=0>>8 [root@ansi_manager~]#ansible31-mshell-a"ls-l/tmp/p*"9 31|CHANGED|rc=0>>-rw-r--r--.1rootroot0Feb2314:05/tmp/packaging.log-rw-r--r--.1rootroot0Feb2314:05/tmp/program.log[root@ansi_manager~]#13脚本模块):是将管理端的shell脚本拷贝到被管理的远程主机上执行,其原理是先将shell复制python环境。yumyum-yinstallhttpdsystemctlstarthttpd#授予执行权限[root@ansi_manager~]#chmodu+xinstall.sh#在管理节点上编写一个shell脚本[root@ansi_manager~]#viminstall.sh#!/bin/bash12345678910脚本install1.sh在管理节点上,script31主机中,然后执行这个脚本,同时,将执行的输出日志文件保存在远程主机对应的路径/tmp/install.log下。1 1 [root@ansi_manager~]#ansible31-mscript-a'install.sh>/mnt/install.log'2 31|CHANGED=>{3 "changed":true,4 "rc":0,"stderr":"Sharedconnectionto31closed.\r\n","stderr_lines":["Sharedconnectionto31closed."8 ],"stdout":"warning:/var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm:HeaderV3RSA/SHA256Signature,keyIDf4a80eb5:NOKEY\r\nImportingGPGkey0xF4A80EB5:\r\nUserid :\"CentOS-7Key(CentOS7OfficialSigningKey)<security@>\"\r\nFingerprint:6341ab2753d78a78a7c27bb124c6a8a7f4a80eb5\r\nPackage :centos-release-7-6.1810.2.el7.centos.x86_64(@anaconda)\r\nFrom :/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\r\n","stdout_lines":["warning:/var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm:HeaderV3RSA/SHA256Signature,keyIDf4a80eb5:NOKEY","ImportingGPGkey0xF4A80EB5:","Userid :\"CentOS-7Key(CentOS7OfficialSigningKey)<security@>\"",14 "Fingerprint:6341ab2753d78a78a7c27bb124c6a8a7f4a80eb5","Package :centos-release-7-6.1810.2.el7.centos.x86_64(@anaconda)","From :/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7"17 ]18 }19在管理节点上查询被管节点的httpd服务状态[root@ansi_manager~]#ansible31-mcommand-a'systemctlstatushttpd'22 31|CHANGED|rc=0>>●httpd.service-TheApacheHTTPServerLoaded:loaded(/usr/lib/systemd/system/httpd.service;disabled;vendorpreset:disabled)Active:active(running)sinceWed2021-02-2416:20:12CST;4min56sagoDocs:man:httpd(8)man:apachectl(8)MainPID:72118(httpd)Status:"Totalrequests:0;Currentrequests/sec:0;Currenttraffic: 0B/sec"Tasks:6CGroup:/system.slice/httpd.service├─72118/usr/sbin/httpd-DFOREGROUND├─72132/usr/sbin/httpd-DFOREGROUND├─72133/usr/sbin/httpd-DFOREGROUND├─72134/usr/sbin/httpd-DFOREGROUND├─72135/usr/sbin/httpd-DFOREGROUND└─72136/usr/sbin/httpd-DFOREGROUND38Feb2416:19:47node01systemd[1]:StartingTheApacheHTTPServer...Feb2416:20:07node01httpd[72118]:AH00558:httpd:Couldnotreliablydeterminetheserver'sfullyqualifieddomainname,usingfe80::e8:8f86:ce10:306.Setthe'ServerName'directivegloballytosuppressthismessageFeb2416:20:12node01systemd[1]:StartedTheApacheHTTPServe4243 在被管节点31上[root@node01~]#tail/mnt/install.logVerifying :apr-util-1.5.2-6.el7.x86_645/54647 Installed:48 httpd.x86_640:2.4.6-97.el7.centos4950 DependencyInstalled:515152535455apr.x86_640:1.4.8-7.el7httpd-tools.x86_640:2.4.6-97.el7.centosapr-util.x86_640:1.5.2-6.el7mailcap.noarch0:2.1.41-2.el7Complete!file模块file模块主要用于远程主机上的文件操作,file模块包含如下选项:,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no/目录的属组/目录的权限/目录的属主path:必选项,定义文件/目录的路径yes。src:要被链接的源文件的路径,只应用于state=link的情况state=link的情况statedirectory:表示目录,如果目录不存在,则创建目录。link:创建软链接hard:创建硬链接absent:删除目录、文件或者取消链接文件。在被管主机创建目录或者文件-m-m表示指定模块为file模块,-a表示后面跟参数,path定义对端创建目录的路径以及名称,state主要是用于定义path路径是目录还是文件。创建目录state=directory;创建文件,state=touch创建目录[root@ansi_manager~]#ansible31-mfile-a"path=/mnt/test_dirstate=directory"3 31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },7 "changed":true,8 "gid":0,9 "group":"root",10 "mode":"0755","owner":"root","path":"/mnt/test_dir",13 "size":6,14141516171819202122"state":"directory","uid":0}[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total0drwxr-xr-x2rootroot6Feb2417:37test_dir[root@ansi_manager~]#[root@ansi_manager[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total0drwxr-xr-x2rootroot6Feb2417:37test_dir-rw-r--r--1rootroot0Feb2417:41test_file#创建文件[root@ansi_manager~]#ansible31-mfile-a"path=/mnt/test_filestate=touch"31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":true,"dest":"/mnt/test_file","gid":0,"group":"root","mode":"0644","owner":"root","size":0,"state":"file","uid":0}12345678910111213141516171819202122给已有目录/文件、修改属主,属组,权限pathpath指定要修改的目录,owner指定属主,group指定属组,mode 后跟权限位,recurse表示递归此目录下的所有文件的属主属组。如果是修改文件的权限,最后去掉recurse选项,因为此选项只针对于目录文件。修改目录[root@ansi_manager~]#ansible31-mfile-a"path=/mnt/test_dirowner=nobodygroup=nobodymode=0644recurse=yes"3 31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },7 "changed":true,8 "gid":99,99101112131415161718"group":"nobody","mode":"0644","owner":"nobody","path":"/mnt/test_dir","size":6,"state":"directory","uid":99}[root@ansi_manager~]#ansible31-mcommand-a"ls-l1920212223/mnt/test_dir"total031|CHANGED|rc=0>>[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total0drw-r--r--2nobodynobody6Feb2417:37test_dir-#24 -rw-r--r--1root root 0Feb2417:41test_file22#22#rw-r--r--1nobodynobody0Feb2417:41test_file[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total0drw-r--r--2nobodynobody6Feb2417:37test_dir192021修改文件[root@ansi_manager~]#ansible31-mfile-a"path=/mnt/test_fileowner=nobodygroup=nobodymode=0644"3 31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },7 "changed":true,8 "gid":99,9 "group":"nobody",10 "mode":"0644","owner":"nobody","path":"/mnt/test_file",13 "size":0,14 "state":"file",15 "uid":9916 }1718删除文件[root@ansi_manager~]# ansible31-mfile-a"path=/mnt/test_filestate=absent"3 31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },"changed":true,"path":"/mnt/test_file",9910111213"state":"absent"}1415161718192021222324252627#删除目录[root@ansi_manager~]# ansible31-mfile-a"path=/mnt/test_dirstate=absent"31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":true,"path":"/mnt/test_dir","state":"absent"}#查看[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total0Copy模块copy模块主要用于复制文件到远程主机。directory_mode:递归的设定目录的权限,默认为系统默认权限yes,则强制覆盖,如果为no,则只有yesothers:所有的file模块里的选项都可以在这里使用src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”rsync。将文件复制到远程主机srcsrc是在ansible管理端的本地文件,dest后跟的是远程复制过来的文件路径,backup是如果这已经有一样的文件名称了,那么复制过来之前,先把这个文件做备份,然后再复制到本地。将文件复制到远程主机[root@ansi_manager~]#ansible31-mcopy-a"src=/etc/sudoersdest=/mnt/sudoersowner=rootgroup=rootmode=644backup=yes"3 31|CHANGED=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"6 },7 "changed":true,8 "checksum":"e683ad5e5d8d7112d14924c11c98be7bf2ef4918",9 "dest":"/mnt/sudoers",10 10 "gid":0,11 "group":"root",12 "md5sum":"1b134d95a4618029ff962a63b021e1ca",13 "mode":"0644",14 "owner":"root",15 "size":4328,16 "src":"/root/.ansible/tmp/ansible-tmp-1614160663.29-72530-25460666797697/source",17 "state":"file",18 "uid":019 }2021222324252627#查看[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>total8-rw-r--r--1rootroot4328Feb2417:57sudoers2829303132333435363738394041424344#验证文件是否远程备份过去有没有误差,'visudo-cf%s'。这个语法可以检测。[root@ansi_manager~]#ansible31-mcopy-a"src=/etc/sudoersdest=/mnt/sudoersvalidate='visudo-cf%s'"31|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":false,"checksum":"e683ad5e5d8d7112d14924c11c98be7bf2ef4918","dest":"/mnt/sudoers","gid":0,"group":"root","mode":"0644","owner":"root","path":"/mnt/sudoers","size":4328,"state":"file","uid":0}将目录复制到远程主机复制目录与文件差别,复制文件是将本地文件复制到了指定远程主机的文件配置里,复制目录是直接将父目录的名称以及所包含的子目录所有内容都复制过去。##`directory_mode`是指将该目录以及该目录下的所有文件权限递归都修改。#下面两条命令都是复制目录到远程主机,区别在于src指定的路径跟不跟“/”,#第一条命令不加“/”,表示yum这个目录下的所有内容包含yum目录都copy过去。在对端mnt下可直接看到yum这个目录。而src后指定路径跟“/”yum目录下的内容,而不包含yum目录本身。在对端abc这个文件下就有了管理端yum目录下的所有文件,但是不包含yum。5src指定的路径不跟“/“,表示yum这个目录下的所有内容包含yum目录都copy过去[root@ansi_manager~]#ansible31-mcopy-a"src=/etc/yumdest=/mntowner=rootgroup=rootdirectory_mode=644"8 31|CHANGED=>{9 "changed":true,10 "dest":"/mnt/",16total817drw-r--r--6rootroot100Feb2418:05abc18-rw-r--r--1rootroot4328Feb2417:57sudoers19drw-r--r--6rootroot100Feb2418:04yum2030total831drw-r--r--6rootroot100Feb2418:05abc32-rw-r--r--1rootroot4328Feb2417:57sudoers33drw-r--r--6rootroot100Feb2418:04yum34353637[root@ansi_manager~]#ansible31-m/mnt/abc"31|CHANGED|rc=0>>total41112131415"src":"/etc/yum"1112131415"src":"/etc/yum"}#查看[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>#212223242526272829src指定的路径跟“/“yum目录下的内容,而不包含yum目录本身。在对端abc这个文件下就有了管理端yum目录下的所有文件,但是不包含yum[root@ansi_manager~]ansible31-mcopy-a"src=/etc/yum/dest=/mnt/abcowner=rootgroup=rootdirectory_mode=644"31|CHANGED=>{"changed":true,"dest":"/mnt/abc/","src":"/etc/yum/"}[root@ansi_manager~]#ansible31-mcommand-a"ls-l/mnt"31|CHANGED|rc=0>>command-a"ls-l38drw-r--r--2rootroot6Feb2418:05fssnap.d39drw-r--r--2rootroot54Feb2418:05pluginconf.d40drw-r--r--2rootroot26Feb2418:05protected.d41drw-r--r--2rootroot37Feb2418:04vars42-rw-r--r--1rootroot444Feb2418:04version-groups.conf43该模块用于从远程某主机获取(复制)文件到本地。有两个选项:dest:用来存放文件的目录src:在远程拉取的文件,并且必须是一个file,不能是目录31/data目录新建一个hello.txt文件[root@node01~]#mkdir/data[root@node01~]#touch/data/hello.txt45678931的/data/hello.txt/data目录[root@ansi_manager~]#ansible31-mfetch-a'src=/data/hello.txtdest=/data'31|CHANGED=>{"changed":true,"checksum":"da39a3ee5e6b4b0d3255bfef95601890afd80709",1010111213141516171819202122232425262728293031323334"dest":"/data/31/data/hello.txt","md5sum":"d41d8cd98f00b204e9800998ecf8427e","remote_checksum":"da39a3ee5e6b4b0d3255bfef95601890afd80709","remote_md5sum":null}#在管理节点上查看[root@ansi_manager~]#ll/data/total0drwxr-xr-x3rootroot18Feb2509:4431[root@ansi_manager~]#ll/data/31/total0drwxr-xr-x2rootroot23Feb2509:44data[root@ansi_manager~]#ll/data/31/data/total0-rw-r--r--1rootroot0Feb2509:44hello.txt#看一下目录树[root@ansi_manager~]#cd/data/[root@ansi_managerdata]#tree.└──31└──data└──hello.txtfind模块find命令用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。find下面的 模块也可以帮助我们在被管理主机中查找符合条件的文件,就像find命令一样.findget_checksumget_checksum当有符合查找条件的文件被找到时,会同时返回对应文件的sha1校验码指定在哪个目录中查找文件,可以指定多个路径用逗号隔开是否为递归子目录查找文件,参数有两个选项yes/no是否查找隐藏文件,当hidden=yes才会查找隐藏文件指定查找文件的类型,可指定any、directory、file、link四种指定需要查找文件的名称,想要使用python正则去匹配文件需要使用use_regex=yes是否启用python正则来查找文件,两种选项yes/no根据文章内容查找文件,此参数的值为一个正则表达式指定文件间隔时间,可使用单位有秒(s)、分(m)、时(h)、天(d)、星期(w)根据时间范围查找文件,文件时间属性有三个时间种类,atime、ctime、mtime根据文件的大小来查找,可以使用的单位有t、g、m、k、b常用参数:pathsrecursehiddenfile_typepatternsuse_regexcontainsageage_stampsize12345678910111213查询远程主机中/etc目录下,包含passwd字符串的文件,隐藏文件会被忽略,不会进行递归查找.1 1 [root@ansi_manager~]#ansible31-mfind-a'paths=/etccontains="passwd"'2 31|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"5 },6 "changed":false,"examined":279,"files":[9 {10 "atime":1614218006.2772548,11 "ctime":1614056932.6650507,12 "dev":64768,13 "gid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论