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做列表匹配,例如:L@minion1.test.com,minion3.domain.com or bl*.domain.com
I --针对 Pillar 做单个匹配,例如:I@pdata:foobar
S --针对子网或是IP做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
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