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. glob 遍历文件夹里面文件

    var_dump(glob("*")); // 只会遍历当前文件夹层里面的,不会往里面扒 exit; array(9) { [0]=> string(16) "Ca ...

  2. [LeetCode] 190. Reverse Bits 翻转二进制位

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  3. RobotFramework与Jenkins集成后发送groovy报告(比别处多了用例作者信息)

    https://www.cnblogs.com/gcgc/p/10037891.html 这篇文章中最终的发送报告是这个样子,每天大家看到这封邮件后也不知道是不是自己的用例错误了,导致大家不积极回复邮 ...

  4. 最新 学霸君java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.学霸君等10家互联网公司的校招Offer,因为某些自身原因最终选择了学霸君.6.7月主要是做系统复习.项目复盘.LeetCo ...

  5. async + promise 解决回调地狱

    // 解决异步回调地狱的方案: async + promise async function writeFile() {   // 打开文件   const fd = await new Promis ...

  6. docker+k8s基础篇四

    Docker+K8s基础篇(四) pod控制器 A:pod控制器类型 ReplicaSet控制器 A:ReplicaSet控制器介绍 B:ReplicaSet控制器的使用 Deployment控制器 ...

  7. Python之 time 模块

    时间模块的转换关系与方式: #!/usr/bin/env python # -*- coding:utf8 -*- import time # 时间戳 print('\ntime.time() --& ...

  8. 【翻译】在GitHub上通过星级评估排名前10的最受欢迎的开源Delphi项目

    GitHub上有相当多的Delphi开源项目可以为你节省一些时间.我在GitHub上搜索了Delphi,然后按最主要的项目进行排序,并列出了前十名单.这里有一些非常好的东西,包括Awesome Del ...

  9. Governing sand(主席树/贪心)(2019牛客暑期多校训练营(第七场))

    示例:输入:25 1 11 10 125 1 23 2 3输出:12 题意:n种树,第i种树有P[i]颗,砍掉每颗树的代价是C[i], 高度是H[i].需要用最小的花费砍掉一些树,让最高的树超过一半. ...

  10. docker容器与主机之间的文件复制

    Easy—— 注意:“容器名与文件路径中间的冒号后不能有空格!” 1.从容器复制到主机: sudo docker cp 容器名:文件路径 主机文件/夹路径 2.从主机复制复制到容器: sudo doc ...