1.ansible原理

ansible是一款自动化运维工具,基于Python开发,可以实现批量系统设置、批量程序部署、批量执行命令等功能。
​
Ansible完全基于Python开发,要求python的版本为2.6以上。
​
Ansible默认通过SSH协议管理机器,因此,客户端无需任何配置,管理端配置好后即可使用。

2.安装ansible

#需要依赖包,先安装第三方库,在安装Ansible
yum install epel-release
yum install ansible

3.Ansible的配置文件说明

tree /etc/ansible/
├── ansible.cfg     
├── hosts
└── roles
#ansible.cfg主配置文件
#hosts里定义被管理的主机
#roles分模块式管理,防止冗余代码

4.添加被管理主机

vim /etc/ansible/hosts      #这里用的是分组存放主机的
#可以填写域名
#可以填写ip
#可以进行分组
[web]
192.168.10.81

常用命令

1.测试连通性

ansible web -m ping -k
#-m:调用命令
#-k:使用密码

2.设置免密登录

ssh-keygen
ssh-copy-id 192.168.10.81
#不使用密码进行测试
ansible web -m ping 

3.创建用户

ansible web -m user -a "name=ssj password=abc123"

4.查看主机名

ansible web -a "hostname"
#hostname可以变成mkdir或rm -rf,但是这样不规范,不支持|符号

yum模块

1.为远程主机安装httpd

ansible web -m yum -a "name=httpd state=present"
#yum模块linux平台软件包管理。
#yum模块可以提供的status状态: latest ,present,installed #这三个代表安装;removed, absent #这两个是卸载

service模块

1.远程开启httpd的服务

ansible web -m service -a "name=httpd state=started"
#started:启动
#stopped:关闭
#restarted:重启
#reloaded:不关闭服务,加载配置文件

copy模块和fetch模块

1.更换index.html(将文件拷贝到远程机器)

ansible web -m copy -a "src=/root/index.html dest=/var/www/html/index.html"
此处src为本机文件路径,而dest是远程机器的路径。

2.将http.conf拷出来做修改

ansible web -m fetch -a "src=/etc/httpd/conf/httpd.conf dest=/root/ flat=yes"
此处src为远程机器上的地址,dest为本机的文件夹地址,即文件拷贝过来放置的文件夹的地址
#backup=yes为覆盖原文件;
#force=yes为强制执行;
#flat=yes是在主服务器上不创建目录,只拷贝想要的,否则会有/etc/httpd/conf/这三个层级目录
#fetch不可以对目录进行操作

file模块使用

1.给文件更改权限

ansible web -m file -a "path=/root/321 mode=0755"
#path:指的是想要修改的文件
#mode:想要修改的权限

2.设置软连接

ansible web -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"

3.创建文件

ansible web -m file -a "path=/tmp/zzlssb state=touch"

cron模块远程管理主机crontab配置

1.增加每30分钟执行 echo"我是曾卓伦的爹"

ansible web -m cron -a "name='list dir' minute='*/30' job='echo 我是曾卓伦的爹'"
#name:可以自己定义
​
#ansible web -m cron -a "name='list dir1' minute='5' job='echo 我是曾卓伦的爹'"
#每五分钟

2.删除创建好的计划任务

ansible web -m cron -a "name= 'list dir' state=absent"
#name:名称需要对应
#state:absent是删除

playbook

playbooks的介绍

1)在playbooks 中定义任务:
​
-name: task description #任务描述信息
module_name: module_args #需要使用的模块名字: 模块参数
2) ansible-playbook 执行 命令:
ansible-playbook site.yml
​

先介绍下: Playbook常用文件夹作用:

  • files:存放需要同步到异地服务器的源码文件及配置文件;

  • handlers:当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件,handlers ['hændləz] 处理程序

  • meta:角色定义,可留空;

  • tasks:需要进行的执行的任务;

  • templates:用于执行lamp安装的模板文件,一般为脚本;

  • vars:本次安装定义的变量

使用playbook安装lamp

思路:

1.需要安装httpd

2.需要安装mysql

3.安装php

4.需要把自己修改好的httpd.conf传输过去

5.需要把自己修改好的my.cnf传输过去

6.需要把自己修改的index.php传输过去以便测试

7.启动所有服务

实践:

#本机端:
yum install httpd mariadb-server mariadb php php-mysql -y
#本机安装lamp主要是为了获取配置文件

可以理解为playbook是用通过文件夹的方式来管理的,每一个文件夹里都是单独的体系

#目录结构/etc/ansible/lamp/
lamp/
└── roles
    ├── httpd
    │   ├── default
    │   ├── files
    │   │   ├── httpd.conf
    │   │   └── index.php
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   └── vars
    ├── mysql
    │   ├── default
    │   ├── files
    │   │   └── my.cnf
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   └── vars
    ├── php
    │   ├── default
    │   ├── files
    │   ├── handlers
    │   ├── meta
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   └── vars
    ├── prepare
    │   ├── default
    │   ├── files
    │   ├── handlers
    │   ├── meta
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   └── vars
    └── site.yml
#以上都是需要自己去创建的

1.准备工作

#创建必要的文件夹
mkdir -p
/etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}
#为了更好的理解目录,以下的操作都是在/etc/ansible下进行操作
cd /etc/ansible/
vim lamp/roles/prepare/tasks/main.yml
​
- name: delete yum configuration
  shell: rm -rf /etc/yum.repo.d/*
- name: get new yum configuration
  shell: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- name: yum clean
  shell: yum clean all

2.httpd

#拷贝httpd.conf和index.php
cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
cp /var/www/html/index.php lamp/roles/httpd/files/
#编写httpd的yml文档
vim lamp/roles/httpd/tasks/main.yml
​
- name: install httpd
  yum: name=httpd state=present
- name: delete httpd.conf
  shell: rm -rf /etc/httpd/conf/httpd.conf
- name: new configuration
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
- name: index.php test
  copy: src=index.php dest=/var/www/html/index.php
  notify: restart httpd     #去调用另一个启动文件夹
​
vim lamp/roles/httpd/handlers/main.yml
​
- name: restart httpd       #此名称要和tasks里定义一样,否则调度不到
  service: name=httpd state=restarted

3.mysql(mariadb)

#拷贝my.cnf至mysql下的file
cp /etc/my.cnf lamp/roles/mysql/files/
#编写mysql的yml文件
vim lamp/roles/mysql/tasks/main.yml
​
- name: install mariadb
  yum: name=mariadb-server state=present
- name: delete my.cnf
  shell: rm -rf /etc/my.cnf
- name: provide my.cnf
  copy: src=my.cnf dest=/etc/my.cnf
- name: chage the owner
  shell: chown -R mysql:mysql /mysqldata/data       #my.cnf里定义的数据存放目录(个人爱好)
  notify: restart mariadb       #去调用另外一个启动文件夹
  
vim lamp/roles/mysql/handlers/main.yml
​
- name: restart mariadb
  service: name=mariadb state=restarted
​
​

4.php

#编写php的yml文件
vim lamp/roles/php/tasks/main.yml 
​
- name clean yumPid
  shell: rm -rf /var/run/yum.pid        #如果有报错就添加,没有可以不必添加
- name: install php
  yum: name=php state=present
- name: install php-mysql
  yum: name=php-mysql state=present

5.定义总体任务

vim lamp/roles/site.yml
​
​
- name: lamp build
  remote_user: root
  hosts: web
  roles:
    - prepare
    - mysql
    - php
    - httpd
​
#remote_user:远程连接的root
#hosts:hosts里定义的,这里也可以是ip、域名、组
#roles:是定义启动的,可以玩的更炫,比如想在一台上装httpd,另一台上装mysql和php就可以实现操作不冗余

6.检查语法和启动

#检查语法
ansible-playbook --syntax-check lamp/roles/site.yml
#启动剧本
ansible-playbook lamp/roles/site.yml
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐