内容简介:2010年左右,当时系统多数运行在小型机上,如HP、Sun、IBM小型机,如某系统当时使用10台小型机,但随着业务量不断增长,前几年去如何运维成百上千台的主机成为一个挑战,本人经历过如下3阶段:最近一项目作者使用
前言
2010年左右,当时系统多数运行在小型机上,如HP、Sun、IBM小型机,如某系统当时使用10台小型机,但随着业务量不断增长,前几年去 IOE 的火热进行,开源技术的不断发展,原先使用10台小型机的系统在如今可能已暴涨似增涨到使用百来台 X86 Linux 主机。
如何运维成百上千台的主机成为一个挑战,本人经历过如下3阶段:
- 延用管理小型机时的方法:编写 shell 脚本,而后通过scp拷贝到各台主机,最后ssh远程执行脚本,但此方法的弊端是:shell脚本很难重复运行,如若脚本中间环节报错,则脚本前面所做的事情需清理,费时费力;
- 使用 puppet 自动运维工具,其提供了一系列常用模块可用,但此 工具 过于复杂,其需在被管理主机安装agent,如其提供的模块未能满足管理需求,则扩展模块比较难。
- 使用 ansible 自动运维工具,其同样提供了常用模块可用,但较于 puppet 轻量,无需在被管主机安装agent,其核心是通过ssh登录主机执行命令,使用方式简单,学习成本低。
最近一项目作者使用 ansible 批量管理了200多台 PC Server ,所做事情简单描述如下:
- 配置网卡主备绑定( bonding )并进行切换测试;
- 配置主机磁盘Raid,格式化磁盘,挂载文件系统,创建用户;
- 主机安装Jdk、Oracle客户端、TimesTen等客户端;
- 配置ZK、Weblogic、 Redis 等集群;
ansible为何如此强大且好用,作者决定使用实战方式带领初学者迅速掌握此工具,从入门到精通。
环境描述
本示例准备了两台虚拟机,操作系统版本为Centos 7.6,主机均采用 最小化模式 安装。
% cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) % cat /root/anaconda-ks.cfg ... %packages @^minimal @core kexec-tools ...
两主机IP地址如下:
% cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 okd-l01 192.168.18.2 okd-i01 192.168.18.3
Ansible 安装
对于非 RHEL 系列主机安装 ansible 可参考官方文档 Installation Guide 。
控制节点
okd-l01主机能连接英特网,下面将在此主机上安装ansible软件。
- ansible在 epel 源里,故先为系统配置 epel 源:
% rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm
- 安装ansible:
% yum -y install ansible
- 执行如下命令查看当前版本:
% ansible --version ansible 2.7.5 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Apr 9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
被控节点
okd-l01与okd-i01均作为ansible被管主机,需满足如下条件:
- 机器必须开启ssh服务,控制节点必须能通过ssh连接到被控节点,而对于任何 Linux 发行版本来说,ssh都是默认开启的;
- 机器必须安装有 python 命令,索性的是centos 7即使最小化安装也会安装python 2.7;
-
主机若关闭了selinux( /etc/selinux/config 文件中设置
SELINUX=disabled
并重启)则无需安装 libselinux-python 软件包,否则需安装此软件包以避免 copy/file 等模块报错。% yum -y install libselinux-python
运行第一个任务
假设我们需在远程主机okd-i01上创建/test目录,若采用ssh方式,我们可在okd-l01执行命令:
ssh 192.168.18.3 'mkdir /test'
那么,采用ansible如何做同样的事情呢?首先需将被控主机的主机名或ip地址写入到 清单文件 ( inventory )中,作者在okd-l01上使用root用户为本实验在/root/test目录下创建清单文件hosts:
% mkdir /root/test && cd /root/test % echo 192.168.18.3 > hosts
如同ssh命令类似,我们其替换为ansible后执行如下命令即可:
-
ssh
命令替换为ansible
命令; -
-i hosts
参数指定清单文件名为hosts,而后紧接着输入ansible管理的被控主机ip地址; -
-a
参数后接执行的命令mkdir /test
; -
-k
参数提示输入被控主机的用户密码。
% ansible -i hosts 192.168.18.3 -a"mkdir /test" -k # 因作者采用root用户执行,故默认此命令将使用root连接到远程主机, # 此处需输入被控主机的ssh密码: SSH password: # 告警信息: [WARNING]: Consider using the file module with state=directory rather than running mkdir. If you need to use command because file is insufficient you can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message. # 命令返回结果: 192.168.18.3 | CHANGED | rc=0 >>
如上为最简单的ansible使用方式,其仅是替换为之前运行的ssh命令,接下来作者将详细讲解用于生产时所需知晓的必要知识。
- 本人从10年进入电信业工作,经历过系统从几十台小型机迁移到上百台X86 PC Server或云计算虚拟化主机上的过程。
- 可使用任何用户运行ansible命令。
- 文件名称随意,但建议名为hosts或inventory。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Oricle8i Web开发指南
(美)Bradley D.Brown / 机械工业出版社 / 2001-6 / 78.00元
本书用实际通用的策略,阐明了怎样一起来看看 《Oricle8i Web开发指南》 这本书的介绍吧!