网站首页 > 技术教程 正文
关于 Ansible
Ansible(https://www.ansible.com/)是一个对运维非常友好的自动化工具,经过数年的开发,它已经具有上千个模块,覆盖了非常多的使用场景。今天,我们的运维工程师,就给大家分享一个维护更新 nginx 配置的用例。
主流 Linux 的新版本里,都可以直接按照 ansible,例如在 Ubuntu 里,可以通过 apt 命令安装:
apt-get install -y ansible
业务场景
我们目前有 8 个大区共 24 台 nginx 服务器,每个区除了 upstream 地址不同,其它配置参数都一样。自从使用了 ansible 来维护更新后,工作变得非常轻松,几分钟内就可以更新所有 24 台服务器的 nginx 配置。并且实现了检查配置有误后,自动恢复上一次配置的机制。
以下就以此为例,展示如何利用 ansible 在自动化部署 nginx 时,如何规避错误的配置。
首先看看我的 nginx role 目录结构
deploy.Nginx/
├── files
│ └── nginx.conf
├── tasks
│ ├── Debian.yml
│ ├── main.yml
│ └── sites_conf_test.yml
└── templates
├── mydomain1_com.j2
└── mydomain1_com.j2
其中,roles/deploy.Nginx/tasks/main.yml 里 include sites_conf_test.yml 的代码片段:
? include: sites_conf_test.yml
vars:
– file: '{{ item }}'
with_items:
– 'mydomain1_com'
– 'mydomain2_com'
这里传递了变量 file 的值给 sites_conf_test.yml,这样我们可以扩展配置多个站点配置文件。每更新一个站点配置,都自动检查配置是否正确。如果正确,则让 nginx 加载新配置。
roles/deploy.Nginx/tasks/sites_conf_test.yml 的代码:
? name: 创建 ~/'{{ file }}.conf'
template:
src: '../templates/{{ file }}.j2'
dest: '~/{{ file }}.conf'
register: createResult
? block:
– name: "拷贝 ~/{{ file }}.conf 到 /etc/nginx/sites-enabled/ 目录"
copy:
src: '~/{{ file }}.conf'
dest: '/etc/nginx/sites-enabled/{{ file }}.conf'
backup: yes
remote_src: yes
register: copyResult
when: createResult.changed
– name: '检查 {{ file }}.conf 是否正确。'
command: nginx -t
when: copyResult.changed
– name: 重新加载 nginx
service:
name: nginx
state: reloaded
rescue:
? name: '{{ file }}.conf 检查失败,回滚到上一个配置.'
copy:
src: '{{ copyResult.backup_file }}'
dest: '/etc/nginx/sites-enabled/{{ file }}.conf'
remote_src: yes
代码解析
首先使用 template 模块,在服务器上生成 nginx 站点的配置文件。然后拷贝进 nginx 站点目录里,并且会把原文件做备份,记录下备份文件的绝对路径。
然后,重点就在这个 block 编排里。第一个 task 是把生成的 mydomain1_com1.conf 文件拷贝到 /etc/nginx/sites-enabled/ 目录下,因为启用了 backup 参数,所以 copyResult 会包含 backup_file 的绝对路径地址名称。这个就用在配置回滚操作中。
第二个 task 就是执行 nginx -t 来确认新配置文件是否正确了。如果失败了,就会触发 rescue 里的任务。我们只需要把备份文件恢复,保证服务器上的配置是好的。
猜你喜欢
- 2024-10-15 haproxy和nginx负载均衡(nginx负载均衡ip_hash策略)
- 2024-10-15 Centos 7 network.service 启动失败
- 2024-10-15 nginx做负载后导致登录失败返回新的cookie原因分析
- 2024-10-05 nginx报错之413 Request Entity Too Large导致文件上传失败的问题
- 2024-10-05 Nginx系列:Nginx自带后端健康检查
- 2024-10-05 Nginx负载均衡健康检测,你了解过吗?
- 2024-10-05 Nginx负载均衡原理及应用实践(nginx负载均衡策略有哪些,它是如何实现的)
- 2024-10-05 SSL证书安装失败怎么办?看这里教你轻松解决
- 2024-10-05 「系统架构」Nginx调优之变量的使用(4)
- 2024-10-05 面试中关于Nginx的十问九答(面试中关于nginx的十问九答有哪些)
你 发表评论:
欢迎- 08-06linux 和 windows文件格式互相转换
- 08-06谷歌 ChromeOS 已支持 7z、iso、tar 文件格式
- 08-06Linux下比较文件内容的6种方法
- 08-06文件格式及功能汇总
- 08-0610个Linux文件内容查看命令的实用示例
- 08-06Linux-如何区分不同文件类型
- 08-06Zabbix技术分享——监控windows进程资源使用情况
- 08-06Linux系统卡顿?学会ps命令这三招,轻松定位问题进程
- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)