- Ansible介绍:
- Ansible 是一个配置管理系统,当下最流行的批量自动化运维工具之一,它是一款开源的自动化工具,基于Python开发的配置管理和应用部署的工具。
- Ansible 是基于模块工作的,它只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Ansible的模块
- Ansible的特点:
- 它无需Agent的存在,不需要在客户端上安装客户端软件,并非C/S软件,它是基于SSH协议来远程控制主机。
- 安装后不需要启动服务
- 依赖大量的Python模块扩展功能
- 基于模块工作。可使用任意语言开发
- 使用语言定制剧本playbook
- ansible的大多数模块都具有幂等性
- Ansible的优点:
- 轻量级,无需在客户端上安装agent。
- 批量任务执行可以写成脚本,而且不用分发到远程就可以执行
- 使用python编写,维护更简单
- 支持sudo
- Ansible基础架构:
- 连接插件(connecter plugins):用来连接主机,连接被管理端
- 核心模块(core modules):连接主机,实现操作,依赖于具体模块来执行
- 自定义模块:用户自己开发的功能模块
- 剧本(playbook):将多个任务组合成一个剧本,由ansible自动批量执行
- 主机清单(host inventory):定义ansible管理的客户端主机范围
- 调用模块返回颜色显示:
- 黄色 代表更改成功
- 绿色 代表没有更改
- 深红色 代表错误
- 亮紫色 代表警告
- Ansible的命令格式:
- ansible 主机清单名 -m 调用的模块 -a 动作命令
- Ansible 目录结构:
- cd /etc/ansible/
- ├── ansible.cfg #ansible的配置文件,一般无需修改
- ├── hosts #ansible的主机清单,用于存储需要管理的远程主机的相关信息
- └── roles/ #公共角色目录
- ├── ansible.cfg #ansible的配置文件,一般无需修改
- cd /etc/ansible/
- Ansible环境部署:
- 环境准备:管理端:192.168.8.5
- 被管理端:192.168.8.6(WEB)
- 被管理端:192.168.8.7(NFS)
- 被管理端:192.168.8.8(rsync)
- 环境拓扑图:
- 实验步骤:
- 建议将每台服务器的主机名更改为对应的主机名
- 8.5:安装ansible
- 先配置网络源(epel源)这里使用阿里源做演示(跳过)
- 直接使用yum安装即可:
- yum -y install ansible
- 查看版本:
- ansible --version
- 配置清单:
- vim /etc/ansible/hosts(ansible的主机清单,用于存储需要管理的远程主机的相关信息)
- 添加以下内容(中括号内为组名):
- [web]
- 192.168.8.6
- [nfs]
- 192.168.8.7
- [rsync]
- 192.168.8.8
- [benet:children](可以集中管理上面的三个组)
- web
- nfs
- rsync
- 添加以下内容(中括号内为组名):
- vim /etc/ansible/hosts(ansible的主机清单,用于存储需要管理的远程主机的相关信息)
- 配置对另外三台主机的免密访问:
- ssh-keygen -t rsa
- ssh-copy-id root@192.168.8.6
- ssh-copy-id root@192.168.8.7
- ssh-copy-id root@192.168.8.8
- 列出所有模块:ansible-doc --list
- 查看ansible模块帮助:ansible-doc yum
- 使用模块举例:
- 1.command模块:仅支持简单语法命令,但语句中不能包含管道符等复杂元素
- 为web主机创建一个张三用户
- ansible web -m command -a "useradd zhangsan"
- 黄色代表命令执行更改成功
- 为web主机创建一个张三用户
- 2.shell模块:command升级版,支持复杂语句,但不支持别名
- 为张三设置一个密码:
- ansible web -m shell -a "echo 123 | passwd --stdin zhangsan"
- 此时动作语句中涉及到管道符(特殊符号)所以要使用shell模块
- 为张三设置一个密码:
- 3.yum模块:在远程主机上安装与卸载软件包
- 为web主机安装http服务
- ansible web -m yum -a "name=httpd state=installed"
- 命令解释:
- name:安装的软件包名称,多个软件“,”,分割
- state:服务状态:
- installed,present (安装软件包)
- removed,absent (卸载软件包)
- latest (安装最新软件包)
- 为web主机安装http服务
- 4.copy模块:用于复制指定主机文件到远程主机
- 将本机hosts文件传输至其他三台主机上:
- ansible benet -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes"
- copy模块常用参数:
- dest:指出复制文件的目标及位置,使用绝对路径。
- src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
- mode:指出复制文件时,目标文件的权限
- owner:指出复制文件时,目标文件的属主
- group:指出复制文件时,目标文件的属组
- content:指出复制到目标主机上的内容,不能与src一起使用
- backup:覆盖到目标文件前,是否提前备份
- 将本机hosts文件传输至其他三台主机上:
- 使用ansible远程配置rsync服务:
- 8.5 :修改rsync配置文件,并传到rsync服务器上:
- mkdir /etc/ansible/conf
- cd /etc/ansible/conf/
- cp /etc/rsyncd.conf ./
- vim rsyncd.conf
- 添加以下内容:
- 将文件传输至8.8主机上:
- ansible rsync -m copy -a "src=rsyncd.conf dest=/etc/rsyncd.conf backup=yes"
- 远程启动rsync服务(此时用到systemd模块):
- ansible rsync -m systemd -a "name=rsyncd state=restarted"
- 创建rsync的源目录(此时用到file 模块):
- ansible rsync -m file -a "path=/backup owner=root group=root recurse=yes mode=777"
- 配置rsync服务器的密码文件:
- ansible rsync -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password owner=root group=root mode=600"
- 查看密码文件是否创建成功:
- ansible rsync -m shell -a "cat /etc/rsync.password"
- 配置所有服务器的rsync连接密码文件:
- ansible benet -m copy -a "content='1' dest=/etc/server.pass owner=root group=root mode=600"
- 测试:备份web的httpd.conf配置文件:
- ansible web -m shell -a "rsync -avz --password-file=/etc/server.pass /etc/httpd/conf/httpd.conf rsync_backup@192.168.8.8::backup"
- 实时监控web服务器的网页根目录,有改动及时同步rsync
- 添加及时监控软件,实现监控:
- mkdir /etc/ansible/tools
- cd /etc/ansible/tools/
- 上传sersync目录(及时监控软件)
- cd /etc/ansible/tools/sersync/
- 查看两个配置文件
- 编辑配置文件:
- vim confxml.xml
- 使用copy模块将文件传输至web服务器:
- ansible web -m copy -a "src=./sersync/ dest=/usr/local/sersync mode=755"
- ansible web -m shell -a "/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml"
- 验证 :生成一个网页,将它传输给web服务器:
- echo "<h1><marquee>www.httpd.conf</marquee></h1>" > index.html
- ansible web -m copy -a "src=./index.html dest=/var/www/html/index.html"
- 查看是否同步至到了rsync服务器上:
- 此时rsync服务器的共享目录,跟随web服务器的网页根目录进行及时的变动
- 添加及时监控软件,实现监控:
- 1.command模块:仅支持简单语法命令,但语句中不能包含管道符等复杂元素
- 环境准备:管理端:192.168.8.5
- 5.service模块:
- 关闭httpd服务:ansible web -m service -a "name=httpd state=stopped"
- 注释:
- name = 服务名
- state = 指定服务运行状态
- started 开启服务
- stopped 关闭服务
- reloaded 重载服务
- restarted 重启服务
- enabled 是否开机自启
- 6.group 模块
- 在所有清单主机上创建组www,gid
- ansible all -m group -a "name=www gid=666"
- 在所有清单主机上删除组www,gid
- ansible all -m group -a "name=www gid=666 state=absent"
- 在所有清单主机上创建组www,gid
- 7.user 模块
- 在所有主机清单上创建用户www
- ansible all -m user -a "name=www"
- 在所有主机清单上创建用户www
- 8.file 模块
- 创建目录,赋予权限,更改属主属组(recurse=yes 等同于 state=directory)
- ansible rsync -m file -a "path=/cwb owner=root group=root recurse=yes mode=777"
- 创建文件(state=touch):
- ansible rsync -m file -a "path=/cwb/test.txt owner=root group=root state=touch mode=777"
- 删除文件 (state=absent)
- ansible rsync -m file -a "path=/cwb/test.txt state=absent"
- 创建目录,赋予权限,更改属主属组(recurse=yes 等同于 state=directory)
- 9.mount 模块(以nfs共享文件挂载为例)
- 先创建在nfs服务器上创建共享文件
- ansible nfs -m file -a "path=/nfs owner=root group=root recurse=yes mode=777"
- 编辑exports文件
- vim exports
- 添加: /nfs 192.168.8.0/24(rw,sync,no_root_squash)
- 将export复制到nfs服务器上:
- ansible nfs -m copy -a "src=exports dest=/etc/exports"
- 启动nfs-utils服务与rpcbind服务
- ansible nfs -m systemd -a "name=nfs state=restarted"
- ansible nfs -m systemd -a "name=rpcbind state=restarted"
- 将nfs共享目录挂载至web服务器的网页根目录下
- ansible web -m mount -a "src=192.168.8.7:/nfs path=/var/www/html fstype=nfs state=mounted"
- 注释:
- state = 挂载状态
- mounted 挂载
- unmounted 卸载
- state = 挂载状态
- 先创建在nfs服务器上创建共享文件
- 10.script 脚本模块
- 在ansible上编写任意脚本测试(这里以安装mariadb数据库的脚本为例)
- 在本机生成脚本
- cat >> /root/test.sh << EOF
- #!/bin/bash
- rm -rf /var/run/yum.pid
- yum -y install mariadb-server mariadb
- systemctl start mariadb
- systemctl enable mariadb
- mysql -uroot -e "create database hehe;"
- mysql -uroot -e "show databases;"
- EOF
- 将脚本直接运行在web服务器上(无需将脚本文件传输至web服务器)
- ansible web -m script -a "/root/test.sh"
- 在本机生成脚本
- 在ansible上编写任意脚本测试(这里以安装mariadb数据库的脚本为例)