本机所讲内容
29.1 ansible 概述和运行机制
29.2 实战-安装并配置Ansible 管理节点
29.3 ansible 常见高级模块使用方法
39.4 实战-使用Playbook 批量部署多台LAMP 环境
1 ) 安装需要的安装包 安装epel 源
yum install epel-release
2 ) yum 安装Ansiable
[root@xuegod1 ~]# yum install ansible -y
3 ) 检查版本
ansiable
4 )
29.2.3 定义主机清单
1 基于端口,用户,密码定义主机清单
打开主机清单并配置
1 )
2 )
3 ) 首先登录远程的IP地址
4 ) 退出开始连接测试
192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
名字必须和hosts定制的一致
测试一下主机的联通性
5 ) [root@xuegod1 ansible]# ansible -i /etc/ansible/hosts web-servers -m ping
6 )
7 ) 生成公钥和私钥
9 )
10 ) 此时我们直接可以在 ansible 的目录中修改hosts
直接设置为ip地址
[root@xuegod63 ~]# vim /etc/ansible/hosts #在文件的最后添加以下内容
删除之前在最后添加的两行主机清单:
[web-servers]
192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
增加:
[web-servers]
192.168.24.62
192.168.24.68
11 ) 测试联通性
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m ping
检查更新时间
12 ) [root@xuegod1 ansible]# ansible -m command -a "uptime" web-servers
例3 检查用户内核
例3 添加用户节点
例5 ,将df 命令在所有节点执行后,重定向输出到本地的/tmp/command-output.txt 文件中
[root@xuegod1 ansible]# ansible -m command -a "df -Th" 'web-servers' >a.txt
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m shell -a "free -m"
例1
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m shell -a "source ~/.bash_profile && df -h | grep sda3"
例2 编写一个脚本
#! /bin/bash
date
hostname
[root@xuegod1 ansible]# vim net.sh
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m script -a "/etc/ansible/net.sh"
2 copy 模块 :实现主控端想目标主机拷贝文件,类似scp 功能
例1 : 把ansible 主机上的 /etc/hosts 文件复制到主机中机器的/tmp 目录下
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m copy -a "src=/etc/hosts dest=/tmp/ owner=root group=root mode=0777"
3 file 模块设置文件属性
可以查看和设置属性
[root@xuegod1 ansible]# ansible 'web-servers' -m file -a "path=/tmp/hosts mode=0755"
4 stat 模块获取远程文件信息
ansible -i /etc/ansible/hosts web-servers -m stat -a "path=/tmp/hosts"
5 ) [root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes"
6 yum 模块 linux 平台软件包管理
yum 模块可以提供的status 状态 latest,present installed 是按照 ,remove absent 这两个是卸载
按照php
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m yum -a "name=php state=latest"
7 cron 模块远程主机crontab 配置
例如 : 增加没30分钟执行ls /tmp
8 service 模块远程主机系统服务管理
service 模块常用参数
按照apache
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m yum -a "name=httpd state=latest"
远程启动apache
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m service -a "name=httpd state=restarted"
9 sysctl 模块远程主机sysctl 配置
例 : 开启路由转发功能
验证
[root@xuegod1 ansible]# ansible -i /etc/ansible/hosts 'web-servers' -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"
10
11 )
二 实战-使用Play book 批量部署多台LAMP环境
29.4.1 实战-使用Playbook 批量部署多台LAMP 环境
playbook 常用文件夹作用
files :存放需要同步到异地服务器的源码文件及配置文件
handlers: 当服务的配置文件发生变化时,需要进行的操作,比如,重启服务,重新加载配置文件
处理程序
meta : 角色定义,可留空
tasks 需要进行的执行的任务
templates 用于执行lamp 安装的模板文件,一般为脚本
vars : 本次安装定义的变量
29.4.2 使用Playbook 批量部署多台LAMP 环境
首先,我们可以在ansible 服务器安装LAMP 环境,然后,在将配置文件通过ansible 拷贝到远程主机
1 ) 安装http的
yum install httpd -y
安装mysql
[root@xuegod1 ansible]# yum install mariadb-server mysql -y
3 ) 创建目录
第二步安装mysql
[root@xuegod1 ansible]# mkdir -p /mydata/data
[root@xuegod1 ansible]# chown -R mysql:mysql /mydata/
[root@xuegod1 ansible]# vim /etc/my.cnf
安装php 和php-mysql 木块
yum install php php-mysql -y
第四步 提供php 的测试页面
[root@xuegod1 ansible]# vim /var/www/html/index.php
[root@xuegod1 ansible]# iptables -F
重启apache
systemctl restart httpd
第六步 浏览器浏览
7 ) 优化主配置文件
[root@xuegod1 html]# vim /etc/httpd/conf/httpd.conf
9 )
创建相关文件
mkdir -pv /etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}
我们将上面搭建成功的LAMP 环境的httpd 和mysql 的配置文件拷贝到对应目录下
[root@xuegod1 roles]# cd /etc/ansible/
[root@xuegod1 ansible]# cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
[root@xuegod1 ansible]# cp /etc/my.cnf lamp/roles/mysql/files/
vim lamp/roles/prepare/tasks/main.yml
文件中写入
- name: delete yum config
shell: rm -rf /etc/yum.repos.d/* #删除原有的yum配置文件
- name: provide yumrepo file
shell: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载新的yum配置文件
- name: clean the yum repo
shell: yum clean all #清除原有的yum缓存信息
- name: clean the iptables
shell: iptables -F #清除原有防火墙规则,不然后可能上不了网
2 构建http的 的任务
[root@xuegod1 roles]# mv /var/www/html/index.php httpd/files/
[root@xuegod1 roles]# ls httpd/files/
httpd.conf index.php
[root@xuegod1 roles]#
[root@xuegod1 roles]# vim httpd/tasks/main.yml
- name: web server install
yum: name=httpd state=present #安装httpd服务
- name: provide test page
copy: src=index.php dest=/var/www/html #提供测试页
- name: delete apache config
shell: rm -rf /etc/httpd/conf/httpd.conf #删除原有的apache配置文件,如果不删除,下面的copy任务是不会执行的,因为当源文件httpd.conf和目标文件一样时,copy命令是不执行的。如果copy命令不执行,那么notify将不调用handler。
- name: provide configuration file
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf #提供httpd的配置文件
notify: restart httpd #当前面的copy复制成功后,通过notify通知名字为restart httpd的handlers运行。
3 构建httpd 的handlers
[root@xuegod1 roles]# vim httpd/handlers/main.yml
- name: restart httpd
service: name=httpd enabled=yes state=restarted
4、部署我们的mariadb数据库
创建MySQL服务的任务,需要安装MySQL服务,改变属主信息,启动MySQL
[root@xuegod63 roles]# cd /etc/ansible/lamp/roles
[root@xuegod63 roles]# vim mysql/tasks/main.yml
- name: install the mysql
yum: name=mariadb-server state=present #安装mysql服务
- name: mkdir date directory
shell: mkdir -p /mydata/data #创建挂载点目录
- name: provide configration file
copy: src=my.cnf dest=/etc/my.cnf #提供mysql的配置文件
- name: chage the owner
shell: chown -R mysql:mysql /mydata/* #更改属主和属组
- name: start mariadb
service: name=mariadb enabled=yes state=started #启动mysql服务
5、构建PHP的任务
[root@xuegod63 roles]# vim php/tasks/main.yml
- name: install php
yum: name=php state=present #安装php
- name: install php-mysql
yum: name=php-mysql state=present #安装php与mysql交互的插件
6、定义整个的任务
[root@xuegod63 roles]# cd /etc/ansible/lamp/roles
[root@xuegod63 roles]# vim site.yml #写入以下内容
- name: LAMP build
remote_user: root
hosts: web-servers
roles:
- prepare
- mysql
- php
- httpd
7 ) 开始测试