SaltStack管理工具
SaltStack需要安裝服務端:salt-master、客戶端:salt-minion
SaltStack服務啓動後監聽端口
TCP4505端口:用於Master和Minion認證通信
TCP4506端口:爲master用來發送命令或者接受Minion的命令返回信息
安裝啓動SaltStack
安裝環境準備:
Master:192.168.11.25
Minion:192.168.11.26、192.168.11.27
1.三臺服務器安裝epel源:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.修改主機名
master服務端:hostnamectl set-hostname master
minion客戶端1:hostnamectl set-hostname server1
minion客戶端2:hostnamectl set-hostname server2
3.三臺服務器修改host文件
vim /etc/hosts
192.168.11.25 master
192.168.11.26 server1
192.168.11.27 server2
Master安裝啓動salt-master軟件
1.安裝salt-master軟件
yum -y install salt-master
2.master修改配置文件
vim /etc/salt/master
#監控地址
interface: 192.168.11.25
#確認證書信任
auto_accept: True
file_roots:
base:
- /srv/salt/
#開啓pillar功能
pillar_opts: Ture
pillar_roots:
base:
- /srv/pillar
#添加管理的主機名
nodegroups:
group1: 'server1'
group2: 'server2'
3.創建配置文件中對應的目錄
mkdir /srv/salt
mkdir /srv/pillar
4.啓動master服務
systemctl start salt-master
Minion安裝啓動salt-minion軟件
1.安裝salt-minion軟件
yum install -y salt-minion
2.兩臺Minion修改配置文件
192.168.11.26:vim /etc/salt/minion
master: 192.168.11.25 #服務端的地址
id: server1 #本機的主機名
192.168.11.27:vim /etc/salt/minion
master: 192.168.11.25 #服務端的地址
id: server2 #本機的主機名
3.兩臺Minion啓動服務
systemctl start salt-minion
測試服務端和客戶端的通信狀況(如下圖爲成功):
salt '*' test.ping
SaltStack具體命令應用
查看版本信息:
salt --version
salt --versions-report
查看多個minion:salt-key -L
接受指定的minion:salt-key -a slave1.kgc.com
接受所有的minion:salt-key -A
刪除指定的Minion:salt-key -d slave1.kgc.com
刪除所有的Minion:salt-key -D
拒絕指定的minion:salt-key -r slave1.kgc.com
拒絕所有的minion:salt-key -R
查看存活的minion:salt-run manage.up
查看down機的minion:salt-run manage.down
查看down掉的minion,並將其刪除:salt-run manage.down removekeys=True
查看minion的相關狀態:salt-run manage.versions
minion分組規則:
G --針對Grains做單個匹配,例如:G@os:Ubuntu
E --針對minion針對正則表達式匹婚配,例如:E@webd+.(dev|qa|prod).loc
P --針對Grains做正則表達式匹配,例如:P@os:(RedHat|Fedora|CentOS)
L --針對minion做列表匹配,例如:[email protected],minion3.domain.com or bl*.domain.com
I --針對 Pillar 做單個匹配,例如:I@pdata:foobar
S --針對子網或是IP做匹配,例如:[email protected]/24 or [email protected]
R --針對客戶端範圍做匹配,例如:R@%foo.bar
常用模塊
pkg模塊(安裝軟件)
salt -N 'web01group' pkg.install 'httpd'
salt -N 'web02group' pkg.remove 'httpd'
file模塊(文件操作)
salt -N 'web02group' file.rename /root/test.txt /root/aaa.txt
cmd(遠程在客戶端shell環境下執行命令)
salt -N 'web02group' cmd.run "whoami"
user模塊(作用是管理系統賬戶操作)
service模塊(管理服務狀態)
salt '*' service.disable httpd
salt '*' service.start httpd
cron模塊(管理操作任務cron服務操作)
SaltStack配置安裝nginx
1.創建_grains目錄
mkidr /srv/salt/_grains
2.編輯配置文件的進程優化腳本
vim /srv/salt/_grains/nginx_config.py
#!/usr/bin/python
import os,sys,commands
def NginxGrains():
'''
return Nginx config grains value
'''
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
3.在/srv/pillar目錄下創建sls文件
vim top.sls
base:
group1:
- match: nodegroup
- server1
group2:
- match: nodegroup
- server2
vim server1.sls
nginx:
root: /data
vim server2.sls
nginx:
root: /www
4.同步grains模塊:salt '*' saltutil.sync_all
查看結果:salt '*' grains.item max_open_file
5.在salt目錄創建top.sls文件執行nginx.sls這個文件
vim top.sls
base:
'*':
- nginx
6.編寫安裝nginx的腳本文件
vim /srv/salt/nginx.sls
nginx:
pkg:
- installed
file.managed:
- source: salt://nginx/nginx.conf
- name: /etc/nginx/nginx.conf
- user: root
- group: root
- mode: 644
- template: jinja
service.running:
- enable: True
- reload: True
- watch:
- file: /etc/nginx/nginx.conf
- pkg: nginx
7.使用jinja模板定義nginx配置文件nginx.conf,首先創建一個nginx目錄,因爲上面定義了nginx配置文件的源路徑
mkdir /srv/salt/nginx
vim /srv/salt/nginx/nginx.conf
user nginx;
worker_processes {{grains['num_cpus']}};
{%if grains['num_cpus'] ==1 %}
worker_cpu_affinity 10;
{%elif grains['num_cpus'] ==2 %}
worker_cpu_affinity 01 10;
{%elif grains['num_cpus'] ==4 %}
worker_cpu_affinity 0001 0010 0100 1000;
{%elif grains['num_cpus'] ==8 %}
{%else%}
worker_cpu_affinity 0001 0010 0100 1000;
{%endif%}
worker_rlimit_nofile {{grains['max_open_file']}};
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections {{grains['max_open_file']}};
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
root {{pillar['nginx']['root']}};
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
這裏的worker_processes的參數和worker_connections參數都是通過腳本去隨着服務器的CPU和處理變化來進行變化達到最優配置
8.運行開始安裝
salt '*' state.highstate