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. matlab学习笔记8 基本绘图命令-LineSpec线条设定

    一起来学matlab-matlab学习笔记8 基本绘图命令_4 LineSpec线条设定 觉得有用的话,欢迎一起讨论相互学习~Follow Me 绘图函数接受线条设定作为参数并相应地修改生成的图形.您 ...

  2. [简短问答]LODOP打印不清晰

    用什么语句输出的:使用的的是什么语句输出的,是ADD_PRINT_TEXT纯文本,还是html的超文本. 超文本不清晰:如果用的是ADD_PRINT_HTML ,换成 ADD_PRINT_HTM试试, ...

  3. webpack 4.0改版问题

    4.0之后的打包方式: webpack --mode development src/index.js --output-filename app.js --output-path dist

  4. IP通信学习心得01

    一.物理拓扑 1. 1) 总线拓扑 特点:所有设备都处于同一个冲突域与广播域,共享相同的带宽 一次只能有一个设备传输,且两端要安装端接器. 传输介质:同轴电缆.(注:10Base5:容量10M 传输5 ...

  5. QT QML与C++混搭

    "那些杀不死我的必使我更加强大"----尼采 QML与C++混合编程就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法. ML访问C++Qt集成了QML引擎和Q ...

  6. 【剑指offer】面试题 6. 从尾到头打印链表

    面试题 6. 从尾到头打印链表 NowCoder 题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. Java 实现 ListNode Class class ListNode { i ...

  7. 将自定义jar包上传github并制作成maven仓库

    参照:https://www.jianshu.com/p/98a141701cc7 第一阶段 :配置github 1.创建mvn-repo分支     首先在你的github上创建一个maven-re ...

  8. 47 容器(六)——HashMap

    HashMap的概念 HashMap底层实现了哈希表,这是一种非常重要的数据结构,对于以后我们理解很多技术都有帮助,例如 redis数据库的核心技术和HashMap一样,因此,非常有必要让大家理解. ...

  9. SpringCloud之熔断器Hystrix及服务监控Dashboard

    目的:     服务雪崩效应 服务熔断服务降级 Hystrix默认超时时间设置 Hystrix服务监控Dashboard 服务雪崩效应 雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文 ...

  10. 如何在 WPF 中获取所有已经显式赋过值的依赖项属性

    原文:如何在 WPF 中获取所有已经显式赋过值的依赖项属性 获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取.这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的.有什么方法可以获 ...