天天看點

SaltStack部署及使用實踐 1     SaltStack簡介 2     SaltStack安裝 3     SaltStack配置 4     SaltStack基本使用 5     SaltStack常用子產品使用 6     SaltStack配置管理執行個體

目錄

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070881">版本控制資訊... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070882">目錄I</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070883">1SaltStack簡介... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070884">2SaltStack安裝... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070885">2.1測試環境... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070886">2.2安裝SALTSTACK.. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070887">2.2.1Salt之Master端安裝... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070888">2.2.2Salt之Minion端安裝... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070889">3SaltStack配置... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070890">3.1了解YAML.. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070891">3.2常用YAML關鍵字說明... 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070892">3.2.1unless. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070893">3.2.2include. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070894">3.2.3require. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070895">3.2.4require_in. 1</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070896">3.2.5watch. 2</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070897">3.3SALT之MASTER端配置... 2</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070898">3.4SALT之MINION端配置... 3</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070899">3.5簽發證書... 4</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070900">3.6MASTER端與MINION端的通信測試... 4</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070901">4SaltStack基本使用... 5</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070902">4.1子產品使用相關... 5</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070903">4.1.1檢視Minion的所有子產品... 5</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070904">4.1.2檢視Minion指定子產品下的函數... 5</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070905">4.1.3檢視Minion子產品的使用方法... 6</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070906">4.2STATES使用相關... 7</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070907">4.2.1檢視Minion的所有states清單... 7</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070908">4.2.2檢視指定States子產品下的函數... 8</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070909">4.2.3檢視指定States子產品的使用方法... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070910">5SaltStack常用子產品使用... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070911">5.1CMD子產品... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070912">5.1.1run函數... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070913">5.2PKG子產品... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070914">5.2.1installed函數... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070915">5.3SERVICE子產品... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070916">5.4FILE子產品... 9</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070917">5.4.1managed函數... 10</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070918">5.4.2append函數... 10</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070919">5.5STATE子產品... 10</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070920">6SaltStack配置管理執行個體... 10</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070921">6.1安裝基礎軟體包... 11</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070922">6.2安裝JDK.. 11</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070923">6.3安裝TOMCAT. 11</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070924">6.4安裝NGINX.. 12</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070925">6.5安裝MYSQL.. 12</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070926">6.6安裝PHP. 15</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070927">6.7安裝REDIS. 15</a>

<a href="http://blog.51cto.com/lavenliu/1787490#_Toc453070928">6.8安裝OPENSTACK.. 16</a>

主機名

作業系統

IP位址

備注

master01.lavenliu.com

CentOS 6.5 64位

192.168.20.134

Salt主要端

minion01.lavenliu.com

192.168.20.135

Salt被控端

minion02.lavenliu.com

192.168.20.136

在3台機器上分别安裝EPEL源,

rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-8.noarch.rpm

yum install -y salt-master

yum install -y salt-minion

SLS檔案的預設渲染器是YAML渲染器。書寫SLS檔案隻有簡單的三條規則。

我依賴哪個state

哪個state依賴我

Salt主要端的配置如下:

[root@master01 ~]# egrep -v "^#|^$" /etc/salt/master

interface:192.168.20.134

file_roots:

  base:

    - /etc/salt/states

  prod:

- /etc/salt/states/prod

Salt Master常用的配置說明:

+ interface: 指定bind的位址(預設為0.0.0.0)

+ publish_port: 指定釋出端口(預設為4506)

+ ret_port: 指定結果傳回端口,與minion配置檔案中的master_port對應(預設為4506)

+ user: 指定master程序的運作使用者,如果調整,則需要調整部分目錄的權限(預設為root)

+ timeout: 指定逾時時間,如果minion規模龐大或網絡狀況不穩定,建議增大該值(預設5s)

+ keep_jobs: 預設情況下,minion會将執行結果傳回給master,master會緩存到本地的cachedir目錄,該參數指定緩存多長時間,以供檢視之前

  的執行結果,會占用磁盤空間(預設為24h)

+ file_recv: 是否允許minion傳送檔案到master(預設False)

+ file_roots:

+ pillar_roots: 指定pillar目錄,預設為:

+ log_level: 執行日志級别,支援的日志級别有"garbage", "trace", "debug", "info", "warning", "error", "critical" (預設warning)

接下來建立我們指定的目錄,在主要端進行操作:

mkdir -p /etc/salt/states/{init,prod}

修改完畢,啟動Salt Master并加入開機啟動,操作如下:

/etc/init.d/salt-master start

chkconfig salt-master on

啟動完畢,進行salt的程序的驗證,是否啟動成功,

[root@master01 ~]# ps -ef |grep salt |grep -v grep

root       2028      1  0 11:20 ?       00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2029   2028  0 11:20 ?       00:00:09 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2030   2028  0 11:20 ?       00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2033   2028  0 11:20 ?       00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2034   2028  0 11:20 ?       00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2037   2034  0 11:20 ?       00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2038   2034  0 11:20 ?       00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2039   2034  0 11:20 ?       00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2040   2034  0 11:20 ?       00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2041   2034  0 11:20 ?       00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d

root       2042   2034  0 11:20 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d

檢查是否加入開機自啟動,

[root@master01 ~]# chkconfig --list |grep salt

salt-master       0:off  1:off  2:on   3:on   4:on   5:on   6:off

被控端的配置很簡單,隻需要修改一處配置就可以讓主要端與被控端進行正常的通信。在minion01及minion02上做如下的配置,如下:

[root@minion01 ~]# egrep -v "^#|^$" /etc/salt/minion

master: master01.lavenliu.com

[root@minion02 ~]# egrep -v "^#|^$" /etc/salt/minion

這裡我們使用了Salt主要端的主機名而非主要端的IP位址,主要是我們這裡已經配置了DNS解析,是以使用了主機名。如果我們沒有配置DNS的域名解析服務,我們改寫master: &lt;salt_master_ip&gt;的形式來使用。

Salt Minion常用的配置說明:

+ master:指定master主機(預設為salt)

+ master_port: 指定認證和執行結果發送到master的哪個端口,與master配置檔案中的ret_port對應(預設為4506)

+ id: 指定本minion的辨別,salt内部使用id作為辨別(預設為主機名)

+ user: 指定運作minion的使用者,用于安裝包、啟動服務等操作需要特權使用者,推薦使用root(預設root)

+ cache_jobs: minion是否

啟動Salt Minion并加入開機啟動,在minion01及minion02上進行操作

/etc/init.d/salt-minion start

chkconfig salt-minion on

接下來驗證Salt Minion是否啟動成功,

ps -ef |grep salt |grep -v grep

root       1655      1  0 11:56 ?       00:00:03 /usr/bin/python2.6 /usr/bin/salt-minion -d

chkconfig --list |grep salt

salt-minion       0:off  1:off  2:on   3:on   4:on   5:on   6:off

Salt的Master及Minion端第一次啟動時都會生成證書,而Master端在生成證書之前,還會建立一個CA,并且自己将證書簽發。而Minion端預設會向Master端發起一個證書請求讓Master端簽發,以建立信任關系。

在主要端使用salt-key來檢視Minion端的證書申請請求,

[root@master01 states]# salt-key

Accepted Keys:

Denied Keys:

Unaccepted Keys:

Rejected Keys:

接受Minion端的申請,

salt-key -A

以上設定完畢,接下來驗證Master與Minion端是否可以正常通信,使用test.ping進行驗證,操作如下:

[root@master01 states]# salt '*' test.ping

minion01.lavenliu.com:

    True

minion02.lavenliu.com:

True

傳回兩個True時,說明我們的Salt配置已成功。在此基礎上,我們就可以做更多的配置管理了,在接下來的章節中進行說明。

我們日常簡單的執行指令、檢視安裝包情況、檢視服務運作狀态情況等工作都是通過SaltStack的子產品實作的。當我們安裝完畢Master與Minion後,系統預設會安裝很多子產品,接下來具體看看怎麼使用這些子產品。

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.list_modules

    - acl

    - aliases

    - alternatives

    - apache

    - archive

    - artifactory

    - blockdev

    - btrfs

    - buildout

    - cloud

- cmd

此處省略很多行

    - timezone

    - user

    - vbox_guest

    - virtualenv

    - webutil

    - xfs

接下來,我們檢視cmd子產品有哪些方法,

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.list_functions cmd

    - cmd.exec_code

    - cmd.exec_code_all

    - cmd.has_exec

    - cmd.retcode

    - cmd.run

    - cmd.run_all

    - cmd.run_chroot

    - cmd.run_stderr

    - cmd.run_stdout

    - cmd.script

    - cmd.script_retcode

    - cmd.shell

    - cmd.shells

    - cmd.tty

    - cmd.which

    - cmd.which_bin

檢視cmd子產品的使用方法,

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.doc cmd

'cmd.exec_code:'

    Pass in two strings, the first naming the executable language, aka -

    python2, python3, ruby, perl, lua, etc. the second string containing

    the code you wish to execute. The stdout will be returned.

    CLI Example:

        salt '*' cmd.exec_code ruby 'puts "cheese"'

'cmd.exec_code_all:'

    the code you wish to execute. All cmd artifacts (stdout, stderr, retcode, pid)

    will be returned.

CLI Example:

以上輸出的資訊很多,我們可以隻檢視某個子產品下的某個函數的使用方法。比如我們這裡要檢視cmd子產品下的run方法的使用,操作如下,

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.doc cmd.run

'cmd.run:'

    Execute the passed command and return the output as a string

    Note that ``env`` represents the environment variables for the command, and

    should be formatted as a dict, or a YAML string which resolves to a dict.

    Warning:

        This function does not process commands through a shell

       unless the python_shell flag is set to True. This means that any

       shell-specific functionality such as 'echo' or the use of pipes,

       redirection or &amp;&amp;, should either be migrated to cmd.shell or

        have the python_shell=True flag set here.

        The use of python_shell=True means that the shell will accept _any_ input

       including potentially malicious commands such as 'good_command;rm -rf /'.

        Be absolutely certain that you have sanitized your input prior to using

        python_shell=True

States是SaltStack中的配置管理語言。比如我們在日常配置管理時需要編寫大量的States檔案,具體要安裝一個軟體包,然後管理其服務配置檔案,最後保證該服務正常運作。針對上述步驟我們要編寫一些States SLS檔案來描述和實作上述功能。

要檢視Minion端所支援的states有哪些,操作如下:

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.list_state_modules

    - alias

    - cmd

    - composer

    - cron

- disk

比如我們要檢視與file states相關的函數,操作如下:

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.list_state_functions file

    - file.absent

    - file.accumulated

    - file.append

    - file.blockreplace

    - file.comment

    - file.copy

    - file.directory

    - file.exists

    - file.managed

    - file.missing

    - file.mknod

    - file.mod_run_check_cmd

    - file.patch

    - file.prepend

    - file.recurse

    - file.rename

    - file.replace

    - file.serialize

    - file.symlink

    - file.touch

- file.uncomment

在上一小節,我們列出了很多與States相關的子產品,具體如何使用它們呢?我們可以在指令行檢視其幫助資訊。比如我們要檢視file相關的使用幫助,可以操作如下,

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.state_doc file

此處省略無數行

由于上面輸出的内容較多,故未列出。如何使用file的append函數呢?操作如下,

[root@master01 ~]# salt 'minion01.lavenliu.com' sys.state_doc file.append

此處省略N行

<code>[root@master01</code>

<code>states]</code><code># salt '*' cmd.run "hostname"</code>

<code>minion02.lavenliu.com:</code>

<code>    </code><code>minion02.lavenliu.com</code>

<code>minion01.lavenliu.com:</code>

<code>    </code><code>minion01.lavenliu.com</code>

<code>states]</code><code># salt '*' cmd.run "hostname -I"</code>

<code>    </code><code>192.168.20.135</code>

<code>192.168.19.132</code>

<code>    </code><code>192.168.20.136</code>

<code>192.168.19.133</code>

salt '*' pkg.installed name=vim

檔案目錄結構為:

<code> </code><code>[root@master01 states]</code><code># tree</code>

<code>.</code>

<code>├── init</code>

<code>│   ├──files</code>

<code>│   │  └── vimrc</code>

<code>│   ├──pkg.sls</code>

<code>│   ├──</code><code>test</code><code>.sls</code>

<code>│   └──vim.sls</code>

<code>├── prod</code>

<code>│   ├──jdk</code>

<code>│   │  ├── files</code>

<code>│   │  │   └── jdk-8u65-linux-x64.</code><code>tar</code><code>.gz</code>

<code>│   │  └── </code><code>install</code><code>.sls</code>

<code>│   ├──keepalived</code>

<code>│   │  └── files</code>

<code>│   │       └── keepalived-1.2.16.</code><code>tar</code><code>.gz</code>

<code>│   ├──libevent</code>

<code>│   │  │   └── libevent-2.0.22-stable.</code><code>tar</code><code>.gz</code>

<code>│   ├──memcached</code>

<code>│   │  │   └── memcached-1.4.25.</code><code>tar</code><code>.gz</code>

<code>│   │  ├── </code><code>install</code><code>.sls</code>

<code>│   │  └── service.sls</code>

<code>│   ├──nginx</code>

<code>│   └──tomcat</code>

<code>│      ├── files</code>

<code>│      │   └── apache-tomcat-8.0.28.</code><code>tar</code><code>.gz</code>

<code>│      └── </code><code>install</code><code>.sls</code>

<code>└── </code><code>top</code><code>.sls</code>

<code> </code> 

<code>15 directories,</code>

<code>15 files</code>

<code>states]</code><code># cat prod/jdk/install.sls </code>

<code>jdk-</code><code>install</code><code>:</code>

<code>  </code><code>file</code><code>.managed:</code>

<code>    </code><code>- name: </code><code>/usr/local/src/jdk-8u65-linux-x64</code><code>.</code><code>tar</code><code>.gz</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//prod/jdk/files/jdk-8u65-linux-x64</code><code>.</code><code>tar</code><code>.gz</code>

<code>    </code><code>- user: root</code>

<code>    </code><code>- group: root</code>

<code>    </code><code>- mode: 644</code>

<code>  </code><code>cmd.run:</code>

<code>    </code><code>- name: </code><code>cd</code> <code>/usr/local/src</code>

<code>&amp;&amp; </code><code>tar</code> <code>-xf jdk-8u65-linux-x64.</code><code>tar</code><code>.gz &amp;&amp; </code><code>mv</code> <code>jdk1.8.0_65 jdk</code>

<code>&amp;&amp; </code><code>chown</code> <code>-R root:root jdk</code>

<code>    </code><code>- unless: </code><code>test</code> <code>-d</code>

<code>/usr/local/jdk</code>

<code>/etc/profile</code><code>:</code>

<code>  </code><code>file</code><code>.append:</code>

<code>    </code><code>- text:</code>

<code>      </code><code>- </code><code>export</code>

<code>JAVA_HOME=</code><code>/usr/local/jdk</code>

<code>JRE_HOME=${JAVA_HOME}</code><code>/jre</code>

<code>      </code><code>-</code>

<code>CLASS_PATH=${JAVA_HOME}</code><code>/lib</code><code>:${JRE_HOME}</code><code>/lib</code>

<code>PATH=$PATH:$JAVA_HOME</code><code>/bin</code>

如何使用,

<code>salt </code><code>'*'</code> <code>state.sls prod.jdk.</code><code>install</code>

<code>states]</code><code># cat prod/tomcat/install.sls </code>

<code>include:</code>

<code>  </code><code>- prod.jdk</code>

<code>tomcat-</code><code>install</code><code>:</code>

<code>    </code><code>- name: </code><code>/usr/local/src/apache-tomcat-8</code><code>.0.28.</code><code>tar</code><code>.gz</code>

<code>    </code><code>- </code><code>source</code><code>: salt:</code><code>//prod/tomcat/files/apache-tomcat-8</code><code>.0.28.</code><code>tar</code><code>.gz</code>

<code>&amp;&amp; </code><code>tar</code> <code>-xf apache-tomcat-8.0.28.</code><code>tar</code><code>.gz &amp;&amp; </code><code>ln</code> <code>-s</code>

<code>apache-tomcat-8.0.28 tomcat &amp;&amp; </code><code>chown</code> <code>-R root:root apache-tomcat-8.0.28</code>

<code>- unless: </code><code>test</code> <code>-d </code><code>/usr/local/apache-tomcat-8</code><code>.0.28</code>

salt '*' state.sls prod.tomcat.install

這裡使用源碼的方式進行編譯安裝。安裝配置的大緻流程是:

1.      首先安裝MySQL的依賴包;

2.      建立MySQL使用者并設定UID及GID為601;

3.      開始編譯安裝MySQL;

4.      建立MySQL的套接字存放的目錄;

5.      設定MySQL環境變量,以便在指令行直接使用MySQL相關的指令行工具;

6.      初始化MySQL資料庫;

7.      設定MySQL的啟動腳本;

8.      将MySQL加入開機自啟動;

9.      設定MySQL安裝目錄的權限為mysql使用者及組。

<code>mysql]</code><code># cat install.sls </code>

<code>dependency-</code><code>install</code><code>:</code>

<code>  </code><code>pkg.installed:</code>

<code>    </code><code>- names:</code>

<code>      </code><code>- ncurses-devel</code>

<code>      </code><code>- libaio-devel</code>

<code>      </code><code>- cmake</code>

<code>mysql:</code>

<code>  </code><code>user.present:</code>

<code>    </code><code>- fullname: MySQL Server</code>

<code>    </code><code>- shell: </code><code>/sbin/nologin</code>

<code>    </code><code>- createhome: </code><code>false</code>

<code>    </code><code>- uid: 601</code>

<code>    </code><code>- gid: 601</code>

<code>mysql-</code><code>install</code><code>:</code>

<code>    </code><code>- name:</code>

<code>/usr/local/src/mysql-5</code><code>.5.32.</code><code>tar</code><code>.gz</code>

<code>    </code><code>- </code><code>source</code><code>:</code>

<code>salt:</code><code>//prod/mysql/files/mysql-5</code><code>.5.32.</code><code>tar</code><code>.gz</code>

<code>&amp;&amp; </code><code>tar</code> <code>-xf mysql-5.5.32.</code><code>tar</code><code>.gz &amp;&amp; </code><code>cd</code> <code>mysql-5.5.32 &amp;&amp;</code>

<code>cmake . -DCMAKE_INSTALL_PREFIX=</code><code>/application/mysql-5</code><code>.5.32</code>

<code>-DMYSQL_DATADIR=</code><code>/application/mysql-5</code><code>.5.32</code><code>/data</code>

<code>-DMYSQL_UNIX_ADDR=</code><code>/application/mysql-5</code><code>.5.32</code><code>/sock/mysql</code><code>.sock</code>

<code>-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci</code>

<code>-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON</code>

<code>-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1</code>

<code>-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1</code>

<code>-DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled</code>

<code>-DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1</code>

<code>-DWITH_DEBUG=0 &amp;&amp; </code><code>make</code> <code>&amp;&amp; </code><code>make</code> <code>install</code> <code>&amp;&amp; </code><code>ln</code> <code>-s</code>

<code>/application/mysql-5</code><code>.5.32 </code><code>/application/mysql</code>

<code>/application/mysql-5</code><code>.5.32</code>

<code>    </code><code>- require:</code>

<code>      </code><code>- pkg:</code>

<code>dependency-</code><code>install</code>

<code>      </code><code>- </code><code>file</code><code>:</code>

<code>mysql-</code><code>install</code>

<code>/application/mysql-5</code><code>.5.32</code><code>/sock</code><code>:</code>

<code>  </code><code>file</code><code>.directory:</code>

<code>    </code><code>- user: mysql</code>

<code>    </code><code>- group: mysql</code>

<code>    </code><code>- dir_mode: 755</code>

<code>  </code><code>require:</code>

<code>    </code><code>- cmd: mysql-</code><code>install</code>

<code>setup-mysql-</code><code>env</code><code>:</code>

<code>install</code><code>-mysql-db:</code>

<code>    </code><code>- name: sh</code>

<code>/application/mysql-5</code><code>.5.32</code><code>/scripts/mysql_install_db</code>

<code>--basedir=</code><code>/application/mysql-5</code><code>.5.32 --datadir=</code><code>/application/mysql-5</code><code>.5.32</code><code>/data</code>

<code>      </code><code>- cmd:</code>

<code>init-mysql:</code>

<code>    </code><code>- name: </code><code>/etc/init</code><code>.d</code><code>/mysqld</code>

<code>/application/mysql-5</code><code>.5.32</code><code>/support-files/mysql</code><code>.server</code>

<code>    </code><code>- mode: 755</code>

<code>chkconfig-on-mysql:</code>

<code>    </code><code>- name: chkconfig --add</code>

<code>mysqld</code>

<code>    </code><code>- unless: chkconfig --list |</code>

<code>grep</code> <code>mysqld</code>

<code>/etc/init</code><code>.d</code><code>/mysqld</code>

<code>/application/mysql-5</code><code>.5.32:</code>

<code>    </code><code>- recurse:</code>

<code>      </code><code>- user</code>

<code>      </code><code>- group</code>

<code>      </code><code>- mode</code>

<code>- cmd: mysql-</code><code>install</code>

如何執行呢?

salt 'minion02.lavenliu.com' state.sls prod.mysql.install

這裡使用YUM的方式進行安裝Redis,SLS檔案如下:

<code>redis]</code><code># pwd</code>

<code>/etc/salt/states/prod/redis</code>

<code># 目錄結構為</code>

<code>redis]</code><code># tree</code>

<code>├── files</code>

<code>│   └──redis.conf</code>

<code>└── server.sls</code>

<code>1</code>

<code>directory, 2 files</code>

server.sls檔案的内容為:

<code>redis]</code><code># cat server.sls</code>

<code>redis-server:</code>

<code>    </code><code>- name: redis</code>

<code>    </code><code>- name: </code><code>/etc/redis</code><code>.conf</code>

<code>salt:</code><code>//prod/redis/files/redis</code><code>.conf</code>

<code>  </code><code>service.running:</code>

<code>    </code><code>- </code><code>enable</code><code>: True</code>

<code>    </code><code>- reload: True</code>

<code>    </code><code>- </code><code>watch</code><code>:</code>

<code>redis-server</code>

redis.conf的配置檔案為:

<code>redis]</code><code># egrep -v "(^#|^$)" files/redis.conf</code>

<code>daemonize</code>

<code>yes</code>

<code>pidfile</code>

<code>/var/run/redis/redis</code><code>.pid</code>

<code>port 6379</code>

<code>bind 0.0.0.0</code>

<code>timeout 0</code>

<code>loglevel</code>

<code>notice</code>

<code>logfile</code>

<code>/var/log/redis/redis</code><code>.log</code>

<code>databases</code>

<code>16</code>

<code>save 900</code>

<code>save 300</code>

<code>10</code>

<code>save 60</code>

<code>10000</code>

<code>rdbcompression</code>

<code>dbfilename</code>

<code>dump.rdb</code>

<code>dir</code>

<code>/var/lib/redis/</code>

<code>slave-serve-stale-data</code>

<code>appendonly</code>

<code>no</code>

<code>appendfsync</code>

<code>everysec</code>

<code>no-appendfsync-on-rewrite</code>

<code>auto-aof-rewrite-percentage</code>

<code>100</code>

<code>auto-aof-rewrite-min-size</code>

<code>64mb</code>

<code>slowlog-log-slower-than</code>

<code>slowlog-max-len</code>

<code>1024</code>

<code>vm-enabled</code>

<code>vm-swap-</code><code>file</code>

<code>/tmp/redis</code><code>.swap</code>

<code>vm-max-memory</code>

<code>0</code>

<code>vm-page-size</code>

<code>32</code>

<code>vm-pages 134217728</code>

<code>vm-max-threads 4</code>

<code>hash</code><code>-max-zipmap-entries 512</code>

<code>hash</code><code>-max-zipmap-value 64</code>

<code>list-max-ziplist-entries 512</code>

<code>list-max-ziplist-value 64</code>

<code>set</code><code>-max-intset-entries 512</code>

<code>zset-max-ziplist-entries 128</code>

<code>zset-max-ziplist-value 64</code>

<code>activerehashing </code><code>yes</code>

後續會繼續更新

<a href="http://down.51cto.com/data/2367793" target="_blank">附件:http://down.51cto.com/data/2367793</a>

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自    bigstone2012   51CTO部落格,原文連結:http://blog.51cto.com/lavenliu/1787490