linux————ansible

一、认识自动化运维

        自动化运维: 将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”的IT运维。

自动化运维主要关注的方面

  1. 管理机与被管理机的连接(管理机如何将管理指令发送给被管理机)

  2. 服务器信息收集 (如果被管理的服务器有centos7.5外还有其它linux发行版,如suse,ubuntu等。当你要做的事情在不同OS上有所不同,你需要收集信息,并将其分开处理)

  3. 服务器分组(因为有些时候我要做的事情不是针对所有服务器,可能只针对某一个分组)

  4. 管理内容的主要分类

  • 文件目录管理(包括文件的创建,删除,修改,查看状态,远程拷贝等)

  • 用户和组管理

  • cron时间任务管理

  • yum源配置与通过yum管理软件包

  • 服务管理

  • 远程执行脚本

  • 远程执行命令

常见的开源自动化运维工具

  1. puppet

    基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些。

  2. saltstack

    基于python语言。相对简单,大并发能力比ansible要好, 需要维护被管理端的服务。如果服务断开,连接就会出问题。

  3. ansible

    基于python语言。简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证所以机器多的话速度会较慢。

二、ansible

        ansible是一种由Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

特点

        部署简单

        默认使用ssh进行管理,基于python里的==paramiko==模块开发

        管理端和被管理端不需要启动服务

        配置简单,功能强大,扩展性强

        能过playbook(剧本)进行多个任务的编排

环境

        关闭防火墙, selinux

        时间同步

        静态ip

        修改主机名互相解析

        vim /etc/hosts

192.168.100.3        hd1
192.168.100.4        hd2
192.168.100.5        hd3

免密ssh

管理机hd1 安装ansible

yum install -y epel-release

yum install -y ansible

将被管理机hd2,hd3 加入管理机组(单独加入时不会进行分组)

vim /etc/zasible/hosts

192.168.100.3

192.168.100.4

192.168.100.5

测试连接性

ansible -m ping  master

ansible -m ping  web

ansible -m ping  all

一、服务器分组

ansible通过一个主机清单功能来实现服务器分组。

Ansible的默认主机清单配置文件为/etc/ansible/hosts.

[web]                    组名
192.168.100.4           表示192.168.100.4客户端

示例: 定义192.168.100.3这台服务器的别名为master

master ansible_ssh_host=192.168.100.3 ansible_ssh_port=22

没有做免密登录的服务器可以指定用户名与密码

master  ansible_ssh_host=192.168.100.3 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"

二、ansible模块

        ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

        ansible支持的模块非常的多,我们并不需要把每个模块都记住,而只需要熟悉一些常见的模块,其它的模块在需要用到时再查询即可。

查看所有支持的模块

ansible-doc -l

ansible-doc  ping

hostname模块

hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件)

将其中一远程机器主机名修改为agent1

ansible 192.168.100.4  -m hostname -a 'name=agent1‘

file模块

file模块用于对文件相关的操作(创建, 删除, 软硬链接等)

创建一个目录

ansible master -m file -a ’path=/test  state=directory‘ 

创建一个文件

ansible master -m file -a 'path=/test/111 state=touch'

递归修改owner,group,mode

ansible web -m file -a 'path=/test recurse=yes owner=bin group=daemon mode=1777'

删除目录 absent 缺席的(连同目录里的所有文件)

ansible web -m file -a 'path=/test state=absent'

创建文件并指定owner,group,mode等

ansible web -m file -a 'path=/tmp111 state=touch owner=bin group=daemon mode=1777'

删除文件

ansible web -m file -a 'path=/tmp/111 state=absent'

创建软链接文件

ansible web -m file -a 'src=/etc/fstab path=/tmp/fstab state=link'

创建硬链接文件

ansible web -m file -a 'src=/etc/fstab path=/tmp/fstab2 state=hard'

stat模块

ansible master -m stat -a 'path=/etc/fstab'

copy模块

在master上准备一个文件,拷贝此文件到group1的所有机器上

echo master > /opt/222

ansible web -m copy -a 'src=/opt/222 dest=/tmp/333'使用content参数直接往远程文件里写内容(会覆盖原内容)

ansible web -m copy -a 'content="hello \n world\n" dest=/tmp/333'

使用force参数控制是否强制覆盖

如果目标文件已经存在,则不覆盖

ansible web -m copy -a 'src=/opt/222 dest=/tmp/333 force=no'

如果目标文件已经存在,则会强制覆盖
ansible web -m copy -a 'src=/opt/222 dest=/tmp/333 force=yes'

使用backup参数控制是否备份文件

backup=yes        表示如果拷贝的文件内容与原内容不一样,则会备份一份
web的机器上会将/tmp/333备份一份(备份文件命名加上时间),再远程拷贝新的文件为/tmp/333
ansible web -m copy -a 'src=/etc/fstab dest=/tmp/333 backup=yes owner=daemon group=daemon mode=1777'

fetch模块

fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。

在两台被管理机上分别创建一个同名文件(但内容不同)

echo agent1 > /tmp/1.txt
echo agent2 > /tmp/1.txt

从master上fecth文件(因为group1里有2台机器,为了避免同名文件文件冲突,它使用了不同的目录)

ansible web  -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

fetch模块不能从远程拷贝目录到本地

user模块

user模块用于管理用户账号和用户属性。

创建aaa用户,默认为普通用户,创建家目录

ansible web -m user -a ‘name=aaa state=present’

创建bbb系统用户,并且登录shell环境为/sbin/nologin

ansible web -m user -a ‘name=bbb state=present system=yes  shell="/sbin/nologin"’

创建ccc用户, 使用uid参数指定uid, 使用password参数传密码

echo 123456 | openssl passwd -1 -stdin
$1$xacDNgkf$/8SQj.hsQYsryXBSm97wC1

ansible web -m user -a 'name=ccc uid=2000 state=present password="$1$xacDNgkf$/8SQj.hsQYsryXBSm97wC1"'

创建一个普通用户叫hadoop,并产生空密码 密钥对

ansible web -m user -a 'name=hadoop generate_ssh_key=yes'

删除aaa用户,但家目录默认没有删除

ansible web -m user -a 'name=aaa state=absent'

删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录

ansible  web -m user -a 'name=bbb state=absent remove=yes'

group模块

创建组

ansible web -m group -a 'name=groupa gid=3000 state=present'

删除组(如果有用户的gid为此组,则删除不了)

ansible web -m group -a 'name=groupa state=absent'

cron模块

cron模块用于管理周期性时间任务

创建一个cron任务,不指定user的话,默认就是root(因为我这里是用root操作的)。
如果minute,hour,day,month,week不指定的话,默认都为*

 ansible web -m cron -a 'name="test cron1" user=root job="touch /tmp/111" minute=*/2' 

删除cron任务

ansible web -m cron -a 'name="test cron1" state=absent'

yum_repository模块

yum_repository模块用于配置yum仓库。

增加一个/etc/yum.repos.d/local.repo配置文件

ansible web -m yum_repository -a "name=local description=localyum baseurl=file:///mnt/ enabled=yes gpgcheck=no"

删除/etc/yum.repos.d/local.repo配置文件

ansible web -m yum_repository -a "name=local state=absent" 

yum模块

yum模块用于使用yum命令来实现软件包的安装与卸载。

使用yum安装一个软件(前提:group1的机器上的yum配置都已经OK)

使用yum安装vsftpd

ansible group1 -m yum -a 'name=vsftpd state=present'

使用yum卸载vsftpd

service模块

service模块用于控制服务的启动,关闭,开机自启动等。

启动httpd服务,并设为开机自动启动(自启可选用  yes/no  true/false  on/off)

 ansible web -m service -a 'name=httpd state=started enabled=on'

关闭vsftpd服务,并设为开机不自动启动

ansible web -m service -a 'name=httpd state=stopped enabled=false'

scripts模块

script模块用于在远程机器上执行**本地**脚本。

在master上准备一个脚本

master# vim 1.sh
#!/bin/bash
mkdir /tmp/haha
touch /tmp/haha/{1..10}

在web的远程机器里都执行master上的/tmp/1.sh脚本(此脚本不用给执行权限)

ansible web -m script -a '1.sh'

使用shell脚本实现在web的被管理机里的mariadb里创建一个abc库

vim  1.sh

#!/bin/bash

yum install mariadb-server -y  &> /dev/null

systemctl start mariadb
systemctl enable mariadb

mysql << EOF
create database abc;
quit
EOF

ansible web -m scripts -a ‘1.sh'’

commend与shell模块

        两个模块都是用于执行linux命令的,这对于命令熟悉的工程师来说,用起来非常high。

shell模块与command模块差不多(command模块不能执行一些类似$HOME,>,<,|等符号,但shell可以)

ansible -m command web -a "useradd user2"

ansible -m command web -a "cat /etc/passwd |wc -l"

 ansible -m shell web -a "cat /etc/passwd |wc -l"    shell模块并不是百分之百任何命令都可以,比如vim或ll别名就不可以

三、playbook

playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。

使用的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会用到yaml格式)

语法

hosts:        用于指定要执行任务的主机,其可以是一个或多个由冒号分割主机组

remote_user :        用于指定远程主机上的执行任务的用户

tasks :        任务列表,按顺序执行任务 

handlers :        类似task,但需要使用notify进行通知调用

variables:        定义变量

ymal格式

        以.yaml或.yml结尾

        文件的第一行以 "---"开始,表明YMAL文件的开始(可选的)
         以#号开头为注释 
        列表中的所有成员都开始于相同的缩进级别, 并且使用一个 `"- "` 作为开头(一个横杠和一个空格)
        一个字典是由一个简单的 `键: 值` 的形式组成(这个冒号后面必须是一个空格)
        注意: 写这种文件不要使用tab键,都使用空格

 创建一个存放playbook的目录(路径自定义)

mkdir /etc/ansible/playbook

准备httpd配置文件,并修改成你想要的配置

yum install httpd -y

vim /etc/httpd/conf/httpd.conf

写一个playbook文件(后缀为.yml或.yaml)

# vim /etc/ansible/playbook/example.yaml
---

- hosts: group1  remote_user: root
 tasks:  

 - name: ensure apache is at the latest version    
   yum: name=httpd,httpd-devel state=latest
    
 - name: write the apache config file        
   copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    
   notify:
   - restart apache
    
 - name: ensure apache is running (and enable it at boot)
   service: name=httpd state=started enabled=yes
    
 handlers:    
   - name: restart apache
     service: name=httpd state=restarted

执行写好的palybook

ansible-playbook /etc/ansible/playbook/example.yaml

四、roles(角色)

        roles(角色): 就是通过分别将variables, tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制。

        假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分, 分成apache管理,php管理,mysql管理,然后在需要使用的时候直接调用就可以了,以免重复写。就类似编程里的模块化的概念,以达到代码复用的效果。

roles目录结构

files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

通过roles实现LAMP

一、创建roles目录结构

cd /etc/ansible/roles/

mkdir -p {httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}

touch {httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml

yum install tree -y

tree /etc/ansible/roles/

二、准备httpd服务器的主页文件,php测试页和配置文件等

echo "test main page" > /etc/ansible/roles/httpd/files/index.html

echo -e "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/httpd/files/test.php 

 yum install httpd -y

vim /etc/httpd/conf/httpd.conf

cp /etc/httpd/conf/httpd.conf /etc/ansible/roles/httpd/files/

三、编写httpd角色的main.yml文件

vim /etc/ansible/roles/http/task/main.yaml

 ---
 - name: 安装httpd
   yum: name=httpd,httpd-devel state=present

 - name: 同步httpd配置文件
   copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf

   notify: restart httpd

 - name: 同步主页文件
   copy: src=/etc/ansible/roles/httpd/files/index.html dest=/var/www/html/index.html

 - name: 同步php测试页
   copy: src=/etc/ansible/roles/httpd/files/index.php dest=/var/www/html/index.php

 - name: 启动httpd并开机自启动
   service: name=httpd state=started enabled=yes

四、编写httpd角色里的handler

vim /etc/ansible/roles/httpd/handlers/main.yml

---
- name: restart httpd
  service: name=httpd state=restarted

五、编写mysql角色的main.yml文件

vim /etc/ansible/roles/mysql/task/mail.yaml

---
- name: 安装mysql
  yum: name=mariadb,mariadb-server,mariadb-devel state=present

- name: 启动mysql并开机自启动
  service: name=mariadb state=started enabled=yes

六、编写php角色的main.yml文件
vim /etc/ansible/roles/php/tasks/main.yml

---
- name: 安装php及依赖包
  yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath,php-mysql state=present

  notify: restart httpd

七、编写lamp的playbook文件调用前面定义好的三个角色

vim /etc/ansible/playbook/lamp.yaml

---
- hosts: group1
  remote_user: root
  roles:
    - httpd
    - mysql
    - php

八、执行剧本

ansible-playbook /etc/ansible/playbook/lamp.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程回顾、集合Collection、Set、List等基本知识

多线程回顾 问: 多线程的两种创建方式? 继承Thread类实现Runnable接口线程池Callable 问:多线程通常会遇到线程安全问题? 什么情况下会遇到线程安全问题? 答:一个数据被多个线程访问(有读有写) 解决这个问题的方式? SE:同步锁 synchronized A : 同步代码块 B : 同步方法…

VisualStudio Code 支持C++11插件配置

问题 Visual Studio Code中的插件: Code Runner 支持运行C、C、Java、JS、PHP、Python等多种语言。 但是它不支持C11特性的一些使用&#xff0c;比如类似错误&#xff1a; binarySearch.cpp:26:17: error: non-aggregate type ‘vector’ cannot be initialized with an ini…

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)

目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象&#xff08;ndarray&#xff09; 1. 多维数组的属性 1、创建数组 2、数组操作 1. 索引和切片 a. 索引 b. 切片 2. 形状操作 a. 获取数组形状 b. 改变数组形状 c. 展平数组 3. 转置操作 a. 使用.T属性 b…

安全实战 | 怎么用零信任防范弱密码?

防范弱密码&#xff0c;不仅需要提升安全性&#xff0c;更需要提升用户体验。 比如在登录各类业务系统时&#xff0c;我们希望员工登录不同系统不再频繁切换账号密码&#xff0c;不再需要3-5个月更换一次密码&#xff0c;也不再需要频繁的输入、记录、找回密码。 员工所有的办…

实验室预约系统设计与实现

实验室预约系统的设计 摘 要 目前各大学的实验项目日益繁多&#xff0c;如何合理预约实验室&#xff0c;已经成为当今各个大学实验室课程预约的难题。因此&#xff0c;这个实验室预约系统就是研究实验室预约的相关问题。实验室预约系统的设计主要是基于B/S模型&#xff0c;在W…

Vector 模拟实现

前言 本文将会向您介绍如何模拟实现vector 引入 Vector是一种动态数组&#xff0c;也是C标准库中的容器之一。它提供了一种存储和操作一系列元素的方式&#xff0c;类似于数组&#xff0c;但具有更多的功能和灵活性。 Vector可以存储不同类型的元素&#xff0c;并且可以根据…

【ChatGPT原理与实战】4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒!

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

HarmonyOS开发:那些开发中常见的问题汇总(一)

前言 本来这篇文章需要讲述静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建&#xff0c;非常遗憾的告诉大家&#xff0c;由于组织管理申请迟迟未通过&#xff0c;和部分文档官方权限暂未开放&#xff0c;关于这方面的讲解需要延后了&#xff0c;大概需要等到202…

哈工大校园网显示IP地址错误连接不上

您当前获取到的IP地址有误&#xff0c;请重新开关无线获取IP地址(注:电脑端还可以通过cmd窗口&#xff0c;输入ipconfig /release、ipconfig /renew命令)。如未解决此问题请联系网络安全和信息化办公室处理。 当校园网登录时会出现如上情况&#xff0c;并且当你按照他的方法尝试…

数据结构——图(图的存储及基本操作)

文章目录 前言一、邻接矩阵法&#xff08;顺序存储&#xff09;1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…

56、springboot ------ RESTful服务及RESTful接口设计

★ RESTful服务 RESTful服务是“前后端分离”架构中的主要功能&#xff1a; 后端应用对外暴露RESTful服务&#xff0c;前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 <------------------> 前端★ 基于JSON的RESTful服务 使用RestController注解…

vue项目部署,出现两个ip的原因

我宁愿靠自己的力量打开我的前途,而不愿求有力者的垂青。——雨果 tags: 篇首语&#xff1a;本文由小常识网(cha138.com)小编为大家整理&#xff0c;主要介绍了vue项目部署&#xff0c;出现两个ip的原因相关的知识&#xff0c;希望对你有一定的参考价值。 参考技术A 在部署v…

建站系列(五)--- 前端开发语言之HTML、CSS、JavaScript

目录 相关系列文章前言一、前端开发与后端开发二、前端语言简介&#xff08;一&#xff09;、HTML&#xff08;二&#xff09;、CSS&#xff08;三&#xff09;、JavaScript 三、学习指导&#xff08;一&#xff09;、开发环境&#xff08;二&#xff09;、第一个Hello&#xf…

央媒发稿不能改?媒体发布新闻稿有哪些注意点

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 “央媒发稿不能改”是媒体行业和新闻传播领域的普遍理解。央媒&#xff0c;即中央主要媒体&#xff0c;是权威性的新闻源&#xff0c;当这些媒体发布新闻稿或报道时&#xff0c;其他省、…

Pdf文件签名检查

如何检查pdf的签名 首先这里有一个已经签名的pdf文件&#xff0c;通过pdf软件可以看到文件的数字签名。 下面就是如何代码检查这里pdf文件的签名 1.引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId&g…

时序预测 | MATLAB实现ARMA自回归移动平均模型时间序列预测

时序预测 | MATLAB实现ARMA自回归移动平均模型时间序列预测 目录 时序预测 | MATLAB实现ARMA自回归移动平均模型时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现ARMA时间序列预测&#xff08;完整源码和数据&#xff09; 本程序基于MATLAB的armax函…

应用在电子体温计中的国产温度传感芯片

电子体温计由温度传感芯片&#xff0c;液晶显示器&#xff0c;纽扣电池&#xff0c;专用集成电路及其他电子元器件组成。能快速准确地测量人体体温&#xff0c;与传统的水银玻璃体温计相比&#xff0c;具有读数方便&#xff0c;测量时间短&#xff0c;测量精度高&#xff0c;能…

gma 2.0.1 (2023.09.15) 更新日志

安装 gma 2.0.1 pip install gma2.0.1修复 1、【栅格处理-栅格分解】   修复了由于关联模块调整导致类方法失效引起的函数功能异常的问题。 2、【栅格处理-栅格更新相关】   修复了自身数据更新相关的函数&#xff08;例如 添加颜色映射表 等&#xff09;格式检查不通过的…

【机器学习习题】估计一个模型在未见过的数据上的性能

您提到的不等式是统计学中的泛化误差界&#xff08;generalization error bound&#xff09;&#xff0c;它用于估计一个模型在未见过的数据上的性能。这个不等式是由Hoeffding不等式和Union Bound组合而成的。在这个不等式中&#xff0c;我们有以下符号&#xff1a; - P[|E_i…

什么是 Microsoft Office 365? Excel on Cloud 的好处

什么是Office 365 Office 365 是 Microsoft 的一套程序&#xff0c;可以在本地运行&#xff0c;也可以同步到云存储。 可以从访问程序。 借助 Office 365&#xff0c;您可以在任何地方进行工作&#xff0c;并与世界各地的同事共享工作文档。 Office 365 支持的设备&#xff1a…