安裝情況:
System: Centos 6.3
Salt master: salt-master.example.com
Salt minion: salt-client01.example.com
Salt minion: salt-client02.example.com
一. 主控端設(shè)置
1. 設(shè)置master根基參數(shù)
# vi /etc/salt/master
添加:
nodegroups:
webgroup1: 'salt-client01.example.com'
webgroup2: 'salt-client02.example.com'
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
Tip: 這里的nodegroups里的分組會(huì)應(yīng)用到隨后的pillar劇本下, 用來區(qū)分差異的salt-minion利用相應(yīng)的pillar參數(shù), 從而定制差異的minion利用差異的設(shè)置方案.
重啟處事
# /etc/init.d/salt-master restart
2. 動(dòng)態(tài)設(shè)置客戶端系統(tǒng)毗連數(shù)
利用python劇本編寫grains_module, 實(shí)現(xiàn)動(dòng)態(tài)設(shè)置被控主機(jī)毗連數(shù)(CLI可用"limit -n"查詢?cè)撝?, 以便隨后的Nginx設(shè)置文件中的worker_rlimit_nofile, worker_connections可動(dòng)態(tài)挪用劇本中max_open_file的參數(shù)值.
Tip: "ulimit -n" 是用來查詢當(dāng)前l(fā)inux系統(tǒng)的最大打開文件數(shù), 默認(rèn)為1024
也可用"ulimit -a"來查察其他相關(guān)參數(shù)
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7819
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
臨時(shí)修改當(dāng)前session的參數(shù)值
# ulimit -n 2048
永久修改需修改該參數(shù)值
# vi /etc/security/limits.conf
添加:
root soft nofile 2048
root hard nofile 2048
# vi /etc/pam.d/common-session
添加:
session required pam_limits.so
重啟生效.
劇本詳細(xì)設(shè)置如下:
# mkdir -p /srv/salt/_grains
# vi /srv/salt/_grains/nginx_config.py
#!/usr/bin/env python
import os,sys,commands
# return Nginx config grains value
def NginxGrains():
grains = {}
max_open_file=65536
try:
getulimit=commands.getstatusoutput('source /etc/profile && ulimit -n')
except Exception,e:
pass
if getulimit[0]==0:
max_open_file=int(getulimit[1])
grains['max_open_file'] = max_open_file
return grains
Tip: 該劇本會(huì)同步到長(zhǎng)途后執(zhí)行, 劇本實(shí)際就是獲取并返回當(dāng)前主機(jī)的最大打開數(shù)值, 最終返回值會(huì)賦予字典 grains['max_open_file']
同步grains模塊:
# salt '*' saltutil.sync_all
刷新模塊(讓minion編譯模塊)
# salt '*' sys.reload_modules
驗(yàn)證max_open_file key的value
# salt '*' grains.item max_open_file
Tip: 這里筆者測(cè)試變動(dòng)客戶端最大文件打開值時(shí)發(fā)明白一個(gè)問題, 無(wú)論客戶端如何變動(dòng)這個(gè)值, 在驗(yàn)證key value時(shí)終會(huì)顯示最早的系統(tǒng)初始值1024, 翻閱了大量文檔, 發(fā)明minion端會(huì)將所有處事端的推送生存在(/var/cache/salt/minion), 這里刪除這個(gè)緩存目次并重啟salt-minion, 讓其生成新的緩存目次, 重新同步grains模塊, 新的vaule就會(huì)生效.
# salt '*' cmd.run 'rm -rf /var/cache/salt/minion && /etc/init.d/salt-minion restart'
3. 設(shè)置pillar
1). 界說進(jìn)口sls
# vi /srv/pillar/top.sls
base:
webgroup1:
- match: nodegroup
- nginx.webserver1
webgroup2:
- match: nodegroup
- nginx.webserver2
Tip: 這里界說webgroup1的所有minions會(huì)利用pillar/nginx/webserver1.sls劇本, webgroup2所有minions利用pillar/nginx/webserver2.sls劇本, match: nodegroup 界說webgroup1, webgroup2匹配nodegroup組.