[关闭]
@Great-Chinese 2017-03-23T00:08:27.000000Z 字数 15136 阅读 1011

自动化运维

自动化运维


1.1 puppet安装准备工作

  1. # 两台机器
  2. 192.168.31.127 (服务端)
  3. 192.168.31.128 (客户端)
  4. # 设置两台hostname
  5. vim /etc/sysconfig/network
  6. HOSTNAME=web9.melody.com
  7. HOSTNAME=web10.melody.com
  8. # 编辑两台hosts
  9. vim hosts
  10. 192.168.31.127 web9.melody.com
  11. 192.168.31.128 web10.melody.com
  12. # 查看两台hostname
  13. cat /etc/sysconfig/network
  14. # 两台机器关闭selinux,清空iptables规则
  15. vim /etc/selinux/config
  16. setenforce 0
  17. iptables -nvL
  18. # 在两台机器上ping
  19. ping web9.melody.com
  20. ping web10.melody.com
  21. # 两台机器上安装ntpdate,
  22. yum install -y ntp
  23. ntpdate time.windows.com >/dev/null 2>&1
  24. # 两台机器上制定任务计划
  25. crontab -e
  26. */10 * * * * ntpdate time.windows.com >/dev/null 2>&1

1.2 puppet安装

1.2.1 puppet服务端安装-192.168.31.127

  1. # 安装puppet源
  2. rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
  3. ls /etc/yum.repos.d/ # 查看安装源包
  4. # 安装服务端程序
  5. yum install -y puppet-server
  6. ls /etc/init.d/puppetmaster # 查看puppet
  7. # 开机启动
  8. chkconfig puppetmaster on
  9. # 启动服务
  10. service puppetmaster start
  11. ps aux |grep puppet # 查看进程
  12. netstat -lnp # 查看监听窗口

1.2.2 puppet客户端安装-192.168.31.128

  1. # 安装puppet源
  2. rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
  3. ls /etc/yum.repos.d/ # 查看安装源包
  4. # 安装客户端程序
  5. yum install -y puppet
  6. ls /etc/init.d/puppet # 查看puppet
  7. # 修改配置文件
  8. vim /etc/puppet/puppet.conf //在最后面添加
  9. listen = true
  10. server = web9.melody.com
  11. runinterval = 10
  12. # 开机启动
  13. chkconfig puppet on
  14. # 启动服务
  15. service puppet start
  16. /etc/init.d/puppet start
  17. ps aux |grep puppet # 查看进程
  18. netstat -lnp # 查看监听窗口

1.3 puppet配置证书

  1. # 服务端查看客户端所有证书列表
  2. puppet cert list --all //带一个+表示证书已签发
  3. # 客户端上生成ssl证书
  4. puppet agent --test --server web9.melody.com
  5. # 服务端签发指定客户端证书
  6. puppet cert --sign web10.melody.com
  7. # 服务端可以删除指定客户端证书
  8. puppet cert clean web10.melody.com
  9. # 删除的证书可以重启或手动重新生成证书
  10. /etc/init.d/puppet restart
  11. rm -rf /var/lib/puppet/ssl/* //证书存放的目录
  12. # 删除所有证书
  13. puppet cert clean --all

1.4 puppet配置自动签发证书

1.4.1 服务端配置

  1. # 服务端修改puppet配置文件
  2. vim /etc/puppet/puppet.conf //在[main]最后添加
  3. autosign = true
  4. # 服务端创建自动签发的配置文件
  5. vim /etc/puppet/autosign.conf //增加内容如下
  6. *.melody.com
  7. # 服务端删除所有客户端证书
  8. puppet cert clean --all
  9. # 重签之后,服务端重启
  10. /etc/init.d/puppetmaster restart
  11. # 客户端删除所有证书
  12. rm -rf /var/lib/puppet/ssl/* //证书存放的目录
  13. # 重签之后,客户端重启
  14. service puppet restart
  15. #
  16. puppet cert list --all

1.4.2 客户端配置

  1. # 修改客户端配置文件
  2. vim /etc/puppet/puppet.conf //在最后面添加
  3. listen = true
  4. server = web9.melody.com
  5. runinterval = 10
  6. # 删除旧的证书资料
  7. rm -rf /var/lib/puppet/ssl/*
  8. # 重启客户端
  9. /etc/init.d/puppet restart
  10. puppet agent --test --server web9.melody.com //如果客户端不重启,也可以通过此命令来自动签发

1.5 puppet测试证书

  1. # 在服务端编辑manifests文件
  2. vim /etc/puppet/manifests/site.pp
  3. node defalt {
  4. file {"/tmp/333.txt":
  5. content => "test,test";
  6. }
  7. }
  8. # 服务端重启
  9. /etc/init.d/puppetmaster restart
  10. # 客户端查看文件是否生成
  11. ls -l /tmp/

1.6 puppet配置模块--即同步文件

模块是puppet的配置单元,模块里面会包含类和资源。同步文件、远程执行命令、cron等叫做资源,都是通过模块来 实现的。

  1. # 服务端创建目录
  2. mkdir /etc/puppet/modules/testm
  3. cd /etc/puppet/modules/testm
  4. mkdir {files,manifests,templates}
  5. cd files/
  6. vim 1.txt
  7. # 服务端创建配置文件
  8. vim /etc/puppet/modules/testm/manifests/init.pp
  9. class testm{
  10. file {"/tmp/2.txt":
  11. owner => "root",
  12. group => "root",
  13. mode => 0400,
  14. source => "puppet://$puppetserver/modules/testm/1.txt"
  15. }
  16. }
  17. # 服务端定义主配置文件
  18. vim /etc/puppet/manifests/site.pp
  19. $puppetserver='web9.melody.com'
  20. node 'web10.melody.com' {
  21. include testm
  22. }
  23. # 配置完成后,在客户端执行命令,如果puppet服务已启动,不用执行此命令也会自动同步的
  24. puppet agent --test --server=web9.melody.com

1.7 puppet文件或目录资源--即同步一个目录

  1. # 服务端增加相关目录
  2. cd /etc/etc/puppet/modules/testm/files
  3. mkdir apache2
  4. cd apache2
  5. mkdir {bin,conf,logs}
  6. # 服务端编辑模块配置文件
  7. vim /etc/puppet/modules/testm/manifests/init.pp
  8. class apache{
  9. file {"/usr/local/apache2":
  10. owner => "root",
  11. group => "root",
  12. source => "puppet://$puppetserver/modules/testm/apache2",
  13. recurse => true,
  14. purge => true
  15. }
  16. }
  17. # 服务端定义主配置文件
  18. vim /etc/puppet/manifests/site.pp
  19. $puppetserver='web9.aming.com'
  20. node 'web10.melody.com' {
  21. include testm
  22. include apache
  23. }
  24. # 客户端上查询
  25. puppet agent --test --server=web9.melody.com //在客户端上手动执行
  26. ls /usr/local
  27. ls -l /usr/local/apache2
  28. cat /usr/local/apache2/conf/httpd.conf

1.8 puppet远程执行命令

  1. # 服务端编辑模块配置文件
  2. vim /etc/puppet/modules/testm/manifests/init.pp
  3. exec {"123":
  4. unless => "test -f /tmp/melodylinux.txt", // 第二种情况把unless改成onlyif
  5. path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],
  6. command => "touch /tmp/melodylinux.txt"
  7. }
  8. # unless后面的命令作为一个条件,当条件成立时,不会执行下面的命令
  9. # onlyif 如果条件成立里要执行下面的命令就用onlyif
  10. # 在客户端查看有没有生成文件
  11. ls -lt /tmp

1.9 puppet配置cron

  1. # 服务端编辑模块配置文件
  2. vim /etc/puppet/modules/testm/manifests/init.pp
  3. cron { "melody1":
  4. command => "/sbin/ntpdate time.windows.com",
  5. user => "root",
  6. minute => "*/10",
  7. monthday => "10-15",
  8. # ensure => "absent"
  9. }
  10. }
  11. # ensure设置为absent表示删除改任务
  12. # 在客户端查看任务计划
  13. crontab -l

2.0 saltstack安装配置认证

  1. # 主从两台机器
  2. 192.168.31.127 -服务端
  3. 192.168.31.128 -客户端
  4. # 设置hostname与hosts
  5. 192.168.31.127 web9.melody.com
  6. 192.168.31.128 web10.melody.com
  7. # 关闭seliunx,清空iptables规则
  8. # 服务端---安装salt
  9. yum install -y epel-release
  10. yum install -y salt-master salt-minion
  11. # 服务端/客户端统一修改配置文件
  12. vim /etc/salt/minion
  13. master:web9.melody.com
  14. # 启动salt
  15. /etc/init.d/salt-master start
  16. /etc/init.d/salt-minion start
  17. # 客户端---安装salt
  18. yum install -y epel-release
  19. yum install -y salt-minion
  20. # 服务端/客户端统一修改配置文件
  21. vim /etc/salt/minion
  22. master:web9.melody.com
  23. # 客户端启动salt
  24. /etc/init.d/salt-minion start

2.1 saltstack配置认证

  1. salt-key // 查看已经签发的客户端信息
  2. salt-key -a web10.melody.com // 认可一台服务器
  3. salt-key -a web9.melody.com // 再认可一台服务器
  4. # 此时客户端的/etc/salt/pki/minion目录下,会多出minion_master.pub这个文件。
  5. # 远程执行命令
  6. salt '*' test.ping
  7. salt '*' cmd.run 'df -h'
  8. salt '*' cmd.run 'hostname'
  9. salt '*' cmd.run 'w'
  10. salt 'web9.melody.com' cmd.run 'w'
  11. salt -E 'web(9|10).melody.com' cmd.run 'w' // 正则表达式
  12. salt '*melody.com' cmd.run 'w'
  13. salt 'web*' cmd.run 'w'
  14. salt -L 'web9.melody.com,web10.melody.com' cmd.run 'w' //多个机器用逗号分隔

2.2 saltstack grains--在客户端上定义的

  1. salt 'web10.melody.com' grains.ls // 列出所有的grains项目名字
  2. salt 'web10.melody.com' grains.items // 列出所有的grains项目名字及值
  3. # 客户端上增加grains文件
  4. vim /etc/salt/grains //增加内容如下
  5. role: nginx
  6. env: test
  7. myname: melodylinux.com
  8. mydomain: apelearn.com
  9. # 客户端重启
  10. /etc/init.d/salt-minion restart
  11. # 服务端获取grains
  12. salt 'web10.melody.com' grains.item env
  13. salt 'web10.melody.com' grains.item role env myname
  14. salt 'web10.melody.com' grains.ls
  15. salt 'web10.melody.com' grains.item role env myname
  16. # 借助grains的一些属性信息来执行命令
  17. salt -G mydomain:apelearn.com cmd.run 'w'

2.3 saltstack pillar--在服务端上定义的

  1. # 在服务端打开主配置文件,
  2. vim /etc/salt/master //把下面三行前面的#去掉,
  3. pillar_roots:
  4. base:
  5. - /srv/pillar
  6. # 创建对应的目录
  7. mkdir /srv/pillar
  8. cd /srv/pillar
  9. # 进入pillar目录下,自定义test文件
  10. vim /srv/pillar/test.sls // 内容如下
  11. conf: /etc/123.conf
  12. myname: melody
  13. # 编辑总入口配置文件
  14. vim /srv/pillar/top.sls // 格式如下
  15. base:
  16. 'web10.melody.com':
  17. - test
  18. # 重启master服务
  19. /etc/init.d/salt-master restart
  20. salt '*' pillar.items // 列出所有的pillar项目名字及值
  21. salt '*' pillar.item conf //查看其中conf的值
  22. # 刷新pillar,不需要重启服务
  23. salt '*' saltutil.refresh_pillar

2.4 saltstack配置apache

  1. # 在服务端打开主配置文件
  2. vim /etc/salt/master //把下面三行前面的#去掉,
  3. file_roots:
  4. base:
  5. - /srv/salt/
  6. # 在服务端创建目录并进入
  7. mkdir -p /srv/salt
  8. cd /srv/salt
  9. # 在服务端创建top文件
  10. vim /srv/salt/top.sls
  11. base:
  12. 'web10.melody.com':
  13. - apache
  14. # 重启master
  15. /etc/init.d/salt-master restart
  16. # 在服务端编辑apache文件
  17. vim /srv/salt/apache.sls
  18. apache-service:
  19. pkg.installed:
  20. - names:
  21. - httpd
  22. - httpd-devel
  23. service.running:
  24. - name: httpd
  25. - enable: True
  26. # 在服务端执行命令
  27. salt 'web10.melody.com' state.highstate
  28. # 在客户端查看httpd是否已启动
  29. ps aux |grep httpd
  30. /etc/init.d/httpd stop
  31. chkconfig httpd off
  32. chkconfig --list httpd
  33. ps aux |grep httpd
  34. chkconfig --list httpd

2.5 saltstack文件和目录管理

2.5.1 saltstack文件

  1. # 进入/srv/salt目录,操作如下步骤
  2. cd /srv/salt
  3. mkdir test
  4. mkdir test/123
  5. vim test/123/1.txt
  6. # 修改filetest文件
  7. vim filetest.sls //增加内容如下
  8. file_test:
  9. file.managed:
  10. - name: /tmp/melodylinux.com
  11. - source: salt://test/123/1.txt
  12. - user: root
  13. - group: root
  14. - mode: 600
  15. # 修改top文件
  16. vim top.sls // 增加内容如下
  17. base:
  18. 'web10.melody.com':
  19. - apache
  20. - filetest
  21. # 接着在服务端执行命令
  22. salt 'web10.melody.com' state.highstate
  23. # 然后在客户端查看melodylinux.com文件是否生成
  24. ls -l /tmp
  25. cat /tmp/melodylinux.com

2.5.2 saltstack目录管理

  1. # 进入/srv/salt目录,操作如下步骤
  2. cd /srv/salt
  3. vim dirtest.sls // 增加内容如下
  4. file_dir:
  5. file.recurse:
  6. - name: /tmp/testdir
  7. - source: salt://test/123
  8. - user: root
  9. - file_mode: 644
  10. - dir_mode: 755
  11. - mkdir: True
  12. - clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
  13. # 修改top文件
  14. vim top.sls // 增加内容如下
  15. base:
  16. 'web10.melody.com':
  17. - filetest
  18. - dirtest
  19. # 在服务端执行命令
  20. salt 'web10.melody.com' state.highstate
  21. # 然后在客户端查看testdir目录是否生成
  22. ls -l /tmp
  23. cat /tmp/testdir

2.6 saltstack远程执行命令

  1. # 进入/srv/salt目录,操作如下步骤
  2. cd /srv/salt
  3. vim cmdtest.sls // 增加内容如下
  4. cmd_test:
  5. cmd.run:
  6. - onlyif: test -f /tmp/melodylinux.txt // unless 相反 //?????????????????????用onlyif命令才会创建成功,unless则不会跟老师讲的相反
  7. - names:
  8. - touch /tmp/melody123.txt
  9. - mkdir /tmp/456
  10. - user: root
  11. # 修改top文件
  12. vim top.sls // 增加内容如下
  13. base:
  14. 'web10.melody.com':
  15. - cmdtest
  16. # 在服务端执行命令
  17. salt 'web10.melody.com' state.highstate
  18. # 然后在客户端查看melody123.txt文件和456目录是否生成
  19. ls -l /tmp

2.7 saltstack远程执行shell脚本

  1. # 进入/srv/salt目录,操作如下步骤
  2. cd /srv/salt
  3. vim shelltest.sls // 增加内容如下
  4. shell_test:
  5. cmd.script:
  6. - source: salt://test/1.sh
  7. - user: root
  8. # 编辑脚本内容
  9. vim test/1.sh // 增加内容如下
  10. #!/bin/bash
  11. touch /tmp/111.txt
  12. if [ -d /tmp/1233 ]
  13. then
  14. rm -rf /tmp/1233
  15. else
  16. mkdir /tmp/1233
  17. fi
  18. # 修改top文件
  19. vim top.sls // 增加内容如下
  20. base:
  21. 'web10.melody.com':
  22. - shelltest
  23. # 在服务端执行命令
  24. salt 'web10.melody.com' state.highstate
  25. # 然后在客户端查看111.txt文件和1233目录是否生成
  26. ls -l /tmp

2.8 saltstack管理任务计划

  1. # 进入/srv/salt目录,操作如下步骤
  2. cd /srv/salt
  3. vim crontest.sls
  4. cron_test:
  5. cron.present: # 增加用:present 删除用:absent
  6. - name: /bin/touch /tmp/111.txt
  7. - user: root
  8. - minute: '*'
  9. - hour: 20
  10. - daymonth: 1-10
  11. - month: '3,5'
  12. - dayweek: '*'
  13. # 修改top文件
  14. vim top.sls // 增加内容如下
  15. base:
  16. 'web10.melody.com':
  17. - crontest
  18. # 在服务端执行命令
  19. salt 'web10.melody.com' state.highstate
  20. # 然后在客户端查看定时任务计划是否成功
  21. crontab -l

2.9 saltstack几个常用的命令

  1. # 拷贝服务端上的文件到客户端
  2. salt 'web10.melody.com' cp.get_file salt://apache.sls /tmp/apelearn.com
  3. # 拷贝目录
  4. salt 'web10.melody.com' cp.get_dir salt://test /tmp/ #客户端会自动创建test目录,所以后面不需要加
  5. # 在服务端上显示客户端存活的minion
  6. salt-run manage.up
  7. # 命令行上去执行master上的shell脚本
  8. salt 'web10.melody.com' cmd.script salt://test/1.sh

3.0 ansible安装以及配置认证

特点:不需要安装客户端,用sshd去通信;支持命令行模块,也支持编写yaml格式

  1. ## 服务端安装ansible
  2. yum install -y epel-release 扩展源
  3. yum install -y ansible
  4. # 服务端上生成密钥对
  5. ssh-keygen -t rsa
  6. # 查看生成的密钥文件
  7. ls -la /root/.ssh
  8. # 查看服务端生成的公钥
  9. cat /root/.ssh/id_rsa.pub
  10. # 把公钥id_rsa.pub放到客户端.ssh/authorized_keys中
  11. vim .ssh/authorized_keys
  12. # 客户端关闭selinux,修改权限为600
  13. setenforce 0
  14. chmod 600 /root/.ssh/authorized_keys
  15. # 在服务端连接客户端,logout退出
  16. ssh web10.melody.com

3.1 ansible远程执行命令

  1. # 服务端更改配置文件
  2. vim /etc/ansible/hosts //在最后面增加如下三行内容
  3. [testhosts]
  4. 127.0.0.1
  5. web10.melody.com
  6. #把公钥放到服务端的.ssh/authorized_keys
  7. vim .ssh/authorized_keys
  8. # 检测127.0.0.1是否能连接
  9. ssh 127.0.0.1
  10. # 远程执行命令
  11. ansible testhosts -m command -a 'w'
  12. ansible testhosts -m command -a 'hostname'
  13. ansible web10.melody.com -m command -a 'hostname'
  14. #如果报错libselinux-python,则安装如下
  15. yum install -y libselinux-python
  16. # 远程执行命令,支持脚本运行还有管道符
  17. ansible web10.melody.com -m shell -a 'cat /etc/passwd|grep root'

3.2 ansible拷贝目录或者文件

  1. # 拷贝文件
  2. ansible web10.melody.com -m copy -a "src=/etc/passwd dest=/tmp/1.txt owner=root group=root mode=0644"
  3. # 拷贝目录
  4. ansible web10.melody.com -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"

3.3 ansible远程执行脚本

  1. #首先创建一个shell脚本
  2. vim /tmp/test.sh //增加内容如下
  3. #!/bin/bash
  4. d='date'
  5. echo $d > /tmp/an_test.txt
  6. #然后把该脚本分发到各个机器上去
  7. ansible web10.melody.com -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh"
  8. ansible web10.melody.com -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
  9. #最后批量执行该脚本
  10. ansible web10.melody.com -m shell -a "/bin/sh /tmp/test.sh"
  11. ansible web10.melody.com -m shell -a "/tmp/test.sh"
  12. # 支持远程执行命令并且带管道符
  13. ansible web10.melody.com -m shell -a 'cat /etc/passwd|grep root'

3.4 ansible实现任务计划

  1. # 制定一个任务计划
  2. ansible web10.melody.com -m cron -a "name=test_cron job='/bin/bash /usr/local/sbin/1.sh' weekday=6"
  3. # 客户端查看任务计划是否生成
  4. crontab -l
  5. # 删除一个任务计划
  6. ansible web10.melody.com -m cron -a "name=test_cron state=absent"
  7. # 相关时间的表示
  8. minute hour day month weekday

3.5 ansible安装rpm包管理服务

  1. # 安装rpm包
  2. ansible web10.melody.com -m yum -a "name=vim-enhanced"
  3. # 管理服务
  4. ansible web10.melody.com -m service -a "name=httpd state=started enabled=no"
  5. ansible web10.melody.com -m service -a "name=httpd state=stopped enabled=yes"
  6. # 列出所有的模块
  7. ansible-doc -l
  8. # 查看指定模块的文档
  9. ansible-doc cron

3.6 ansible playbook介绍

  1. # 进入ansible目录下,编辑test目录
  2. cd /etc/ansible/
  3. vim test.yml # 增加内容如下
  4. ---
  5. - hosts: web10.melody.com
  6. remote_user: root
  7. tasks:
  8. - name: test_playbook
  9. shell: touch /tmp/gary123.txt
  10. # 执行命令
  11. ansible-playbook test.yml
  12. # 用playbook创建新用户
  13. vim user.yml # 增加内容如下
  14. ---
  15. - name: create_user
  16. hosts: web10.melody.com
  17. user: root
  18. gather_facts: false
  19. vars:
  20. - user: "test"
  21. tasks:
  22. - name: create user
  23. user: name="{{ user }}"
  24. # 执行命令
  25. ansible-playbook user.yml
  26. # 在客户端上查看是否生成
  27. grep test /etc/passwd

3.7 ansible playbook循环

  1. # 进入ansible目录下,编辑loop目录
  2. cd /etc/ansible/
  3. vim loop.yml //编辑loop文件
  4. ---
  5. - hosts: testhosts
  6. user: root
  7. tasks:
  8. - name: change mode for files
  9. file: path=/tmp/ {{ item }} mode=600
  10. with_items:
  11. - a.txt
  12. - b.txt
  13. - c.txt
  14. # 执行命令
  15. ansible-playbook loop.yml
  16. # 服务端,客户端查看是否文件生成
  17. ls -l /tmp

3.8 ansible playbook判断

  1. # 进入ansible目录下,编辑when目录
  2. cd /etc/ansible/
  3. vim when.yml //编辑when文件
  4. ---
  5. - hosts: testhosts
  6. user: root
  7. gather_facts: True
  8. tasks:
  9. - name: use when
  10. shell: touch /tmp/when.txt
  11. when: facter_ipaddress == "192.168.31.127"
  12. # 执行命令
  13. ansible-playbook when.yml
  14. # 在服务台查看是否生成when.txt文件
  15. ls -lt /tmp/when.txt
  16. # 获取 web10 服务器的参数
  17. ansible web10.melody.com -m setup

3.9 ansible playbook handlers --比较适合配置文件发生更改后,重启服务的操作

  1. # 进入ansible目录下,编辑handlers目录
  2. cd /etc/ansible/
  3. vim handlers.yml //编辑handlers文件
  4. ---
  5. - name: handlers test
  6. hosts: web10.melody.com
  7. user: root
  8. tasks:
  9. - name: copy file
  10. copy: src=/etc/passwd dest=/tmp/abc.txt
  11. notify: test handlers
  12. handlers: //只有当tasks执行成功时,handlers才会执行;否则不会。
  13. - name: test handlers
  14. shell: echo "111111" >> /tmp/abc.txt
  15. # 执行命令
  16. ansible-playbook handlers.yml
  17. # 在客户端查看是否生成abc.txt文件
  18. cat /tmp/abc.txt
  19. # rsync同步文件
  20. rsync -av /etc/passwd web10.melody.com:/tmp/aaa.txt

4.0 ansible实例-安装nginx

4.0.1 首先在一台机器上安装,打包好nginx,然后再分发到ansible上

  1. cd /usr/local
  2. tar -zcvf nginx.tar.gz nginx
  3. cd /etc/ansible
  4. mkdir nginx_install
  5. cd nginx_install
  6. mkdir roles
  7. cd roles // roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作
  8. # 每个角色下面又有几个目录
  9. # handlers 当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务;
  10. # files 安装时用到的一些文件;
  11. # meta 为说明信息,说明角色依赖等信息
  12. # tasks 为核心的配置文件
  13. # templates 通常存一些配置文件,启动脚本等模板文件
  14. # vars 为定义的变量
  15. mkdir common install

4.0.2 定义common

  1. cd common/
  2. mkdir tasks
  3. # 定义common的tasks,nginx是需要一些依赖包
  4. vim roles/common/tasks/main.yml // 增加内容如下
  5. - name: Install initializtion require software
  6. yum: name={{ item }} state=installed
  7. with_items:
  8. - zlib-devel
  9. - pcre-devel
  10. - openssl-devel

4.0.3 定义install

  1. cd install/
  2. mkdir tasks vars files templates
  3. # 把打包的nginx目录,启动脚本,配置文件放到另一台机器上去
  4. cp /usr/local/nginx.tar.gz files/
  5. cp /usr/local/nginx/conf/nginx.conf templates/
  6. cp /etc/init.d/nginx templates/
  7. # 定义install的vars
  8. vim roles/install/vars/main.yml // 增加内容如下
  9. nginx_user: www
  10. nginx_basedir: /usr/local/nginx
  11. # 定义install的tasks下的copy
  12. vim roles/install/tasks/copy.yml // 首先把所有用到的文档拷贝到目标机器,内容如下
  13. - name: Copy Nginx Software
  14. copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
  15. - name: Uncompression Nginx Software
  16. shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
  17. - name: copy Nginx Start Script
  18. template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
  19. - name:
  20. template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
  21. # 定义install的tasks下的install
  22. vim roles/install/tasks/install.yml // 接下来会建立用户,启动服务,删除压缩包
  23. - name: Create Nginx User
  24. user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
  25. - name: Start Nginx Service
  26. service: name=nginx state=started
  27. - name: Add Boot Start Nginx Service
  28. shell: chkconfig --level 345 nginx on
  29. - name: Delete Nginx Compression files
  30. shell: rm -rf /tmp/nginx.tar.gx
  31. # 再创建main.yml并且把copy和install调用
  32. vim roles/install/tasks/main.yml // 增加内容如下
  33. - include: copy.yml
  34. - include: install.yml

4.0.4 定义总入口配置文件

  1. # 退到nginx_install目录下,创建install.yml文件
  2. cd nginx_install
  3. vim install.yml // 增加内容如下
  4. ---
  5. - hosts: web10.melody.com
  6. remote_user: root
  7. gather_facts: True
  8. roles:
  9. - common
  10. - install
  11. # 最后执行命令
  12. ansible-playbook install.yml
  13. # 到客户端查看是否安装成功
  14. rpm -qa |egrep 'pcre|openssl|zlib'
  15. ps aux |grep nginx
  16. chkconfig --list nginx

4.1 ansible实例-管理nginx配置文件

4.1.1 管理nginx配置文件的准备工作

  1. # 退回到/etc/ansilbe目录下
  2. mkdir nginx_config
  3. cd nginx_config
  4. mkdir roles
  5. cd roles
  6. mkdir old new
  7. cd new/
  8. mkdir vars files tasks handlers //files下面为nginx.conf和vhosts目录,handlers为重启服务的命令
  9. # 先把nginx.conf和vhosts目录放到files目录下
  10. cp /usr/local/nginx/conf/nginx.conf files/
  11. cp -r /usr/local/nginx/conf/vhosts files/

4.1.2 更新配置文件

  1. cd new/
  2. # 定义vars变量
  3. vim vars/main.yml //增加内容如下
  4. nginx_basedir: /usr/local/nginx
  5. # 定义handlesr服务
  6. vim handlers/main.yml //增加内容如下
  7. - name: restart nginx
  8. shell: /etc/init.d/nginx reload
  9. # 定义tasks变量,这是核心的任务
  10. vim tasks/main.yml //增加内容如下
  11. - name: copy conf file
  12. copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
  13. with_items:
  14. - { src: nginx.conf, dest: conf/nginx.conf }
  15. - { src: vhosts, dest: conf/ }
  16. notify: restart nginx
  17. # 定义总入口配置文件,退回到nginx_config目录下
  18. cd nginx_config
  19. vim update.yml
  20. ---
  21. - hosts: web10.melody.com
  22. user: root
  23. roles:
  24. - new
  25. #
  26. vim roles/new/files/vhosts/1.conf
  27. vim roles/new/files/nginx.conf
  28. # 执行update
  29. ansible-playbook update.yml
  30. # 在客户端上查看更新的1.conf文件是否生成
  31. cat /usr/local/nginx/conf/vhosts/1.conf

4.1.3 回滚--即配置文件更新前,做个备份

  1. #
  2. ---
  3. - hosts: web10.melody.com
  4. user: root
  5. roles:
  6. - old
  7. ansible-playbook backup.yml
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注