saltstack

saltstack
Saltstack是一个大型分布式的配置管理系统(安装升级卸载软件,检测环境),也是一个远程命令执行系统。saltstack的两大功能:远程执行和配置管理。
Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。
 
Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
自动化运维:
0>需求分析
1>机房设备上下架
2>系统初始化
3>应用环境初始化
4>应用的的部署
5>代码发布
6>服务监控
7>数据备份
-------------------------------------------------
安装saltstack
redhat6.5平台
服务器端:master ---- 客户端:minion
需要epel,yum源:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum clean all
或者:
rpm -ivh epel-release-6-8.noarch.rpm
----------------------------------------
saltstack源:
[saltstack]
name=SaltStack
baseurl=https://repo.saltstack.com/yum/redhat/6/$basearch/latest/
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/6/$basearch/latest/SALTSTACK-GPG-KEY.pub
enabled=1
enabled_metadata=1
---------------------
所依赖的包:
PyYAML27.x86_64 0:3.11-2.el6 libyaml.x86_64 0:0.1.3-4.el6
python27.x86_64 0:2.7.13-2.ius.el6 python27-babel.noarch 0:0.9.4-5.2.el6
python27-chardet.noarch 0:2.2.1-3.el6 python27-crypto.x86_64 0:2.6.1-4.el6
python27-futures.noarch 0:3.0.3-2.el6 python27-jinja2.noarch 0:2.8.1-2.el6
python27-libs.x86_64 0:2.7.13-2.ius.el6 python27-markupsafe.x86_64 0:0.11-11.el6
python27-msgpack.x86_64 0:0.4.6-2.el6 python27-psutil.x86_64 0:5.2.2-1.ius.el6
python27-pycurl.x86_64 0:7.19.0-10.el6 python27-requests.noarch 0:2.6.0-4.el6
python27-six.noarch 0:1.9.0-3.el6 python27-tornado.x86_64 0:4.2.1-3.el6
python27-urllib3.noarch 0:1.10.2-2.el6 python27-zmq.x86_64 0:14.5.0-3.el6
-----------------------------------------
master端
yum -y install salt-master
修改配置文件:
vim /etc/salt/master
interface: 192.168.1.113 #此处是server端监听的地址。
auto_accept: True     #此lsof -i:4505
lsof -i:4506
处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。
file_roots: #指定salt文件根目录位置。
base:
- /srv/salt/
prod:
- /srv/salt/prod/states
创建相应目录:
mkdir -p /srv/salt/prod/states
master端启动
service salt-master restart
/etc/init.d/salt-master
minion端:
yum -y install salt-minion
修改配置文件:
vim /etc/salt/minion
master: masterIP         #绑定master主机IP地址。
id: vm4          #更改被控端主机识别id,建议用主机名来配置
启动服务:
service salt-minion restart
/etc/init.d/salt-minion restart
-----------------------------------------------------------
master端:
(1)证书管理:
master端证书存放位置:/etc/salt/pki/minion
salt-key -L #查询所有接收到的证书
salt-key -a <证书名>   #接收单个证书
salt-key -A #接受所有证书
salt-key -d <证书名>   #删除单个证书
salt-key -D #删除所有证书
(2)salt实时批量基本操作:
man salt
salt '*'test.ping # 测试所有主机的连通性(此处*为通配符)
salt -E '*' cmd.run 'free -m' # -E使用正则,cmd.run执行远程命令
salt '*' cmd.run "df -h" #查看所有主机的磁盘信息
salt '*' cmd.script salt://hello.sh 
salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'
#cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/
salt '*'  state.highstate #向客户端推送master端配置。       
salt '*' cmd.run 'df -h '  -t 5 #超时控制(默认5s)
    
(3)salt分组管理
vim /etc/salt/master.d/group.conf
nodegroups:
  group1: 'L@DG-Server-27,DG-Server-28'
  group2: 'L@qsmind'
vim /etc/salt/master
nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
group2: 'G@os:Debian and foo.domain.com'
group3: 'G@os:Debian and N@group1'
group4:
- 'G@foo:bar'
- 'or'
- 'G@foo:baz'
(4)salt-run检查客户端up状态
salt-run manage.status #查看所有客户端up/down状态
salt-run manage.up #只显示up状态的客户端
salt-run manage.down #只显示down状态的客户端
(5)salt-cp批量拷贝文件
语法: salt-cp [options] '<target>' 源 目标
salt-cp '*' /etc/hosts /etc/hosts  #把master上的hosts文件分发到所有主机。
(6)saltstack定时同步
可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。
也可以把salt '*' state.highstate放在master端的定时任务中,来进行自动推送到所有机器。
也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样。
schedule:
highstate:
function:state.highstate
seconds:300
(7)saltstack自动分发目录
指定同步的目录后,以后文件只需放到该目录下就会自动同步到minion端。
vim /srv/salt/top.sls
base: #在top.sls文件中指定哪些主机访问哪些目录
  "DG-Server*": #匹配到DG-Server*的minion被控端
- ssh_key.key
- zabbix.zabbix
  
vim /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts: #指定minion端同步后生成的目录
  file.recurse:
- source: salt://zabbix/zabbix_scripts #指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
- dir_mode: 755 #用dir_mode和file_mode来设置文件和目录的权限
- file_mode: 744
  
(8)saltstack自动分发文件
如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限。
vim /srv/salt/top.sls
base:
  "DG-Server*":
- ssh_key.key
- zabbix.zabbix
  
vim /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/etc/zabbix_agentd.conf.d/UserParameter.conf: #指定在minion端生成的文件名
file.managed:
  - source: salt://zabbix/UserParameter.conf #指定在master同步的原始文件
  - backup: minion #当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/
  - mode: 744
  - user: root
  - group: root
salt文件状态管理模块file.managed
vim top.sls               
base:  #这里指定的环境是base,所以这个top.sls在/srv/salt/base目录下
  "*": #“*”是所有主机的意思,指定单个主机直接写“salt-minion1”
    - system.hosts #这里指调用了那些sls配置文件,“点”在这里是目录分级
#也就是system没有可以下的hosts.sls配置文件
  
vim system/hosts.sls
/etc/hosts: #这个是配置ID和文件存放位置,是不可重复的
  file.managed: #这里调用了“file.managed”salt的文件管理模块
    - source: salt://system/files/hosts #source是指定文件源,"salt://"是指salt项目下文件
    - mode: 644 #文件权限644
    - user: root #文件用户属主
    - group: root #文件的用户组
# salt 'salt-minion1' state.highstate#salt '执行节点' 执行模块   
下面是执行结果
salt-minion1: #执行节点
----------
ID: /etc/hosts   #配置ID
Function: file.managed #模块
Result: True #执行结果True为成功
Comment: File /etc/hosts updated #文件执行操作【更新】
Started: 14:15:55.120499 #执行命令开始时间
Duration: 24.284 ms #执行的时长
Changes: #是否产生更改
 ----------
     diff:
       --- 
+++ 
@@ -1,2 +1,4 @@
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain
+salt-master 10.0.0.11 #在这个带有“+”号的行是增加的,"-"号为减少行
+salt-minion1 10.0.0.21
  
Summary
------------
Succeeded: 1 (changed=1) #执行成功1个,有一个文件状态发生更改
Failed: 0 #执行失败0个
------------
Total states run: 1 #执行状态个数
原文地址:https://www.cnblogs.com/skyzy/p/9226805.html