设为首页 收藏本站
查看: 1161|回复: 0

[经验分享] ansible 发部署nginx以及更新、回滚

[复制链接]

尚未签到

发表于 2018-7-29 08:46:29 | 显示全部楼层 |阅读模式
  ansible 发部署nginx以及更新、回滚
  ansible 和 saltstack 一样都是基于 Python 开发的,是比 puppet 和 saltstack 更轻量级的运维自动化工具。
  一:安装ansible
  开启俩台centos
  Master 192.168.0.6
  Slave 192.168.0.8
  二:编辑vim /etc/hosts
DSC0000.jpg

  三:安装 ansible
  [root@master /]# yum install -y epel-release
  [root@master /]# yum install -y ansible
  四:ssh 密钥配置  直接回车 不设置密钥密码

  这样会在root目录下生产.ssh目录  会生成两个文件>
DSC0001.png

  2)把公钥(id_rsa.pub)内容放到本机和远程客户机的 /root/.ssh/authorized_keys 里面
  本机
DSC0002.png

  [root@master .ssh]# cat /root/.ssh/authorized_key >> /root/.ssh/authorized_key
DSC0003.png

  五 ansiblc配置
  [root@master .ssh]# vim /etc/ansible/hosts
DSC0004.png

  测试执行远程命令  "-m" 指定模块名,"-a" 指定相应命令,这样就可以批量执行命令
DSC0005.png

  2 (1远程执行shcll脚本
DSC0006.png

  2把脚本分到远程主机
DSC0007.png

  2 批量执行脚本
DSC0008.png

  2 在远程主机上查看
DSC0009.png

  2 拷贝文件
DSC00010.png

  6拷贝目录
DSC00011.png

  远程主机查看
DSC00012.png

DSC00013.png

  一:首先我们需要在安装了 ansible 的机器上编译安装好nginx
DSC00014.png

  二:安装依赖包
DSC00015.png

  三配置编译参数 结束后在 make && make install  编译
DSC00016.png

  四:编写启动脚本
DSC00017.png

DSC00018.png

DSC00019.png

  保存退出修改启动脚本权限
  # chmod 755 /etc/init.d/nginx
  五:更改配置文件
  [root@localhost nginx-1.4.4]# > /usr/local/nginx/conf/nginx.conf    清空原有的配置
  [root@localhost nginx-1.4.4]# vim /usr/local/nginx/conf/nginx.conf
DSC00020.png

DSC00021.png

  保存退出后检查版本是否正常
DSC00022.png

  启动nginx服务
DSC00023.png

  Keepalived安装
  优势:主要用来提供故障切换和健康检查,节点高可用,及时隔离并替换新的服务器
  [root@master /]# yum -y install gcc gcc+ gcc-c++
  [root@slave nginx-1.4.4]# yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel -y
  安装keepalived 然后编译
  [root@master keepalived-1.2.13]# ./configure && make && make install
DSC00024.png

DSC00025.png

DSC00026.png

  飘逸地址已经成功  下面配置backup端 提高高可用性
DSC00027.png

  将master端keepalived暂停飘逸IP地址自动切换 修复完成 自动切换回来 实现高可用
DSC00028.png

  roles目录下有三个角色,common为一些准备操作,delete为删除nginx的操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。
  2:打包nginx拷贝文件
  [root@master local]# tar czvf nginx.tar.gz nginx
DSC00029.png

  3:定义common的sasks
  [root@master local]# cd /etc/ansible/nginx_install/roles/
  [root@master roles]# vim common/tasks/main.yml
DSC00030.png

  4:定义install的vars
DSC00031.png

  这里的 nginx_user 要与 nginx.conf 配置文件中定义的用户一致
  5:定义install的tasks
DSC00032.png

  拷贝文件到远程机器/tmp/目录下,然后解压。其中的 copy: src 相对于 install/files/ 目录下,template: src 相对于 install/templates/ 目录下。
DSC00033.png

  对远程机器建立用户,启动服务,删除压缩包等操作。不过我们还可以定义nginx_web_dir目录,存放虚拟主机文件
DSC00034.png

  创建的是调用 copy.yml 和 install.yml 的文件。
  6:定义总入口文件
  [root@master roles]# cd /etc/ansible/nginx_install/
DSC00035.png

  7:执行下发
  先修改下 hosts 文件,因为之前实验把本机也添加到了 [testhost] 组里面去了,这里只保留一个远程机:
DSC00036.png

  [root@master nginx_install]# ansible-playbook install.yml
DSC00037.png

  8:在远程机上测试结果
DSC00038.png

  三 更新nginx
  生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下。
  1 新建及拷贝文件
  [root@master ansible]# mkdir -p nginx_config/roles
  [root@master ansible]# cd nginx_config/roles/
  [root@master roles]# mkdir -p new/{vars,files,tasks,handlers}
  [root@master roles]# cp /usr/local/nginx/conf/nginx.conf new/files
  [root@master roles]# cp -r /usr/local/nginx/conf/vhosts new/files
  其中 new 为更新时用到的,后面会新建old 为回滚时用到的,new/files 下面为 nginx.conf文件 和 vhosts 目录,handlers 为重启 nginx 服务所需目录。
  2 定义变量
DSC00039.png

  3 定义重新加载
DSC00040.png

  4 定义tasks核心任务
DSC00041.png

  4 定义总入口配置
DSC00042.png

  4 测试更新 新建一个虚拟主机配置文件
DSC00043.png

  2 发布更新
  [root@master nginx_config]# ansible-playbook update.yml
  3 远程主机查看同步成功
DSC00044.png

  四 回滚nginx
  关于回滚,需要在执行 playbook 之前先备份一下旧的配置千万不能随便去修改线上机器的配置,并且要保证 new/files 目录下面的配置和线上的配置一致。
  1 备份
  [root@master nginx_config]# mkdir roles/old
  [root@master nginx_config]# rsync -av roles/new/roles/old
  这里用rsync而不用cp,是因为rsync会直接覆盖相同的文件。
  2 定义回滚入口
DSC00045.png

  1 更新 修改虚拟主机文件
DSC00046.png

  1 下发更新 远程主机是否更新成功
DSC00047.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542811-1-1.html 上篇帖子: Ansible--playbook介绍 下篇帖子: Ansible源码解析 Inventory组概念
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表