《Ansible权威指南 》一 3.3 Ad-Hoc组管理和特定主机变更

3.3 Ad-Hoc组管理和特定主机变更

3.2节为大家介绍了Ansible模块列表及HELP说明获取方式。日常运维工作中,我们往往会将负责相同场景应用的主机划分为一个组,以方便统一管理。Ansible也提供了简洁但强大的组管理功能。同时,我们也可能遇到只针对这组主机中一台或某些主机做变更的场景,针对这些复杂多变的企业场景,本节我们将深入了解Ad-Hoc组管理和特定主机变更,进一步了解Ansible如何应对复杂多变的企业环境。

3.3.1 Ad-Hoc组定义

Ad-Hoc的组功能定义在Inventory文件中,默认路径是/etc/ansible/hosts,书写格式遵循INI风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。下面通过实际案例来了解Inventory文件的书写规则。
如下为Inventory文件示例,包括了组定义及冒号加端口号功能的使用。

ntp.magedu.com

[webservers]
www1.magedu.com:2222
www2.magedu.com

[dbservers]
db1.magedu.com
db2.magedu.com
db3.magedu.com

如果远程主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,如下案例为大家展示该写法。

[webservers]
www[01:50].magedu.com

[databases]
db-[a:f].magedu.com

本次架构规划了前端Proxy、Web Servers和后面DB一套完整应用,以方便大家实际参考,拓扑规划请参考图3-5。图中共定义了Proxy、App、NoSQL和DB这4个组。组配置请编辑/etc/ansible/hosts添加如下配置:

[proxy]
192.168.37.159
[app]
192.168.37.130
192.168.37.160
[nosql]
192.168.37.142
[db]
192.168.37.142

应用分布如下。

[proxy]组:Nginx;
[app]组:Nginx+PHP+Django;
[nosql]组:Redis;
[db]组:Mariadb。

如图3-5所示的架构拓扑是简化后的互联网Web服务架构,用户请求通过Proxy转发至后端WebServers响应,通过NoSQL服务缓冲后,最终将请求传送到DB。我们本章的实战内容就是通过Ansible来搭建这样一套Web服务架构。

3.3.2 Ad-Hoc配置管理:配置Proxy与Web Servers实践

本节通过配置Proxy &Web Servers学习Ad-Hoc的组管理方式,前端Proxy只用到Nginx七层代理功能,将请求转发至后端Web Servers,Web Servers同时部署Nginx、PHP和Django应用,我们按Proxy、WebServers依次顺序部署应用。
(1)Ad-Hoc配置管理Proxy(即Nginx)
安装Nginx,执行命令:

ansible proxy -m yum -a "name=nginx state=present"

利用Ansible安装Nginx,如图3-6所示。

部分执行结果诠释:

"changed": true,    // 表示本次命令对执行的目标有变更,如再执行一次则为false,表示执行的目标没
            // 有变更,这里的false和true不代表该命令执行成功或失败,只是表示执行目
            // 标是否被变更
"rc": 0,        // resultcode的简写,表示命令的执行结果状态返回,非0均为异常,命令执行失败
"results": [    // 执行结果信息返回
如果我们要检查Nginx正常安装,可以执行命令:ansible proxy -m comman

d -a "nginx -v",如果正常则返回如下内容:

192.168.37.159 | success | rc=0 >>
nginx version: nginx/1.0.15
Ansible的YUM模块同样支持指定某版本安装,其name参数指定具体版本地址(网络或本地均可)。YUM模块也支持从网络安装或从本地安装。

如果从网络安装,执行命令:

ansible proxy -m yum -a "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present"

如果从本地安装,执行命令:

ansible proxy -m yum -a "name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present"

如指定网络安装,安装期间请保障网络畅通,并可以访问Internet,具体安装时长视网络宽带质量而定,如100M带宽,该项安装进行了约2min。如图3-6为Nginx安装的部分结果反馈,Ansible在对执行结果返回提示做得确实不尽人意,虽为JSON格式输出,但换行和颜色标识功能仍有待改善。
(2)Ad-Hoc配置管理Web Servers
Web Servers需同时部署Nginx、PHP和Django,其中Nginx、PHP依然通过YUM模块实现,Django推荐使用PIP或easy_install方式。
1)Nginx、PHP安装命令如下:

ansible app -m yum -a "name=nginx state=present"
ansible app -m yum -a "name=php state=present"

2)Django安装命令如下:

步骤1:安装MySQL-python和python-setuptools依赖包。
ansible app -m yum -a "name=MySQL-python state=present"
ansible app -m yum -a "name=python-setuptools state=present"
步骤2:安装Django。
ansible app -m pip -a "name=django state=present"
步骤3:检查Django安装是否正常,执行命令如下:
ansible app -m command -a "python -c 'import django; print django.get_version()'"
其中Django依赖Python 2.7+版本,如执行报错如下,请检查Python版本。
Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/usr/lib/python2.6/site-packages/django/__init__.py", line 1, in <module>
fromdjango.utils.version import get_version
    File "/usr/lib/python2.6/site-packages/django/utils/version.py", line 7, in <module>
fromdjango.utils.lru_cache import lru_cache
    File "/usr/lib/python2.6/site-packages/django/utils/lru_cache.py", line 28
fasttypes = {int, str, frozenset, type(None)},
                ^
SyntaxError: invalid syntax

PIP和easy_install模块支持virtualenv虚拟多环境配置,该功能极为强大,是Python应用者的必备利器。如上我们使用PIP模块安装Django,众所周知easy_install也是Python安装软件包常用的工具之一,Ansible同样支持easy_install,命令类同# ansible app -m easy_install -a "name=django"即可。两者相比较而言,PIP的功能较easy_install更为强大,且支持卸载、指定版本号等。经过笔者亲测,建议使用PIP模块安装Python系列软件包,除功能强大外,我们发现PIP模块的稳定性和速度也远胜easy_install模块(CentOS 6.5 Final)。
截至目前,Proxy & Web Servers部署完毕,通过数条语句即可完成。本示例中的服务器只有4台,如果是40、400、4000台,其带来的便利和节省的时间成本是不可估量的,更为重要的是,这在很大程度上,可以保障操作的正确性。
其实上面的这些变更通过Ansible-playbook进行是更好的选择,在后面playbook章节的讲解与应用过程中大家会逐步有所体会。当然通过shell单独登录到对应的服务器也能实现我们想要完成的工作,但Ansible为我们节省了海量的时间成本,这也是我们学习Ansible的意义所在。

3.3.3 Ad-Hoc配置后端:配置NoSQL与Database Servers实践

3.3.2节我们使用Ansible配置了Proxy和Web Servers,接下来我们使用类似的方法配置NoSQL和DB服务。我们使用Redis配置NoSQL,我们使用MariaDB配置DB,之所以没有使用MySQL是因为自从MySQL被甲骨文公司收购后,虽埃里森宣称MySQL依然免费,但随着时间的推移,MySQL原班核心人马相继离开甲骨文,并创立MariaDB及MySQL社区,开发者对现有Oracle举动感到不满,行业内不少企业已在考虑使用MariaDB,或计划替换现有MySQL。
具体操作步骤如下。
Redis安装命令:ansibledb -m yum -a "name=redis state=present"。
Redis安装检查:ansibledb -m command -a "redis-cli --version"。
MariaDB安装步骤如下。
步骤1:添加yum源,vim编辑/etc/yum.repos.d/mariadb.repo添加内容如下。

# MariaDB 10.1 CentOS repository list - created 2016-02-13 04:31 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-x86
gpgkey=https:// yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
步骤2:安装MariaDB-server,
ansibledb -m yum -a "name=MariaDB-server state=present"
步骤3:安装MariaDB-client,
ansibledb -m yum -a "name=MariaDB-client state=present"
步骤4:开启防火墙3306访问权限。
ansible db -m command -a "iptables -A INPUT -s 192.168.37.0/24 -p tcp -m tcp --dport 3306 -j ACCEPT"

截至目前,如图3-5所示的应用成功部署完毕。其实我们搭建一套主流Web应用框架,期间无需登录远程主机,通过Ansible的结果返回即可判断所有操作是否正确。

3.3.4 Ad-Hoc特定主机变更

前两节我们通过搭建了一套主流Web应用框架熟悉了Ansible的组管理,接下来为大家介绍如何针对特定服务器做变更,该情景在日常运维工作中很常见。
Ansible有多种方式实现针对特定主机做变更。
1)--limit:通过--limit参数限定主机做变更。
情景:在App组中启动192.168.37.15的NTP服务。
命令用法:

ansible app -m command -a "service ntpd status" --limit "192.168.37.158"

2)指定IP:通过指定具体IP限定主机做变更。
情景:启动192.168.37.158的NTP服务。
执行命令:

ansible 192.168.37.158 -m command -a "service ntpd status"

3)用“:”作分隔符,指定多台机器做变更。
情景:启动192.168.37.158和192.168.37.161的NTP服务。
执行命令:

ansible "192.168.37.158:192.168.37.161" -m command -a "service ntpd status"

4)通过“*”泛匹配,更灵活地针对多台主机做变更。
情景:启动192.168.37.*所有主机的NTP服务。
执行命令:
```javascript
ansible 192.168.37.* -m command -a "service ntpd status"

--limit在日常工作中经常用到,Ansible-playbook也支持该参数。“:”分隔指定多主机也是不错的办法,但记得要用引号将所有地址引起来。
到目前为止Ad-Hoc组管理及特定主机变更我们已经掌握,这对灵活管理海量服务器有很大帮助,关于组及指定主机管理介绍到此结束。接下来为大家介绍的是Ad-Hoc基于用户的管理。

时间: 2024-10-30 15:50:31

《Ansible权威指南 》一 3.3 Ad-Hoc组管理和特定主机变更的相关文章

《Ansible权威指南》一3.3 Ad-Hoc组管理和特定主机变更

3.3 Ad-Hoc组管理和特定主机变更 3.2节为大家介绍了Ansible模块列表及HELP说明获取方式.日常运维工作中,我们往往会将负责相同场景应用的主机划分为一个组,以方便统一管理.Ansible也提供了简洁但强大的组管理功能.同时,我们也可能遇到只针对这组主机中一台或某些主机做变更的场景,针对这些复杂多变的企业场景,本节我们将深入了解Ad-Hoc组管理和特定主机变更,进一步了解Ansible如何应对复杂多变的企业环境. 3.3.1 Ad-Hoc组定义 Ad-Hoc的组功能定义在Inven

Ansible权威指南.

Linux/Unix技术丛书 Ansible权威指南 李松涛 魏 巍 甘 捷 著 图书在版编目(CIP)数据 Ansible权威指南 / 李松涛,魏巍,甘捷著. -北京:机械工业出版社,2016.11 (Linux/Unix技术丛书) ISBN 978-7-111-55329-8 I. A- II. ①李- ②魏- ③甘- III. 程序开发工具-指南 IV. TP311.561-62 中国版本图书馆CIP数据核字(2016)第258615号 Ansible权威指南 出版发行:机械工业出版社(北

《Ansible权威指南 》一 导读

前 言 为什么要写这本书 首次接触Ansible是缘于一次杭州出差.当时接触互联网3年左右,正是技能的储备阶段,看到Ansible这样的新兴自动化工具不免充满好奇.当时腾讯的蓝鲸还没有出来,但abs脚本和ijobs自动化体系已经应用多年,并在整个IEG中心广泛应用.大型企业讲究分工精细化,各司其职,强大的自我研发能力.但伴随业绩和KPI的压力,很多人其实是没有多余精力关注外界技术领域的发展,尤其是游戏行业,行业自身属性对开发人员的技术能力要求非常高,前沿开源技术与业务特殊性需求并不能很好地融合,

《Ansible权威指南》一3.4 Ad-Hoc用户与组管理

3.4 Ad-Hoc用户与组管理 用户权限管理是运维日常最重要的管理工作之一,如生产环境禁用开发和测试人员登录变更,但测试环境的用户权限仍需耗费精力维护,这项工作大公司也存在(将测试环境交给测试或开发管理并不是每个公司都能做到的,但未来是趋势).所以掌握Ad-Hoc用户与组管理很有用,如笔者现在的公司每次大版本更新后都会大量修改所有服务器密码.每次需要修改数十台服务器环境密码,若手动单台登录修改可是一项不小的工作,并且手动方式难免会出错误.本节为大家介绍Ad-Hoc用户与组管理. Ansible

《Ansible权威指南 》一3.4 Ad-Hoc用户与组管理

3.4 Ad-Hoc用户与组管理 用户权限管理是运维日常最重要的管理工作之一,如生产环境禁用开发和测试人员登录变更,但测试环境的用户权限仍需耗费精力维护,这项工作大公司也存在(将测试环境交给测试或开发管理并不是每个公司都能做到的,但未来是趋势).所以掌握Ad-Hoc用户与组管理很有用,如笔者现在的公司每次大版本更新后都会大量修改所有服务器密码.每次需要修改数十台服务器环境密码,若手动单台登录修改可是一项不小的工作,并且手动方式难免会出错误.本节为大家介绍Ad-Hoc用户与组管理. Ansible

《Ansible权威指南》一 2.6 Ansible与正则

2.6 Ansible与正则 正则表达式(Patterns)是各类高级语言的必定支持的方法之一,Ansible也不例外.其Patterns功能等同于正则表达式,语法使用也和正则类同,这大大便利了运维的使用.其对于Ansible的灵活性有着极大贡献,该功能同样支持Ansible-playbook.其用法也非常简单 ansible pattern_goes_here -m module_name -a arguments 该功能主要针对Inventory的主机列表使用,我们通过一些案例可以更好地了解

《Ansible权威指南 》一2.6 Ansible与正则

2.6 Ansible与正则 正则表达式(Patterns)是各类高级语言的必定支持的方法之一,Ansible也不例外.其Patterns功能等同于正则表达式,语法使用也和正则类同,这大大便利了运维的使用.其对于Ansible的灵活性有着极大贡献,该功能同样支持Ansible-playbook.其用法也非常简单. ansible -m -a 该功能主要针对Inventory的主机列表使用,我们通过一些案例可以更好地了解其功能及用法.在如下示例中主要针对webservers进行正则匹配: // 重

《Ansible权威指南 》一2.5 Ansible Inventory配置及详解

2.5 Ansible Inventory配置及详解 Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts.为方便批量管理主机,便捷使用其中的主机分组,Ansible通过Inventory来定义其主机和组,在使用时通过–i或--inventory-file指定读取,与Ansible命令结合使用时组合如下: ansible –i /etc/ansible/hosts webs –m ping 如果只有一个Inven

《Ansible权威指南》一1.1 Ansible是什么

1.1 Ansible是什么 随着移动互联.物联网.互联网+.大数据.云计算等大规模应用的催生推动,以及人们日常生活的互联网化,互联网的蓬勃发展不仅冲击影响着整个经济体,更对人们的生活理念影响深远.在体验到互联网带来的便利和舒适的同时,人们也不再满足于"可以用",而是要"用得爽",在政策.需求.利益.趋势等原因的刺激下,互联网的发展速度可想而知.众所周知,智能的背后意味着复杂,这一现象在互联网的发展中体现得淋漓尽致.在互联网迅猛发展的同时,运维这个工种也从默默无闻的