SaltStack详细部署

 

一、基础介绍
==========================================================================================
1、简介
SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack 基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、 python-msgpack和PyYAML等)构建。

通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

2、特性
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;

(6)、支持API及自定义模块,可通过Python轻松扩展。

wKiom1Sfzhmy2-OTAAIPxayI-Z4556.jpg

3、Master与Minion认证
(1)、 minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成 minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。

(2)、 master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

4、Master与Minion的连接
(1)、 SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系 统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。

wKioL1Sf0JHwhBhaAAEsYS9e6HE690.jpg

(2)、minion与master之间的通信模式如下:

wKiom1Sfzr-i8BUjAAF0EW4NxyY818.jpg

5、本次测试环境

IP地址

角色

系统环境

10.133.33.85

master

CentOS 6.3

10.130.87.151

minion

CentOS 6.3

==========================================================================================
二、SaltStack基础安装与配置
==========================================================================================
1、依赖组件说明
http://docs.saltstack.com/en/latest/topics/installation/index.html

wKioL1Sfz__ws2EVAANpFr96RiE332.jpg

SaltStack的通信模式总共分为2种模式:ZeroMQ、REAT,鉴于REAT目前还不是太稳定,我们选择ZeroMQ模式,本次安装采用源码安装的方式。

解压源码后,这些文本文件里也有组件依赖相关说明哈:

wKioL1Sf0NaTTpjDAARykJLGBv0733.jpg

2、SaltStack基础安装
(1)、python 2.7安装

https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
# tar xvzf Python-2.7.8.tgz
# cd Python-2.7.8
# ./configure --prefix=/usr/local
# make --jobs=`grep processor /proc/cpuinfo | wc -l`
# make install

## 将python头文件拷贝到标准目录,以避免编译saltstack时,找不到所需的头文件
# cd /usr/local/include/python2.7
# cp -a ./* /usr/local/include/

## 备份旧版本的python,并符号链接新版本的python
# cd /usr/bin
# mv python python2.6
# ln -s /usr/local/bin/python

## 修改yum脚本,使其指向旧版本的python,已避免其无法运行
# vim /usr/bin/yum

#!/usr/bin/python --> #!/usr/bin/python2.6

(2)、PyYAML模块安装
http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
# tar xvzf yaml-0.1.5.tar.gz
# cd yaml-0.1.5
# ./configure --prefix=/usr/local
# make --jobs=`grep processor /proc/cpuinfo | wc -l`
# make install

# tar xvzf PyYAML-3.11.tar.gz
# cd PyYAML-3.11
# python setup.py install


(3)、setuptools模块安装

https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
# tar xvzf setuptools-7.0.tar.gz
# cd setuptools-7.0
# python setup.py install

(4)、markupsafe模块安装
https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
# tar xvzf MarkupSafe-0.9.3.tar.gz
# cd MarkupSafe-0.9.3
# python setup.py install

(5)、jinja2模块安装
https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
# tar xvzf Jinja2-2.7.3.tar.gz 
# cd Jinja2-2.7.3
# python setup.py install

(6)、pyzmq模块安装
http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

注意:
系统自带的autoconf版本为2.63,在编译ZeroMQ时,由于版本较低,会报错不通过,故需安装大于2.63的版本。

# tar xvzf autoconf-2.69.tar.gz
# cd autoconf-2.69
# ./configure --prefix=/usr
# make
# make install

## 其他依赖库安装
# yum -y install libuuid.x86_64 libuuid-devel.x86_64
# yum -y install uuid.x86_64 uuid-devel.x86_64
# yum -y install uuid-c++.x86_64 uuid-c++-devel.x86_64

https://github.com/jedisct1/libsodium/archive/1.0.1.tar.gz
# tar xvzf libsodium-1.0.1.tar.gz
# cd libsodium-1.0.1
# ./autogen.sh
# ./configure --prefix=/usr/local 
# make --jobs=`grep processor /proc/cpuinfo | wc -l`
# make install

http://download.zeromq.org/zeromq-4.0.5.tar.gz
https://pypi.python.org/packages/source/p/pyzmq/pyzmq-14.4.1.tar.gz
# tar xvzf zeromq-4.0.5.tar.gz
# cd zeromq-4.0.5
# ./autogen.sh
# ./configure --prefix=/usr/local
# make --jobs=`grep processor /proc/cpuinfo | wc -l`
# make install

# tar xvzf pyzmq-14.4.1.tar.gz
# cd pyzmq-14.4.1
# python setup.py configure --zmq=/usr/local
# python setup.py install


(7)、M2Crypto模块安装

# yum -y install swig.x86_64

http://www.openssl.org/source/openssl-1.0.1g.tar.gz
# tar xvzf openssl-1.0.1g.tar.gz
# cd openssl-1.0.1g
# ./config shared --prefix=/usr/local
# make && make install

https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.22.3.tar.gz
# tar xvzf M2Crypto-0.22.3.tar.gz
# cd M2Crypto-0.22.3
# python setup.py install

注意:

wKioL1Sf0SihxJdTAAOvt6zwKuQ140.jpg

如果出现以上报错,执行以下命令:
# cp -a /usr/local/include/openssl /usr/include/

(8)、msgpack模块安装
https://pypi.python.org/packages/source/m/msgpack-python/msgpack-python-0.4.2.tar.gz
# tar xvzf msgpack-python-0.4.2.tar.gz
# cd msgpack-python-0.4.2
# python setup.py install

(9)、msgpack-pure模块安装
https://pypi.python.org/packages/source/m/msgpack-pure/msgpack-pure-0.1.3.tar.gz
# tar xvzf msgpack-pure-0.1.3.tar.gz
# cd msgpack-pure-0.1.3
# python setup.py install

(10)、pycrypto模块安装
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
# tar xvzf pycrypto-2.6.1.tar.gz
# cd pycrypto-2.6.1
# python setup.py install

(11)、requests模块安装
https://pypi.python.org/packages/source/r/requests/requests-2.5.0.tar.gz
# tar xvzf requests-2.5.0.tar.gz
# cd requests-2.5.0
# python setup.py install

wKioL1Sf0ZnjB3EWAAT7h_5cIKk502.jpg

# vim Python-2.7.8/Modules/Setup

wKiom1Sf0SnAF2fRAAFMPwSeVfw093.jpg

然后再重新对python-2.7.8进行编译安装即可解决以上问题。

# vim/etc/ld.so.conf

/usr/local/lib

/usr/local/lib64

# /sbin/ldconfig

# cd Python-2.7.8
# make && make install

注意:
如果openssl库在python之前已经安装,就不会出现这种情况,也无需经历此步骤,此处更多的是想说明一下组件之间的依赖关系,作为提醒。

(12)、其他模块安装
https://pypi.python.org/packages/source/l/libnacl/libnacl-1.3.5.tar.gz
https://pypi.python.org/packages/source/i/ioflo/ioflo-1.0.2.tar.gz
https://pypi.python.org/packages/source/s/six/six-1.8.0.tar.gz
https://pypi.python.org/packages/source/r/raet/raet-0.4.2.tar.gz
https://pypi.python.org/packages/source/M/Mako/Mako-1.0.0.tar.gz

注意:
以上模块为REAT通信模式所依赖的模块,作为可选项,非必要。

(13)、saltstack安装
https://github.com/saltstack/salt/releases/download/v2014.7.0/salt-2014.7.0.tar.gz
# tar xvzf salt-2014.7.0.tar.gz
# cd salt-2014.7.0
# python setup.py install

# salt --versions-report

wKiom1Sf0cKz9gDzAAGy2YGKprQ499.jpg

3、SaltStack配置
(1)、master端

# mkdir /etc/salt
# cp -a conf/master /etc/salt/
# cp -a pkg/suse/salt-master /etc/init.d/
# chmod +x /etc/init.d/salt-master
# chkconfig --level 235 salt-master on

# mkdir -p /var/log/salt /srv/salt

# vim /etc/salt/master
interface: 10.133.33.85
auto_accept: True

# ln -s /usr/local/bin/salt-master /usr/bin/
# service salt-master start

# netstat -ntlp

wKiom1Sf0kyT5tfmAAHOQhhowLw653.jpg

# ps aux | grep python

wKiom1Sf0sijET1tAAO0_Kr49_s600.jpg

(2)、minion端
# mkdir /etc/salt
# cp -a conf/minion /etc/salt/
# cp -a pkg/suse/salt-minion /etc/init.d/
# chmod +x /etc/init.d/salt-minion
# chkconfig --level 235 salt-minion on

# mkdir -p /var/log/salt

# vim /etc/salt/minion
master: 10.133.33.85
id: minion-10-130-87-151

# ln -s /usr/local/bin/salt-minion /usr/bin/
# service salt-minion start

# ps aux | grep python

wKioL1Sf1AOhW4LqAADK39r9R4Y882.jpg

4、SaltStack简单使用
## 查看当前的salt key信息
# salt-key -L

wKiom1Sf06XTHnz7AACYyu0j3cw532.jpg

## 测试被控主机的连通性
# salt '*' test.ping

wKiom1Sf0-ujfcVrAAB3_5XnO4Q909.jpg

## 远程命令执行测试
# salt '*' cmd.run 'uptime'

wKioL1Sf1PKhiFH3AAC4sHQ-dlk870.jpg

## 根据被控主机的grains信息进行匹配过滤
# salt -G 'os:Centos' test.ping

wKiom1Sf1JDyTqp4AAB63fXt6hw598.jpg

## 显示被控主机的操作系统类型
# salt '*' grains.item os

wKiom1Sf1NTxlPsnAACcxbpeFK0008.jpg

## 远程代码执行测试
# salt '*' cmd.exec_code python 'import sys; print sys.version'

wKioL1Sf1cWgTlOxAADseqP5EdA281.jpg

5、常用模块介绍
(1)、cp模块(实现远程文件、目录的复制,以及下载URL文件等操作)
## 将主服务器file_roots指定位置下的目录复制到被控主机
# salt '*' cp.get_dir salt://hellotest /data

##将主服务器file_roots指定位置下的文件复制到被控主机
# salt '*' cp.get_file salt://hellotest/rocketzhang /root/rocketzhang

## 下载指定URL内容到被控主机指定位置
# salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz

(2)、cmd模块(实现远程的命令行调用执行)
# salt '*' cmd.run 'netstat -ntlp'

(3)、cron模块(实现被控主机的crontab操作)
## 为指定的被控主机、root用户添加crontab信息
# salt '*' cron.set_job root '*/5' '*' '*' '*' '*' 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root

## 删除指定的被控主机、root用户的crontab信息
# salt '*' cron.rm_job root 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root

(4)、dnsutil模块(实现被控主机通用DNS操作)
## 为被控主机添加指定的hosts主机配置项
# salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 rocketzhang.qq.com

(5)、file模块(被控主机文件常见操作,包括文件读写、权限、查找、校验等)
# salt '*' file.get_sum /etc/resolv.conf md5
# salt '*' file.stats /etc/resolv.conf
更多功能可以看文档哈 ^_^

(6)、network模块(返回被控主机网络信息)
# salt '*' network.ip_addrs
# salt '*' network.interfaces
更多功能可以看文档哈 ^_^

(7)、pkg包管理模块(被控主机程序包管理,如yum、apt-get等)
# salt '*' pkg.install nmap
# salt '*' pkg.file_list nmap

(8)、service 服务模块(被控主机程序包服务管理)
# salt '*' service.enable crond
# salt '*' service.disable crond

# salt '*' service.status crond
# salt '*' service.stop crond
# salt '*' service.start crond
# salt '*' service.restart crond
# salt '*' service.reload crond

(9)、更多功能
更多的功能,比如:grains、pillar、states、modules、returner、runners、reactor等,还有如下高级命令的使用,以及模板配置的渲染、扩展模块的二次开发等,可以自己去深入学习哈。

==========================================================================================
附录
==========================================================================================
一些学习资料:
http://docs.saltstack.com/en/latest/ref/modules/all/index.html
http://docs.saltstack.com/en/latest/ref/modules/index.html
http://www.saltstack.cn/projects/cssug-kb/wiki
http://salt-api.readthedocs.org/en/latest/
http://xiaorui.cc/category/saltstack/
http://www.shencan.net/index.php/category/%e8%87%aa%e5%8a%a8%e5%8c%96%e8%bf%90%e7%bb%b4/saltstack/
http://liuping0906.blog.51cto.com/2516248/d-13
http://lixcto.blog.51cto.com/4834175/d-1
http://blog.coocla.org/category/saltstack
http://pengyao.org/

资源站点:
https://github.com/saltstack/
https://github.com/saltstack-formulas
https://github.com/cssug

转自:http://sofar.blog.51cto.com/353572/1596960

最新文章

  1. 聚合数据天气预报API-ajax 通过城市名取数据
  2. 一步一步使用sklearn
  3. Sed简单入门实例
  4. jsp的一些基本语法
  5. IT架构之IT架构标准——思维导图
  6. batchExportPNG.py不是我的代码
  7. JAVA Calendar具体解释
  8. Struts2的声明式异常处理
  9. 解决Struts2.2.20版本的标签不支持style属性的问题
  10. YII编码规范
  11. 简易js模板引擎
  12. [Python Study Notes]字符串处理技巧(持续更新)
  13. ajax实现无刷新分页效果
  14. Linux新手随手笔记
  15. flask 实现登录 登出 检查登录状态 的两种方法的总结
  16. dubbo基础
  17. js获取iframe中的元素
  18. 洛谷——P1890 gcd区间
  19. java 类的加载、连接和初始化
  20. SQL Server 字符串拼接与拆分 string varchar Split and Join

热门文章

  1. python操作excel获取内容
  2. 使用flow来规范javascript的变量类型
  3. haproxy 2.0 dataplaneapi rest api 试用
  4. Centrifugo  语言无关的实时消息服务
  5. Linux 系统管理——Linux文件系统与日志
  6. 分享一个Centos8的国内yum源
  7. linux高性能服务器编程 (九) --I/O复用
  8. shell 字符串转数组
  9. 更改THttpClientSocket连接超时时间
  10. grpc使用记录(二)简单同步服务实例