内容简介: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。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Uberland
Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00
Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!