机器办理
机器办理的东西挑选的考量能够包括以下三个方面:
- 是否简略,是否需求每台机器都布置Agent(客户端)
- 言语的挑选(Puppet/Chef vs Ansible/SaltStack)开源技能,不看官网不足以娴熟,不懂源码不足以通晓:Puppet、Chef根据Ruby开发的,Ansible、SaltStack根据Python开发的。
- 速度的挑选(Ansible vs SaltStack)Ansible根据SSH协议传输数据,SaltStack运用信息行列ZeroMQ传输数据,大规模并发的能力对于及时台-200台规模的兄弟来说,Ansible的功用也能够接受,假如一次操作上千台用salt好一些。
东西 | 言语 | 架构 | 协议 |
---|---|---|---|
Puppet | Ruby | C/S | HTTP |
Chef | Ruby | C/S | HTTP |
Ansible | Python | 无Client | SSH |
Saltstack | Python | C/S(可无Client) | SSH/ZMQ/RAET |
一般创业公司挑选Ansible 能解决大部分问题,其简略,不需求装置额定的客户端,能够从指令行来运转,不需求运用装备文件,至于比较复杂的使命,Ansible装备通过名为Playbook 的装备文件中的 YAML语法来加以处理,Playbook还能够用模板来扩展其功用。
自动化运维三剑客:
- saltstack
- pubbet
- ansible
Ansible概述
Ansible是一个根据Python开发的装备办理和运用布置东西,现在也在自动化办理领域大放异彩。它交融了许多老牌运维东西的长处,Pubbet和Saltstack能完成的功用,Ansible基本上都能够完成。
Ansible能批量装备、布置、办理上千台主机。比方以前需求切换到每个主机上履行的一或多个操作,运用Ansible只需在固定的一台Ansible操控节点上去完成一切主机的操作。
Ansible是根据模块工作的,它只是供给了一种运转结构,它本身没有完成使命的能力,真实履行操作的是Ansible的模块, 比方copy模块用于拷贝文件到长途主机上,service模块用于办理服务的发动、停止、重启等。
Ansible的四个组件
- Inventory 主机清单(主机组)
- Modules 模块
- Plugins 插件
- Playbooks 剧本(相当于脚本)

Ansible的特性
特性一:
Ansible其中一个比较明显的特性Agentless,即无Agent的存在(无代理端,即无客户端),它就像一般指令一样, 并非c/s软件,也只需在某个作为操控节点的主机上装置一次Ansible即可,一般它根据ssh衔接来操控长途主机,长途主机上不需求装置Ansible或其它额定的服务。
运用者在运用时,在服务器终端输入指令或者playbooks,会通过预定好的规则将playbook拆解为play(一个play就是一个Linux操作),再组织成ansible能够识别的使命,调用模块和插件,根据主机清单通过SSH将临时文件发给长途的客户端履行并返回结果,履行完毕后自动删去。
特性二:
Ansible的另一个比较明显的特性是它的绝大多数模块都具有幂等性(idempotence)。所谓幂等性,指的是屡次操作或屡次履行对体系资源的影响是共同的。
- 比方履行
systemctl stop xxx
指令来停止服务,当发现要停止的方针服务现已处于停止状况,它什么也不会做,所以屡次停止的结果仍然是停止,不会改动结果,它是幂等的,而systemctl restart xxx是非幂等的。
Ansible的许多模块在履行时都会先判别方针节点是否要履行使命,所以,能够放心大胆地让Ansible去履行使命,重复履行某个使命绝大多数时候不会发生任何副作用。
ansible 环境装置布置
- 办理端ansible:192.168.44.20
- 被办理端:192.168.44.30
- 被办理端:192.168.44.40
办理端装置 ansible
yum install -y epel-release //先装置 epel 源,在线源装置
yum install -y ansible
ansible常用的指令行模块
ansible <组名> -m <模块> -a <参数列表>
ansible <主机IP> -m <模块> -a <参数列表>
ansible <主机名> -a <参数列表> #不加-m指定模块默许运用command
选项解释
- -m:指定模块
- -a:指定指令
列出一切已装置的模块:ansible-doc -l


检查指定模块的描述信息和操作动作:ansible-doc -s 模块

command模块



留意:在长途主机履行指令,不支撑管道、重定向等shell的特性。

常用的参数
- chdir:在长途主机上运转指令条件前进入目录
- creates:判别指定文件是否存在,假如存在,不履行后边的操作
- removes:判别指定文件是否存在,假如存在,履行后边的操作
chdir
在长途主机上运转指令条件前进入目录


creates
判别指定文件是否存在,假如存在,不履行后边的操作。

removes
判别指定文件是否存在,假如存在,履行后边的操作

shell模块
在长途主机履行指令,相当于调用长途主机的shell进程,然后在该shell下打开一个子shell运转指令。支撑管道符号和重意向等功用。

示例1
shell模块支撑管道符号。

提取对方IP地址。

示例2:
shell模块支撑重定向功用。

cron模块
在长途主机界说使命计划。其中有两种状况(state)
- present 表明增加(能够省掉)
- absent 表明移除。

示例1
每天晚上12:30备份体系日志ansible webservers -m cron -a 'minute=30 hour=0 job="/usr/bin/co -f /var/log/messages /root/backuper/messages-$(date +%Y/%m/%d)" name="backup syslog"'

示例2
星期一到星期五,上午9点到下午5点期间,每隔半小时履行一次同步时间使命
ansible webservers -m cron -a 'minute=*/30 hour="9-17" weekday="1-5" job="/usr/sbin/ntpdate ntp.aliyum.com" name="ntp job" '


删去体系备份使命
删去backup syslog计划使命:ansible webservers -m cron -a 'name="backup syslog" state=absent'

user模块
办理用户的模块。
检查user模块包括的操作动作:ansible-doc -s user
常用参数:
参数 | 阐明 |
---|---|
name | 用户名,必选参数。 |
state=present 或 absent | 创立账号或者删去账号,present表明 创立,absent 表明删去。 |
system=yes 或 no | 是否为体系账号。(默许为体系账号) |
uid | 用户uid。 |
group | 用户基本组。 |
groups | 用户附加组。 |
shell | 默许运用的登录shell |
move_home=yes 或 no | 假如设置的家目录现已存在,是否将现已存在的家目录进行移动。 |
password | 用户的暗码,主张运用加密后的字符串。 |
comment | 用户的注释信息。 |
remove=yes 或 no | 表明当state=absent时,是否删去用户的家目录。即删去用户时,是否一同删去家目录。yes表明删去用户的家目录。 |
示例1
增加用户zhangsan:ansible webservers -m user -a 'name=zhangsan'


示例2
删去用户并删去家目录:ansible webservers -m user -a 'name=zhangsan state=absent remove=yes'


示例3
创立用户并指定UID号并增加暗码:ansible webservers -m user -a 'name=zhangsan uid=9527 shell=/sbin/nologin password=123123'

不主张运用password指定暗码,由于是明文保存,安全性低

group模块
办理用户组的模块。
留意:字符串类型的值主张加双引号,避免有空格。数字和布尔值不要加双引号
示例
创立aa组,并设置gid号为1024:ansible webservers -m group -a 'name=aa gid=1024'


创立lisi用户,设为体系用户,附加组为aa组

copy模块
用于将本地文件仿制到长途主机。
检查copy模块包括的操作动作:ansible-doc -s copy
常用参数:
参数 | 阐明 |
---|---|
src | 指出源文件的途径(位于操控节点,即办理端),能够运用相对途径或绝对途径,支撑直接指定目录,假如源是目录则方针也要是目录。 |
dest | 指出仿制文件的方针及位置,运用绝对途径,假如源是目录则方针也要是目录,假如方针文件现已存在会掩盖原有的内容。 |
mode | 指出仿制时,方针文件的权限。 |
owner | 指出仿制时,方针文件的属主。 |
group | 指出仿制时,方针文件的属组。 |
content | 指出仿制到方针主机上的内容,不能与src一同运用。 |
示例1
把本地的hosts文件仿制到长途主机:ansible webservers -m copy -a 'src=/etc/ansible/hosts dest=/opt/myhosts mode=700 owner=one'


示例2
仿制目录到长途主机:ansible webservers -m copy -a 'src=/etc/ansible dest=/opt'


示例3
输入内容到长途主机文件中,掩盖原有内容:ansible webservers -m copy -a 'content="Hello World!" dest=/opt/ansible/hosts'

file模块
为长途主机创立/删去文件或目录,设置文件属性。
主要参数如下:
参数 | 阐明 |
---|---|
path | 指定长途服务器的途径,也能够写成”dest”,”name” |
state | 状况,能够将值设定为directory表明创立目录,设定为touch表明创立文件,设定为link表明创立软链接,设定为hard表明创立硬衔接,设定为absent表明删去目录文件或链接 |
mode | 文件仿制到长途并设定权限,默许file=644,directory=755 |
owner | 文件仿制到长途并设定属主,默许为root |
group | 文件仿制到长途并设定属组,默许为root |
recurese | 递归修正 |
src | 指的是方针主机上的源文件。与copy模块不同。 |
示例1
修正文件的属主、属组、权限等

示例2
创立和删去文件、目录



示例3
创立软链接文件


假如源地址不存在,则有必要增加force=yes才能创立

hostname模块
用于办理长途主机上的主机名。

ping模块
测验长途主机的连通性。

yum模块
在长途主机上装置与卸载软件包, 需求被办理端装备好yum源。
主要的参数如下:
参数 | 阐明 |
---|---|
name | 指定装置软件包名或软件包URL |
state | 指定yum对应的方法,present(默许)、installed表明装置、latest表明装置最新版别软件包;absent、removed表明卸载。支撑多程序一同装置,用逗号隔开。 |
enablerepo | 答应从哪些库房获取软件 |
disablerepo | 制止从哪些库房获取软件 |
exclude | 排除某些软件包,例如kernel |
download_only | 仅下载软件包,不装置 |
disable_gpg_check | 不进行gpg检测 |
update_cache | 能够在装置包的一同更新yum缓存 |
示例1:装置httpd



示例2:卸载httpd

service/systemd 模块
用于办理长途主机上的服务的运转状况。
主要参数如下:
参数 | 阐明 |
---|---|
name | 指定需求操控的服务名称 |
state | 指定服务状况,其值能够为stopped、started、reloaded、restarted、status |
enabled | 指定服务是否为开机发动,yes为发动,no为不发动 |
daemon_reload | yes:重启systemd服务,让unit文件生效 |
示例
先将httpd装置回来用于试验




script 模块
完成长途批量运转本地的shell脚本。
留意:script模块不具有幂等性。所以主张用剧本来履行。
示例
在本地书写好一个脚本运用,并赋予运用权限。



留意:script模块不具有幂等性。

setup 模块
facts组件是用来收集被办理节点信息的,运用setup 模块能够获取这些信息。


总结
ansible:自动化运维东西能够完成批量办理多台(成百上千)主机,运用级别的跨主机编列东西
特点:
- 不要在被操控节点上装置客户端运用
- 通过ssh协议与被操控节点通信的
- 根据模块完成在被操控节点上履行指令操作
- 许多模块具有幂等性,完成假如屡次操作的状况没有发生改动,是不会重复履行的
ansible模块有哪些:command、shell、copy、user、scrip、yum、service、group、ping、setup、hostname、cron
指令格局
ansible 组名 -m 模块名 -a '模块参数'
-m file -a 'path=文件途径 mode =755 owner= state=file|directory|touch|link src= '
-m copy -a 'src= dest= mode= owner= group'