saltstack 实现lamp批量部署

学了三天的saltstack,今天实际配置批量部署lamp(yum 安装)


环境: base, dev(开发环境), test(测试环境), prod(生产环境)
vim  /etc/salt/master
   
   
  1. file_roots:
  2. base:
  3.     - /srv/salt/
  4.   dev:
  5.     - /srv/salt/dev
  6.   test:
  7.     - /srv/salt/test
  8.   prod:
  9.     - /srv/salt/prod
    
    
  1. mkdir  /srv/salt/{dev,test,prod}


案例一:初始化配置
vim /srv/salt/top.sls  //内容如下
   
   
  1. base:
  2.   '*':
  3.     - init.dns    //如果写成带一个点的形式,那么点前面是目录名字,后面是sls文件名字。
    
    
  1. mkdir  init 
  2. cd init
vim dns.sls //内容
    
    
  1. /etc/resolve.conf:
  2.   file.managed:
  3.     - source: salt://init/files/resolv.conf   //说明 salt://为当前环境(base)的主目录(/srv/salt/)下。
  4.     - user: root
  5.     - group: root
  6.     - mode: 644

    
    
  1. mkdir /srv/salt/init/files   //在此目录下放resolv.conf作为模板文件
运行: salt '*' state.highstate


==================================================================

案例二: 自动化部署lamp环境

三个模块:
pkg 安装软件包
file  管理配置文件
service   服务管理

思路: lamp需要安装的软件包有  httpd, php, mysql, mysql-server, php-mysql, php-pdo
预设:我们把这个lamp的 安装项目 放到dev环境下

    
    
  1. cd /srv/salt/dev/

    
    
  1. mkdir   /srv/salt/dev/files/ (放配置文件)

    
    
  1. vim /srv/salt/dev/lamp.sls 

 //lamp配置文件如下:
    
    
  1. #包安装ID
  2. lamp-pkg-install:
  3. pkg.installed:
  4.     - names:
  5.       - php
  6.       - mysql
  7.       - php-cli
  8.       - php-common
  9.       - php-mysql
  10.       - php-pdo
  11. #apache ID
  12. apache-service:
  13.   pkg.installed:
  14.     - name: httpd
  15.   file.managed:
  16.     - name: /etc/httpd/conf/httpd.conf
  17.     - source: salt://files/httpd.conf
  18.     - user: root
  19.     - group: root
  20.     - mode: 644
  21.     - require: #require方法: file这个操作的时候,文件改动需要依赖于pkg这个包安装完成,如果这个包没有安装成功,后面的file操作就会失败
  22.       - pkg: apache-service
  23.   service.running:
  24.     - name: httpd
  25.     - enable: True
  26.     - reload: True
  27.     - watch: #watch方法:service这个模块关注file模块,如果file状态改变,service重载reload.
  28.       - file: apache-service
  29. #mysql ID
  30. mysql-service:
  31. pkg.installed:
  32. - name: mysql-server
  33. - require_in: # require_in 方法: pkg的执行状态被file所以来,如果我执行不成功,file就不执行.
  34. - file: mysql-service
  35. file.managed:
  36. - name: /etc/my.cnf
  37. - source: salt://files/my.cnf
  38.     - user: root
  39.     - group: root
  40.     - mode: 644
  41. - watch_in: # watch_in方法:上级模块file被service模块所关注,如果file状态改变,service模块就重启.
  42. - service: mysql-service
  43. service.running:
  44.     - name: mysqld
  45.     - enable: True
vim   /srv/salt/top.sls     //注意top.sls的路径
    
    
  1. #指定项目根路径
  2. dev:
  3. 'web2.coohx.com':
  4. - lamp
执行: 
     
     
  1. salt 'web2*' state.highstate
说明:
     
     
  1. 处理状态之间关系用到的几个重要的方法:
    1. require 我依赖某个状态   (常用于包安装)
    2. require_in: 我被某个状态所依赖
    3. watch  我关注某个状态  (常用于文件改动)
    4. watch_in: 我被某个状态所关注

更改配置文件,测试依赖关系:

     
     
  1. [root@web1 salt]# salt 'web2*' state.highstate
  2. web2.coohx.com:
  3. ....
  4. ...
  5. ----------
  6. ID: apache-service
  7. Function: file.managed
  8. Name: /etc/httpd/conf/httpd.conf
  9. Result: True
  10. Comment: File /etc/httpd/conf/httpd.conf updated
  11. Started: 19:22:16.063742
  12. Duration: 56.123 ms
  13. Changes:
  14. ----------
  15. diff:
  16. ---
  17. +++
  18. @@ -273,7 +273,7 @@
  19. # You will have to access it by its address anyway, and this will make
  20. # redirections work in a sensible way.
  21. #
  22. -#ServerName www.example.com:80
  23. +ServerName www.coohx.com:80
  24. #
  25. # UseCanonicalName: Determines how Apache constructs self-referencing
  26. ----------
  27. ID: apache-service
  28. Function: service.running
  29. Name: httpd
  30. Result: True
  31. Comment: Service reloaded
  32. Started: 19:22:16.189186
  33. Duration: 267.497 ms
  34. Changes:
  35. ----------
  36. httpd:
  37. True
  38. ----------
  39. ID: mysql-service
  40. Function: pkg.installed
  41. Name: mysql-server
  42. Result: True
  43. Comment: Package mysql-server is already installed.
  44. Started: 19:22:16.457774
  45. Duration: 4.411 ms
  46. Changes:
  47. ----------
  48. ID: mysql-service
  49. Function: file.managed
  50. Name: /etc/my.cnf
  51. Result: True
  52. Comment: File /etc/my.cnf updated
  53. Started: 19:22:16.463750
  54. Duration: 25.095 ms
  55. Changes:
  56. ----------
  57. diff:
  58. ---
  59. +++
  60. @@ -13,6 +13,8 @@
  61. # If you want to know which options a program supports, run the program
  62. # with the "--help" option.
  63. +#web2.coohx.com
  64. +
  65. # The following options will be passed to all MySQL clients
  66. [client]
  67. #password = your_password
  68. @@ -24,7 +26,7 @@
  69. # The MySQL server
  70. [mysqld]
  71. port = 3306
  72. -socket = /var/lib/mysql/mysql.sock
  73. +socket = /tmp/mysql.sock
  74. character_set_server = utf8
  75. skip-locking
  76. key_buffer_size = 256M
  77. ----------
  78. ID: mysql-service
  79. Function: service.running
  80. Name: mysqld
  81. Result: False
  82. Comment: Failed to restart the service
  83. Started: 19:22:16.548901
  84. Duration: 2260.008 ms
  85. Changes:
  86. ----------
  87. mysqld:
  88. False
  89. Summary
  90. -------------
  91. Succeeded: 11 (changed=4)
  92. Failed: 1
  93. -------------
  94. Total states run: 12
 修改了配置文件后,根据依赖关系服务重启.(这里显示minion服务器mysql启动失败,是因为试验机器上不小心误删了mysql.sock文件.)


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值