目錄
一、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