目录
一、lamp目录规划
#创建模块与配置文件存放目录
[root@linux-node1 prod]# pwd
/srv/salt/prod
[root@linux-node1 prod]# mkdir -p {apache,php,mysql}/files
#准备分发到minion节点的配置文件
#为什么需要准备配置文件呢,我们下载好服务包相关配置都是默认的,不适合实际生产环境,
所以先在master节点上面配置好,统一分发给monion,保持环境的一致性。
[root@linux-node1 prod]# cp /etc/httpd/conf/httpd.conf ./apache/files/
[root@linux-node1 prod]# cp /etc/php.ini ./php/files/
[root@linux-node1 prod]# cp /etc/my.cnf ./mysql/files/
二、apache部署
[root@linux-node1 apache]# vim apache/apache.sls
apache-install:
pkg.installed:
- name: httpd
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf # 把配置好的文件放节点这个位置
- source: salt://apache/files/httpd.conf # 这是我已经配置好的文件
- user: root
- group: root
- mode: 644
apache-service:
service.running:
- name: httpd
- enable: True
[root@linux-node1 prod]# salt "linux-node1*" state.sls apache.apache saltenv=prod test=true
#也可以通过源码安装来部署,自由选择
[root@linux-node1 apache]# vim ym-apache.sls
jdk-install:
pkg.installed:
- name: java-1.8.0-openjdk
tomcat-install:
file.managed:
- name: /usr/local/src/apache-tomcat-8.0.46.tar.gz
- source: salt://web/files/apache-tomcat-8.0.46.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat
- unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46
三、php部署
[root@linux-node1 prod]# vim php/php.sls
php-install:
pkg.installed:
- pkgs:
- php
- php-pdo
- php-mysql
php-config:
file.managed:
- name: /etc/php.ini
- source: salt://php/files/php.ini
- user: root
- group: root
- mode: 644
[root@linux-node1 prod]# salt "linux-node1*" state.sls php.php saltenv=prod test=True
四、mysql部署
[root@linux-node1 prod]# vim mysql/mysql.sls
mysql-repo:
file.managed: # 先配置国内镜像yum源
- name: /etc/yum.repos.d/MariaDB.repo
- source: salt://mysql/files/MariaDB.repo
- user: root
- gourp: root
- mode: 644
mysql-install:
pkg.installed:
- pkgs:
- MariaDB-server
- MariaDB-client
mysql-config:
file.managed:
- name: /etc/my.cnf
- source: salt://mysql/files/my.cnf
- user: root
- gourp: root
- mode: 644
mysql-service:
service.running:
- name: mariadb
- enable: True
[root@linux-node1 prod]# salt "linux-node1*" state.sls mysql.mysql saltenv=prod test=True
五、写入top file,执行高级状态
[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# cat top.sls
prod:
'os:CentOS':
- match: grain
- apache.apache
- php.php
- mysql.mysql
[root@linux-node1 base]# salt 'linux-node1*' state.highstate
六、配置各节点httpd监听本机ip
#统一的配置要求我们已经配置好分发到各节点了,例如各节点监听本机ip等操作不能统一配置
需要根据每台机器实际情况部署
#我们可以利用grains组件获取节点地址,jinja模块设置变量,然后将获取到的ip地址传值到对应节点上去
#设置jinja变量
[root@linux-node1 apache]# vim /srv/salt/prod/apache/files/httpd.conf
#Listen 12.34.56.78:80
#Listen 80
Listen {{ IPADDR }}:{{ PORT }}
#确认grains正常获取节点信息
[root@linux-node1 prod]# salt '*' grains.item fqdn_ip4
linux-node1.example.com:
----------
fqdn_ip4:
- 192.168.56.11
linux-node2.example.com:
----------
fqdn_ip4:
- 192.168.56.12
#配置sls文件调取变量值
[root@linux-node1 prod]# vim apache/apache.sls
apache-install:
pkg.installed:
- name: httpd
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja # 声明jinja模板
- defaults: # 定义默认的参数和值
PORT: 80 # PORT和IPADDR都为变量
IPADDR: {{ grains['fqdn_ip4'][0] }} # 通过grains返回数据,此处返回的是一个列表形式,增加[0]指定第一个
apache-index:
file.managed:
- name: /var/www/html/index.php
- source: salt://apache/files/index.php
- user: root
- group: root
- mode: 644
apache-service:
service.running:
- name: httpd
- enable: True
- reload: True # 重新载入开启
- watch: # 监听ID为apache-config模块的配置文件是否变动
- file: apache-config
[root@linux-node1 prod]# salt "linux-node*" state.highstate
#节点监听地址变为自身ip
[root@linux-node1 prod]# netstat -ntpl | grep 80
tcp 0 0 192.168.56.11:80 0.0.0.0:* LISTEN 10717/httpd
[root@linux-node2 ~]# netstat -ntpl | grep 80
tcp 0 0 192.168.56.12:80 0.0.0.0:* LISTEN 3905/httpd