前边针对Saltstack进行了大量基础知识以及组件 、方法和state方面的介绍,该实战一次了,下边针对实际安装案例lamp安装做一个笔记。该笔记主要是lamp一个环境的安装实例,引入了ID声明和Names声明,以及source的路径问题。知道以后编写类型的功能,需要如何入手来进行规划。
首先先梳理一下流程,我将lamp设置到的是/srv/salt/dev这个开发环境中:
(1)要实现lamp的批量安装,需要yum一个包,那就用到pkg.installed。
(2)然后涉及一个匹配文件的统一,那么需要我们file.managed来实现。
(3)配置完以后我们需要将服务启动病设置系统自启动,需要用到service.running ,那么基本lamp就完成了。其中这三个组件也是上次笔记《Saltstack配置管理学习笔记:配置管理概述》已经对pkg file和service这三个组件的用法的实战练习。好了,动手搞:
1,我们先设置入口文件top.sls
[[email protected] salt]# cat top.sls
base:
'*':
- init.dns
dev:
'miniontest':
- lamp
top.sls这里指定了我们lamp.sls的目录位于dev这个环境,操作target为 saltstack-node2.example.com,指定的sls文件为lamp.sls (绝对路径/srv/salt/dev/lamp.sls)
2,开始写lamp.sls这个文件:
[[email protected] dev]# vi lamp.sls 内容如下:
lamp-pkg-install:
pkg.installed:
- names:
- httpd
- php
- php-cli
- php-common
- mysql
- mysql-server
- php-mysql
- php-pdo
apache-service:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
service.running:
- name: httpd
- enable: True
mysql.service:
file.managed:
- name: /etc/my.cnf
- source: salt://files/my.cnf
- user: root
- group: root
- mode: 644
service.running:
- name: mysqld
- enable: True
我们这个lamp.sls 文件基本有如下内容:
(1)lamp-pkg-install 以及apache-servie mysql-service 都是一个ID声明,模块是禁止开头写的,注意下每个ID都是唯一的。如果同名,那么优先匹配到的ID会先执行。
(2)name声明。之前我们操作init.dns 的时候,我们是将/etc/resolv.conf 放到了第一位,这里我们file.managed的时候,下边通过-name 指定了操作对象。
(3)通过该文件书写,我们还练习了pkg.installed file.managed 以及service.running的用法。 当然里边的一些参数比如哪个用户运行 以及服务名定义,可以自己来指定,这里主要是做测试使用。
(4)对比文件我们放到了/srv/salt/dev/files目录中,里边file.managed的时候我们通过source: salt://file 进行了指定。注意这里已经选择了dev目录,不要写成salt://dev/files。其中httpd.conf my.cnf是我们已经配置好的文件为标准。注意下salt://为当前根目录,以top.sls指定的环境为基准。
3,执行结果
master端:salt ‘miniontest’ state.highstate 执行结果如下
----------
ID: lamp-pkg-install
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 00:55:22.265846
Duration: 545.714 ms
Changes:
----------
ID: lamp-pkg-install
Function: pkg.installed
Name: mysql
Result: True
Comment: Package mysql is already installed.
Started: 00:55:22.819381
Duration: 0.664 ms
Changes:
----------
ID: apache-service
Function: file.managed
Name: /etc/httpd/conf/httpd.conf
Result: True
Comment: File /etc/httpd/conf/httpd.conf is in the correct state
Started: 00:55:22.821636
Duration: 4.835 ms
Changes:
----------
ID: mysql.service
Function: file.managed
Name: /etc/my.cnf
Result: True
Comment: File /etc/my.cnf is in the correct state
Started: 00:55:22.863781
Duration: 5.222 ms
Changes:
----------
ID: mysql.service
Function: service.running
Name: mysqld
Result: True
Comment: Service mysqld is already enabled, and is in the desired state
Started: 00:55:22.869160
Duration: 53.577 ms
Changes:
Summary
-------------
Succeeded: 13
Failed: 0
-------------
Total states run: 13
可以看到已经成功,限于篇幅,我这里省略了一些ID的显示。下边看下minion端的安装情况:
[email protected]]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1009/redis-server
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1047/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1123/master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2477/mysqld
tcp 0 0 :::80 :::* LISTEN 2539/httpd
tcp 0 0 :::22 :::* LISTEN 1047/sshd
tcp 0 0 ::1:25 :::* LISTEN 1123/master
可以看到服务apache mysql已经启动,下边我们看下服务随系统启动情况:
[[email protected]]# chkconfig --list httpd
httpd 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
[[email protected]]# chkconfig --list mysqld
mysqld 0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
好了,安装lamp已经成功。
4,测试执行:
访问查看apache:
访问测试php环境:
查看mysql:
搞定,收工。 笔记到此结束。