1. 程式人生 > >saltstack狀態管理 部署 jdk 和 tomcat 並執行

saltstack狀態管理 部署 jdk 和 tomcat 並執行

首先,在 /srv/salt 目錄下 建立 base,prod,test目錄,分別代表 基礎環境,生產環境 和 測試環境。基礎環境 是存放 公共的狀態,例如 命令 的 審計,核心引數的修改

[[email protected] salt]# cd /srv/salt/

[[email protected] salt]# mkdir base

[[email protected] salt]# mkdir prod

[[email protected] salt]# mkdir test

 

修改 salt-master配置檔案

vim /etc/salt/master

file_roots:

base:

- /srv/salt/base

test:

- /srv/salt/test

prod:

- /srv/salt/prod

 

重啟 salt-master

systemctl restart salt-master

 

假如我們的架構,包含tomcat,nginx 這些東西很獨立,我們可以把每個模組都建一個目錄把相關模組的狀態,所有的配置,都寫在這個目錄下,我們把這個目錄稱之為一個功能模組,這樣做為了模組的複用,每個模組要儘量的獨立,能夠被引用

 

一個狀態的執行流程,我們可以簡單理解為 ,1 先系統初始化 2 再把軟體裝起來 3 再把軟體執行起來

我們 把 該執行流程 分為 三個模組,分別是

1 系統初始化

2 功能模快

3 業務模組

系統初始化模組,是把公用依賴的東西都 初始化上,例如 核心引數的修改,編譯安裝所需的包

功能模組 是把 每個 安裝流程 記錄下來,然後 交給 業務模組include 進來就可以,以便以後的複用

業務模組 因為業務不一樣,每個軟體的配置檔案也不盡相同,所以我們在該模組下一般是為 不同 的機器分發不同的配置檔案

 

系統初始化

建立 init 和 files目錄

mkdir /srv/salt/base/init/

mkdir /srv/salt/base/init/files/

然後 cd 到 init 目錄下編寫 salt 檔案

 

將 操作命令 記錄到 /var/log/message下

[[email protected] init]# cat audit.sls 
/etc/bashrc:
  file.append:
    - text:
      - export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg";}' 

 

 

統一的dns

[[email protected] init]# cat dns.sls 
/etc/resolv.conf:
  file.managed:
    - source: salt://init/files/resolv.conf
    - user: root
    - group: root
    - mode: 644

 

歷史記錄加上時間

/etc/profile:
  file.append:
    - text: 
      - export HISTTIMEFORMAT="%F %T `whoami`"

 

修改核心引數

[[email protected] init]# cat sysctl.sls 
vm.swappiness:
  sysctl.present:
    - value: 0  # 儘量不適用交換分割槽
net.ipv4.ip_local_port_range:
  sysctl.present:
    - value: 10000 65000 #隨機埠監聽
fs.file-max:
  sysctl.present:
    - value: 100000 #開啟最大的檔案數

 

將 以上的功能 包含到 env_init, 方便後續呼叫

[[email protected] init]# cat env_init.sls 
include:
  - init.dns
  - init.history
  - init.audit
  - init.sysctl

 

首先編寫編譯安裝所需的公共包的狀態,在編寫需要編譯安裝狀態時,只需要include此狀態即可

[[email protected] pkg]# pwd

/srv/salt/prod/pkg

[[email protected] pkg]# cat pkg-init.sls 
pkg-init:
  pkg.installed:
    - names:
      - gcc
      - gcc-c++
      - glibc
      - make
      - autoconf
      - openssl
      - openssl-devel

 

編寫JDK狀態

include:
  - pkg.pkg-init

java-install:
  file.managed:
    - name: /usr/local/src/jdk-8u101-linux-x64.tar.gz
    - source: salt://java/files/jdk-8u101-linux-x64.tar.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/src/ &&  tar -zxvf jdk-8u101-linux-x64.tar.gz -C /usr/local/
    - unless: test -d /usr/local/jdk1.8.0_101
    - require:
      - pkg: pkg-init
      - file: java-install

append-env:
  file.append:
    - name: /etc/profile
    - text:
      - JAVA_HOME=/usr/local/jdk1.8.0_101
      - export PATH=$PATH:$JAVA_HOME/bin
    - require:
      - cmd: java-install
  cmd.run:
    - name: export PATH=$PATH:/usr/local/jdk1.8.0_101/bin
    - require:
      - cmd: java-install
      - file: append-env

 

功能模組的編寫

在prod 下建立 tomcat 目錄

[[email protected] prod]# mkdir /srv/salt/prod/tomcat

[[email protected] prod]# cd tomcat/

建立files 目錄 ,存放 tomcat 的 安裝包和 配置檔案

[[email protected] tomcat]# mkdir files

編寫 tomcat 狀態

include:
  - pkg.pkg-init

tomcat-install:
  file.managed:
    - name: /usr/local/src/apache-tomcat-8.5.31.tar.gz
    - source: salt://tomcat/files/apache-tomcat-8.5.31.tar.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/src/ && tar -zxvf apache-tomcat-8.5.31.tar.gz -C /usr/local/
    - unless:
      -  test -d /usr/local/apache-tomcat-8.5.31/
    - require:
      - pkg: pkg-init
      - file: tomcat-install

canalina-managed:
  file.managed:
    - name: /usr/local/apache-tomcat-8.5.31/bin/catalina.sh
    - source: salt://tomcat/files/catalina.sh

 

catalina.sh的改動只是 在 檔案,添加了 JDK的環境變數

JAVA_HOME=/usr/local/jdk1.8.0_101
JRE_HOME=$JAVA_HOME/jre
 

 

業務模組

include:
  - tomcat.install

tomcat-running:
  cmd.run:
    - name: /bin/bash /usr/local/apache-tomcat-8.5.31/bin/startup.sh
    - unless: test ! -z `jps | grep Bootstrap`

 

編輯top.sls

base:
  '*':
    - init.env_init #init是一個目錄

prod:
  '*':
    - java.install
    - tomcat-service.tomcat-running

 

先使用

salt '*' state.highstate test=Ture 進行測試

然後 執行

salt '*' state.highstate env=prod