如何做博客网站,错乱变装wordpress,自定义wordpress的字体,wordpress登不进去一、介绍
1、定义#xff1a;
ansible是自动化运维工具#xff0c;基于Python开发#xff0c;具有批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko#xff08;框架#xff09; 开发的#xff0c;并且基于模块化工作#xff0c;本身没有批量…一、介绍
1、定义
ansible是自动化运维工具基于Python开发具有批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko框架 开发的并且基于模块化工作本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块。ansible基于ssh来和远程主机通讯不需要在远程主机上安装client/agents。
2、ansible 特点
① 部署简单只需在主控端部署Ansible环境被控端无需做任何操作没有agent。
② 默认使用SSH协议对设备进行管理。
③ 有大量常规运维操作模块可实现日常绝大部分操作。
④ 通过Playbooks剧本来定制强大的配置、状态管理。
3、ansible 任务执行模式
Ansible系统由控制主机对被管节点的操作方式可分为两类即ad-hoc和playbook
① ad-hoc点对点模式使用单个模块支持批量执行单条命令。 ad-hoc 命令是一种可以快速输入的命令相当于bash中的一句shell。
② playbook剧本模式是Ansible主要管理方式playbook通过多个task集合完成一类功能如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作作的配置文件。
二、ansible 指令
1、安装ansible
使用yum 安装
yum install epel-release -y
yum install ansible –y
2、ansible配置文件
列出配置文件rpm -qc ansible
vim /etc/ansible/ansible.cfg
① sudo_user设置默认执行命令的用户sudo_user root。
② remote_port这是指定连接的管理端口默认是22 (SSH端口)remote_port 22。
③ host_key_checking设置是否检查SSH主机的密钥。可以设置为True或Falsehost_key_checking False。
④ timeout设置SSH连接的超时间隔单位是秒timeout 60。
⑤ log_path设置log_path把Ansible系统的输出记录到日志文件中log_path /var/log/ansible.log。
3、ansible 命令格式
ansible host-pattern [-f forks] [-m module_name] [-a args]
● host-pattern 指定要执行操作的目标主机或主机集合。它可以是一个IP地址也可以是一个库存文件中定义的主机分组名称。
● [-f forks] 用于设置并发执行任务的最大进程数。
● [-m module_name] 用于指定要使用的Ansible模块Ansible模块是执行特定任务的独立单元。
● [-a args] 用于传递给指定模块的参数。
4、ansible 秘钥验证
① 生成秘钥
ssh-keygen -t rsa ② 向管理的主机发送秘钥
ssh-copy-id rootIP 三、ad-hoc点对点模块的使用
1、设置 hosts 远程被控制主机
vim /etc/ansible/hosts
定义hosts 有3类
① Ex 1未分组的主机在任何组头之前指定。
② Ex 2分组的主机。
③ Ex 3和数据库有关的服务器集合。 ping模块测试连通性ansible all -m ping
对库存文件中定义的所有主机执行操作使用的模块是 ping。 2、command 模块
(1) 介绍
-m command指定了使用的模块是 commandcommand 模块用于在远程主机上执行命令。 选项 chdir在执行命令之前先切换到该目录。 creates文件名当这个文件存在则传递给command模块的命令不执行。 removes文件名当这个文件不存在则传递给command模块的命令不执行。 (2) 实例
① ansible web -m command -a chdir/app ls
在web组中的主机执行 ls 命令执行前先切换到 /app 目录下。 ② ansible web -m command -a creates/app/f1 touch /app/f2
在web组中的主机执行 touch /app/f2 命令当 /app/f1 文件存在时则不执行。 ③ ansible web -m command -a removes/app/f1 touch /app/f2
在web组中的主机执行 touch /app/f2 命令当 /app/f1 文件不存在时则不执行。 3、shell 模块
shell模块用于在远程主机上调用shell解释器运行命令shell模块可以利用shell的功能如管道(|)、重定向、变量扩展等。
ansible web -m shell -a cat /etc/passwd |grep root 4、copy 模块
(1) 介绍
copy 模块可用于复制文件到远程主机。
用法
复制文件-a src dest
给定内容生成文件-a content dest
(2) 实例
① ansible web -m copy -a src/root/app/f3 dest/app
把控制端的 /root/app/f3 文件copy 到被控制端的 /app 下。 ② ansible web -m copy -a contenthello dest/app/f3 mode222 backupyes
将被控制端的 /app/f3 文件写入 hello修改权限为 222并执行备份操作。 5、file 模块
(1) 介绍
Ansible的file模块用于管理和操作远程主机上的文件系统对象可以方便地创建、删除、修改文件和目录属性以及管理符号链接。
创建目录-a path statedirectory
创建链接文件-a path src statelink
删除文件-a path stateabsent ● state directory创建目录。 link创建软链接。 hard创建硬链接。 touch如果文件不存在则会创建一个新的文件如果文件或目录已存在则更新其最后修改时间。 absent删除目录、文件或者取消链接文件。 (2) 实例
① ansible web -m file -a path/app/f4 statedirectory
在被控制端创建f4目录。 ② ansible web -m file -a path/app/f11 src/app/f1 statelink
被控制端的 /app/f1 创建一个软链接 f11。 6、fetch 模块
从远程某主机获取文件到本地。
dest用来存放文件的目录。
src在远程拉取的文件必须是一个file不能是目录。
ansible web -m fetch -a src/app/f1 dest/app/ 从远程获取到本地的文件会保存到以远程主机的IP 为名的目录中并且保持原文件的目录结构 7、cron 模块
(1) 介绍
cron模块是一个专门用于管理远程主机上定时任务的模块。
常见参数 name为Cron任务指定一个唯一名称用于标识和管理该任务。若定义的名字没有修改会把前一次定义的计划任务覆盖。 job指定要运行的命令或脚本是什么。 state指定状态present表示添加定时任务是默认设置absent表示删除定时任务。 minute, hour, day, month, weekday指定Cron任务执行的时间单位。 user指定Cron任务所属的用户默认是root。 backup设置为yes时在修改Cron条目前备份原始Cron配置文件。 (2) 实例
① ansible web -m cron -a nameClear the iptable minute*/5 job/sbin/iptables -F
在远程主机上执行定时任务每5分钟清空一次防火墙。 ② ansible web -m cron -a nameClear the iptable minute*/5 job/sbin/iptables -F stateabsent
删除定时任务。 8、yum 模块
(1) 介绍
yum 模块用于管理远程主机上的软件包。
常用参数 name所安装的包的名称 statepresent安装 latest安装最新的, absent 卸载软件。 disable_gpg_check是否禁止GPG checking只用于present‘ or latest’。 (2) 实例
① ansible web -m yum -a namedstat statepresent disable_gpg_checkyes
安装dstat 包忽略gpg_check。 卸载 dstat 包ansible web -m yum -a namedstat stateabsent
② 可以结合copy模块将安装包发送到远程主机再安装
ansible web -m copy -a src/root/zabbix-release-3.4-2.el7.noarch.rpm dest/app
ansible web -m yum -a name/app/zabbix-release-3.4-2.el7.noarch.rpm statepresent disable_gpg_checkyes
9、service 模块
(1) 介绍
Ansible的service模块是一个专门用于管理远程主机上系统服务的模块。它提供了对服务进行启动、停止、重启、重新加载、查询状态以及设置开机自启动等操作。
常用参数 name服务名称。 statestarted启动服务stopped停止服务restarted重启服务reloaded重载配置 enabled #设置开机启动。 (2) 实例
① 在远程主机安装nginx
ansible web -m yum -a namenginx statepresent disable_gpg_checkyes
② 开启远程主机的nginx 服务
ansible web -m service -a namenginx statestarted
③ 查询远程主机的 80 端口
ansible web -m shell -a ss -nutlp |grep 80 10、user 模块
(1) 介绍
常用参数 name指定用户名 comment用户的描述信息 group指定基本组 groups指定附加组如果指定为(groups)表示删除所有组 home指定用户家目录 shell指定默认shell state设置帐号状态不指定为创建指定值为absent表示删除 uid指定用户的uid (2) 实例
ansible web -m user -a nameBean1 uid1111 groupbean shell/bin/bash home/app/Bean 删除用户
ansible web -m user -a nameBean1 stateabsent 11、group 模块
常用参数 gid设置组的GID号 name管理组的名称 state指定组状态默认为创建设置值为absent为删除 ansible web -m group -a nametom statepresent 12、script 模块
在远程主机上执行服务器端的脚本文件。
实例
① 在服务器端编写一个脚本
vim /app/test.sh #!/bin/bash date /app/disk_total.log df -lh /app/disk_total.log ② 在远程主机上执行该脚本 ansible web -m script -a /app/test.sh 查看文件是否生成
ansible web -m command -a chdir/app ls 查看文件内容
ansible web -m shell -a cat /app/disk_total.log 13、setup 模块
facts 组件是 Ansible 用于采集远程机器设备信息的一个功能可以使用setup 模块查机器的所有facts信息。setup模块下经常使用的一个参数是filter 参数用于对facts信息进行匹配筛选。
实例查询10.1.1.60主机的全部信息
ansible 10.1.1.60 -m setup 筛选内存信息
ansible 10.1.1.60 -m setup -a filter*mem* 四、Ansible playbook 的使用
1、介绍
playbook由YMAL语言编写是ansible用于配置部署和管理被控节点的剧本。通过 playbook 的详细描述执行其中的一系列tasks可以让远端主机达到预期的状态。
执行一些简单的任务使用ad-hoc命令可以方便的解决问题但是需要大量的操作时候最好使用playbook。
playbook 方便的重用代码移植到不同的机器上。
2、语法
① 文件的第一行应该以 --- (三个连字符)开始表明YMAL文件的开始。
② 在同一行中#之后的内容表示注释。
③ YMAL中的列表元素以-开头然后紧跟着一个空格后面为元素内容。
例如 - apple - banana - orange。
④ 同一个列表中的元素应该保持相同的缩进否则会被当做错误处理。
⑤ play中hostsvariablesrolestasks等对象的表示方法都是键值中间以:分隔:后面还要增加一个空格。
3、Playbooks 配置文件的基础组件
① hosts运行指定任务的目标主机。每个playbook都必须指定hosts可以使用系统默认的/etc/ansible/hosts也可以自己编辑在运行的时候加上 -i 选项指定清单的位置即可。
② remoute_user在远程主机上执行任务的用户指定远端主机中的哪个用户来登录远端系统。
③ tasks任务列表指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块。
④ templates包含了模板语法的文本文件。
⑤ variables变量。
⑥ handlers由特定条件触发的任务当某任务的状态在运行后为changed时可通过notify通知给相应的 handlers。
4、Playbooks 的编写与执行
(1) 编写一个剧本
vim /etc/ansible/web.yml
在远程主机上安装nginx将本机上的nginx配置文件拷贝给远程主机开启nginx服务。 --- - hosts: web remote_user: root tasks: - name: yum install nginx yum: namenginx statelatest - name: copy nginx.conf copy: src/app/nginx.conf dest/etc/nginx/nginx.conf backupyes tags: reloadnginx - name: start service service: namenginx statestarted tags: startnginx tags为任务添加标签。标签可用于在执行Playbook时筛选要执行的任务例如只运行带有特定标签的任务。
检查剧本的语法
ansible-playbook /etc/ansible/web.yml --syntax-check (2) 在剧本中加入handlers 触发任务
在Ansible剧本Playbook中handlers 起着延迟执行某些特定任务的作用。一个典型的例子是配置Web服务器如果在剧本中修改了Nginx或Apache的配置文件可以编写一个handler来重启服务并在修改配置的任务后面添加notify指令指向该handler重启服务以使新配置生效。
vim /etc/ansible/web.yml handlers: - name: reload service: namenignx staterestarted (3) 在剧本中加入variables 变量
① 变量可以不定义在playbook 中直接在命令行给出。 - name: start service service: name{{ servername }} statestarted tags: start{{ servername }} ansible-playbook web.yml -e servernamenginx -t startnginx
-e servernamenginx 指定变量的值为nginx -t startnginx 执行这个标签的操作。
② 变量可以直接定义在playbook 中 --- - hosts: web remote_user: root vars: - servername: nginx tasks: - name: yum install {{ servername }} yum: name{{ servername }} statelatest - name: copy {{ servername }}.conf copy: src/app/{{ servername }}.conf dest/etc/{{ servername }}/{{ servername }}.conf backupyes notify: reload tags: reload{{ servername }} - name: start service service: name{{ servername }} statestarted tags: start{{ servername }} handlers: - name: reload service: name{{ servername }} staterestarted 执行剧本
ansible-playbook /etc/ansible/web.yml 检验查看远程主机的80端口 五、Ansible Role
1、介绍
role 是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中以层次性、结构化地组织 playbook。
● 目录结构
① 角色名
② files存放需要复制到远程主机的静态文件如证书、配置备份等。
③ handlers定义事件触发的任务 (main.yml)比如服务重启。
④ tasks包含主要执行的任务列表 (main.yml)。
⑤ templates金甲模板存放模板文件支持变量替换。
⑥ vars自定义变量。
2、编写 Role
(1) 创建目录结构
cd /etc/ansible
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo 1234 roles/nginx/files/index.html
cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2 (2) 编写任务
vim /etc/ansible/roles/nginx/tasks/main.yaml --- - name: install nginx packge yum: namenginx statelatest - name: copy index.html copy: src/etc/ansible/roles/nginx/files/index.html dest/usr/share/nginx/html/index.html - name: copy nginx.conf template template: src/etc/ansible/roles/nginx/templates/nginx.conf.j2 dest/etc/nginx/nginx.conf notify: restart nginx - name: make sure nginx service running service: namenginx statestarted enabledyes (3) 编写配置文件
vim /etc/ansible/roles/nginx/templates/nginx.conf.j2
worker_connections {{ worker_connections }}; (4) 编写变量
vim /etc/ansible/roles/nginx/vars/main.yaml
worker_connections: 1024 (5) 编写 handlers
vim /etc/ansible/roles/nginx/handlers/main.yaml --- - name: restart nginx service: namenginx staterestarted (6) 编写剧本
vim /etc/ansible/roles/site.yaml - hosts: 10.1.1.60 roles: - nginx 3、执行 Role
(1) 语法测试
ansible-playbook site.yaml --syntax-check (2) 执行
ansible-playbook /etc/ansible/roles/site.yaml