Ansible_Day1
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的更多相关文章
随机推荐
- 【翻译】Flink Table Api & SQL —— Overview
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...
- Netty实现SSL双向验证完整实例
Netty实现SSL双向验证完整实例 博客分类: netty nettyssl自签证书 一.证书准备 要使用ssl双向验证,就必须先要生成服务端和客户端的证书,并相互添加信任,具体流程如下(本人调试 ...
- Echartjs axis.getAxesOnZeroOf is not a function
该问题已经解决,下面是解决思路! 问题描述: axis.getAxesOnZeroOf is not a function 使用echart 出现报这句错误,请求解决方案! 问题原因: 我给坐标设置了 ...
- typeof与instanceof运算符
typeof运算符用来判断某个变量的数据类型.typeof()返回值类型有如下几种: 1.number :数值类型 2.string :字符串类型 3.boolean :布尔型 4.function: ...
- [转帖]Reactor模式
Reactor模式 https://www.cnblogs.com/crazymakercircle/p/9833847.html 看不懂代码 只看的图.. 疯狂创客圈,一个Java 高并发研习社群 ...
- K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署
Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...
- liunx 定时任务执行java程序配置流程
java jar包使用build fat jar进行打包 ------------------liunx任务创建--------------------------- 1.查看现有任务计划: cron ...
- typedefine 用法
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 用法: 变量别名 例如: 单个变量: t ...
- Django连接多个数据库并实现读写分离
当一个项目当中有大量的数据的时候,你所有的IO操作都在一个数据库中操作,会造成项目的性能的降低.如果你能对项目中的数据进行读写分离的话,那么将大大提高你项目的性能.而Django自带的机制也对此提供了 ...
- xorm - Update,乐观锁,更新时间updated,NoAutoTime()
更新数据使用Update方法 Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型. 当传入的为结构体指针时,只有非nil和非0的 ...