1、传统运维&自动化运维概念

1)传统的运维概念(硬件、软件、系统、网络)

  • 手工安装系统、机房建设;
  • 软件服务配置、部署通过手工的操作;
  • 没有自动化脚本、流程;
  • 依靠大量的运维人员完成任务;

2)自动化运维概念(硬件、软件、系统、网络)

  • 自动安装系统、机房建设;
  • 软件服务配置、部署通过自动化脚本、工具;
  • 编写自动化脚本、定制流程;
  • 小量运维人员完成复杂的工作任务;

2、自动化运维工具-Ansible实战

1)概述

Ansible是基于Python语言开发的一款自动化运维工具,主要是帮助运维人员去管理Linux服务器,帮助运维人员实现轻松的对操作系统、软件服务、配置文件等管理,能够使用自动化的方式去维护和操作。

2)Ansible自动化运维工具特点:

  • 轻量级、所有操作在服务端完成即可;
  • 服务端跟客户端通信使用SSH协议(密码、秘钥);
  • 客户端无需安装Ansible客户端程序;
  • 基于Python语言编写,代码简洁、维护方便;
  • 支持Root、普通用户、Sudo用户的操作;

3)Ansible自动化运维工具原理:

Ansible服务端会读取本地hosts文件列表(客户端IP列表),调用本地各种插件和模块,基于SSH协议(用户名|密码|秘钥文件)远程客户端IP主机,让客户端主机执行命令、修改配置、执行任务(Ansible服务端下达的)等,客户端执行任务完成会反馈给服务端或者屏幕终端执行的结果。

4) Ansible自动化运维工具安装与配置:

【1】安装:

[root@localhost ansible]# yum -y remove ansible
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package ansible.noarch :2.4.2.0-.el7 will be erased
--> Finished Dependency Resolution Dependencies Resolved =========================================================================================================
Package Arch Version Repository Size
=========================================================================================================
Removing:
ansible noarch 2.4.2.0-.el7 @extras M Transaction Summary
=========================================================================================================
Remove Package Installed size: M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Erasing : ansible-2.4.2.0-.el7.noarch /
warning: /etc/ansible/hosts saved as /etc/ansible/hosts.rpmsave
Verifying : ansible-2.4.2.0-.el7.noarch / Removed:
ansible.noarch :2.4.2.0-.el7 Complete!
[root@localhost ansible]# ls
hosts_bak hosts.rpmsave
[root@localhost ansible]# cd /
[root@localhost /]# cd
[root@localhost ~]# yum -y install ansible
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package ansible.noarch :2.4.2.0-.el7 will be installed
--> Finished Dependency Resolution Dependencies Resolved =========================================================================================================
Package Arch Version Repository Size
=========================================================================================================
Installing:
ansible noarch 2.4.2.0-.el7 extras 7.6 M Transaction Summary
=========================================================================================================
Install Package Total download size: 7.6 M
Installed size: M
Downloading packages:
ansible-2.4.2.0-.el7.noarch.rpm | 7.6 MB ::
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : ansible-2.4.2.0-.el7.noarch /
Verifying : ansible-2.4.2.0-.el7.noarch / Installed:
ansible.noarch :2.4.2.0-.el7 Complete!

【2】查看/etc/ansible/目录下的文件

[root@localhost ~]# ll /etc/ansible/
total
-rw-r--r-- root root Jan ansible.cfg
-rw-r--r-- root root Jan hosts
-rw-r--r-- root root Jul : hosts.rpmsave
drwxr-xr-x root root Jan roles

【3】修改hosts文件(不是本地DNS文件)

[root@localhost ansible]# cp hosts hosts_bak
cp: overwrite ‘hosts_bak’? y
[root@localhost ansible]# vim hosts
[root@localhost ansible]# cat hosts
[localhost]
192.168.249.135
[Nginx1]
192.168.249.132

【4】参数了解

  • -m:要执行的模块,默认为command
  • -a:模块的参数
  • -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
  • -k:提示输入ssh登录密码,当使用密码验证的时候用
  • -s:sudo运行
  • -U:sudo到哪个用户,默认为root
  • -K:提示输入sudo密码,当不是NOPASSWD模式时使用
  • -C:只是测试一下会改变什么内容,不会真正去执行
  • -c:连接类型(default=smart)
  • -f:fork多少进程并发处理,默认为5个
  • -i:指定hosts文件路径,默认default=/etc/ansible/hosts
  • -I:指定pattern,对已匹配的主机中再过滤一次
  • --list-host:只打印有哪些主机会执行这个命令,不会实际执行
  • -M:要执行的模块路径,默认为/usr/share/ansible
  • -o:压缩输出,摘要输出
  • --private-key:私钥路径
  • -T:ssh连接超时时间,默认是10秒
  • -t:日志输出到该目录,日志文件名以主机命名
  • -v:显示详细日志

【5】常用模块

只需要熟练使用 shell 模块和 copy 模块即可,其余的file、yum、command模块等都可以使用shell模块代替

【6】实战操作

  1.远程执行“df -h”命令
[root@localhost ansible]# ansible 192.168.249.132 -m command -a "df -h"
The authenticity of host '192.168.249.132 (192.168.249.132)' can't be established.
ECDSA key fingerprint is SHA256:6t+bT9udQAxIkfD6ncqowUKRgNalEatjusRkAw8pbWo.
ECDSA key fingerprint is MD5::d3::fc:d6::::6e:d0::c6:::a5:e5.
Are you sure you want to continue connecting (yes/no)? yes
192.168.249.132 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.249.132' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}

我们发现让我们输入密码,我们还没输入呢,就已经报错了,所以,我们需要加一个-k参数来输入密码

[root@localhost ansible]# ansible -k 192.168.249.132 -m command -a "df -h"
SSH password:
192.168.249.132 | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G .4G 14G % /
devtmpfs 475M 475M % /dev
tmpfs 487M 487M % /dev/shm
tmpfs 487M 7.6M 479M % /run
tmpfs 487M 487M % /sys/fs/cgroup
/dev/sda1 1014M 192M 823M % /boot
tmpfs 98M 98M % /run/user/
  2.使用ssh进行此操作
[root@localhost /]# ssh -l root 192.168.249.132 "ip ad"
SSH password:
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c:::2d:0a brd ff:ff:ff:ff:ff:ff
inet 192.168.249.132/ brd 192.168.249.255 scope global noprefixroute dynamic ens32
valid_lft 1037sec preferred_lft 1037sec
inet6 fe80::dfe1:38b4:8e7d:/ scope link noprefixroute
valid_lft forever preferred_lft forever

我们同样可以实现啊,所以我们为什么要是使用ansible呢?我们继续往下做实验

  3.同时对2台主机进行操作,执行“df -h”命令
[root@localhost ansible]# ansible all -m shell -a "df -h"  #这里的all是指对hosts文件内所有的主机进行操作
192.168.249.135 | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G .7G 16G % /
devtmpfs 475M 475M % /dev
tmpfs 487M 144K 487M % /dev/shm
tmpfs 487M 7.6M 479M % /run
tmpfs 487M 487M % /sys/fs/cgroup
/dev/sda1 1014M 179M 836M % /boot
tmpfs 98M 98M % /run/user/ 192.168.249.132 | SUCCESS | rc= >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G .4G 14G % /
devtmpfs 475M 475M % /dev
tmpfs 487M 487M % /dev/shm
tmpfs 487M 7.6M 479M % /run
tmpfs 487M 487M % /sys/fs/cgroup
/dev/sda1 1014M 192M 823M % /boot
tmpfs 98M 98M % /run/user/
  4.ssh实现不了,但是!我可以使用while循环语句啊:
[root@localhost ansible]# for i in `seq  `;do echo -e "\033[32m10.10.10.$i | CHANGED |rc=0 >>\033[0m";ssh -l root 192.168..$i "df -h";done
192.168.249.132 | CHANGED |rc= >>
root@192.168.249.132's password:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G .4G 14G % /
devtmpfs 475M 475M % /dev
tmpfs 487M 487M % /dev/shm
tmpfs 487M 7.6M 479M % /run
tmpfs 487M 487M % /sys/fs/cgroup
/dev/sda1 1014M 192M 823M % /boot
tmpfs 98M 98M % /run/user/192.168.249.135 | CHANGED |rc= >>
root@192.168.249.135's password:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G .7G 16G % /
devtmpfs 475M 475M % /dev
tmpfs 487M 487M % /dev/shm
tmpfs 487M 7.6M 479M % /run
tmpfs 487M 487M % /sys/fs/cgroup
/dev/sda1 1014M 179M 836M % /boot
tmpfs 98M 98M % /run/user/

那这有啥区别呢?当我们在执行的时候,很清楚的可以发现,ansible是同时执行,两个结果同时出现,也就是并行,而循环是先出现第一个主机的结果,再出现第二个主机的结果,所以是串行。现在感觉不出来,毕竟只有两台机器,如果是服务器集群呢?所以我们还是选择Ansible。

Ansible_Day1的更多相关文章

随机推荐

  1. Laya微信小游戏的开放域

    版本2.1.1.1 现在Laya的开放域比较好用了. 新建开放域项目,里面直接有个排行榜的示例. 直接发布 得到较少的文件,复制这些文件,粘贴到主项目bin/openDataContext下. (op ...

  2. Mysql查询的执行顺序

    顺序: FROM JOIN ON WHERE GROUP BY (从此处开始可以使用select中指定的别名) AVG.SUM.MAX HAVING SELECT DISTINCT ORDER BY ...

  3. oracle plsql 异常

      set serveroutput on DECLARE pename emp.ename%type; begin '; exception when no_data_found then dbms ...

  4. Python - Django - 使用 Bootstrap 样式修改注册页

    reg2 函数: from django.shortcuts import render, HttpResponse from app01 import models def reg2(request ...

  5. JAVA Asponse.Word Office 操作神器,借助 word 模板生成 word 文档,并转化为 pdf,png 等多种格式的文件

    一,由于该 jar 包不是免费的, maven 仓库一般不会有,需要我们去官网下载并安装到本地 maven 仓库 1,用地址   https://www-evget-com/product/564  ...

  6. rConfig v3.9.2 授权认证与未授权RCE (CVE-2019-16663) 、(CVE-2019-16662)

    rConfig v3.9.2 authenticated and unauthenticated RCE (CVE-2019-16663) and (CVE-2019-16662) 原文:https: ...

  7. docker+nginx部署静态网页(html)

    我看了下网上都是部署单个.html页面的实例.所以今天试试多个.html文件的部署. 因为之前docker部署过vue.js打包的项目,所以按上次部署方式部署.结果还真行,只是这次部署的是小滴课堂上的 ...

  8. php_mvc实现步骤五

    5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...

  9. 怎么又出错了?盘点java中最容易出现的错误

    现如今,java已经广泛应用各种软件开发领域.基于面向对象的设计,java屏蔽了诸如C,C++等语言的一些复杂性,提供了垃圾回收机制,平台无关的虚拟机技术,Java创造了一种前所未有的开发方式.所以, ...

  10. [转帖]Redis、Memcache和MongoDB的区别

    Redis.Memcache和MongoDB的区别 https://www.cnblogs.com/tuyile006/p/6382062.html >>Memcached Memcach ...