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. nginx配置ssl证书,启动http访问并代理到本地http端口

    小白第一次使用nginx,本地环境Ubuntu 16.04.6 1.安装Nginx sudo apt install nginx 2.生成证书 (参考来源:https://segmentfault.c ...

  2. 解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...

  3. 源码分析之Handler

    Handler是Android中的消息机制实现,可以实现UI线程和子线程的消息传递,这里就来深入了解Android的消息机制,来分析Handler的源代码 入手实例 在Android开发中,子线程与主 ...

  4. Apache新的URL路由重写规则

    在根目录下新建一个 .htaccess 后缀文件,将下面代码放进去即可 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multivie ...

  5. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

  6. 手写IOC-SPRINGPMVC-CONNPOOL

    (一)  手写IOC思路 1.扫包,将所有class文件加载到内存,判断类上是否加了ExtService注解,有就添加入map中 ,  map<String ,Object>:  key是 ...

  7. SpringMVC笔记2

    响应数据和结果视图 返回值分类 1.返回值是String 返回值类型是字符串的,会根据返回的字符串去寻找相对应的jsp页面 @Controller @RequestMapping("/use ...

  8. gdocrimg04从库无法重启问题

    1.查看error.logVersion: '5.6.25-log'  socket: '/tmp/mysqld.3324_gdocrimg04.sock'  port: 3324  Source d ...

  9. Fiddler代理手机抓包

    Fiddler代理手机抓包 0. 安装Fiddler 1. 安装HTTPS证书并允许远程连接 Tools - Options 点击OK后重启Fiddler. 确保手机与当前电脑在同一局域网. 然后在手 ...

  10. PB连接ORALCE数据库方法

    本地必须配置连接服务