目录
<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: <salt_master_ip>的形式来使用。
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 &&, 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>&& </code><code>tar</code> <code>-xf jdk-8u65-linux-x64.</code><code>tar</code><code>.gz && </code><code>mv</code> <code>jdk1.8.0_65 jdk</code>
<code>&& </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>&& </code><code>tar</code> <code>-xf apache-tomcat-8.0.28.</code><code>tar</code><code>.gz && </code><code>ln</code> <code>-s</code>
<code>apache-tomcat-8.0.28 tomcat && </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>&& </code><code>tar</code> <code>-xf mysql-5.5.32.</code><code>tar</code><code>.gz && </code><code>cd</code> <code>mysql-5.5.32 &&</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 && </code><code>make</code> <code>&& </code><code>make</code> <code>install</code> <code>&& </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