自动化运维工具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轻松扩展。
3、说明
Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。
三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。
支持系统:大多数都支持,windows 上不支持安装 master。
4、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发送指令了。
5、Master与Minion的连接
(1)、SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
=========================================================
二、SaltStack安装
预期目标:通过salt-ssh模块在被控制端关闭防火墙、selinux;安装yum源;安装minion软件;时间同步
salt-ssh介绍
1.salt-ssh 是 0.17.0 新引入的一个功能,不需要minion对客户端进行管理,也不需要master。
2.salt-ssh 支持salt大部分的功能:如 grains、modules、state 等
3.salt-ssh 没有使用ZeroMQ的通信架构,执行是串行模式
类似 paramiko、pssh、ansible 这类的工具。
roster使用(roster中文名登记簿)
salt-ssh需要一个名单系统来确定哪些执行目标,Salt的0.17.0版本中salt-ssh引入roster系统
roster系统编译成了一个数据结构,包含了targets,这些targets是一个目标系统主机列表和或如连接到这些targets。
=========================================================
具体配置如下:
1、安装salt-ssh
# yum install salt-ssh -y
--------------------------------------------------------------------------------------
2、修改roster文件,配置要管理的机器
# tail -11 /etc/salt/roster linux-node1.example.com: host: 192.168.56.11 user: root passwd: 123456 port: 22 linux-node2.example.com: host: 192.168.56.12 user: root passwd: 123456 port: 22
# target的信息 host: # 远端主机的ip地址或者dns域名 user: # 登录的用户 passwd: # 用户密码,如果不使用此选项,则默认使用秘钥方式 # 可选的部分 port: #ssh端口 sudo: #可以通过sudo tty: # 如果设置了sudo,设置这个参数为true priv: # ssh秘钥的文件路径 timeout: # 当建立链接时等待响应时间的秒数 minion_opts: # minion的位置路径 thin_dir: # target系统的存储目录,默认是/tmp/salt-<hash> cmd_umask: # 使用salt-call命令的umask值
--------------------------------------------------------------------------------------
3、进行管理测试
# salt-ssh '*' test.ping -i服务器较多的时候有点慢,耐心等待下
--------------------------------------------------------------------------------------
4、salt-ssh命令用法
-r, –raw, –raw-shell # 直接使用shell命令 –priv #指定SSH私有**文件 –-roster #定义使用哪个roster系统,如果定义了一个后端数据库,扫描方式,或者用户自定义的的roster系统,默认的就是/etc/salt/roster文件 –-roster-file #指定roster文件 –-refresh, –refresh-cache #刷新cache,如果target的grains改变会自动刷新 –-max-procs #指定进程数,默认为25 -i, –ignore-host-keys #当ssh连接时,忽略keys –passwd #指定默认密码 –key-deploy #配置keys 设置这个参数对于所有minions用来部署ssh-key认证,
这个参和–passwd结合起来使用会使初始化部署很快很方便。当调用master模块时,并加上参数 –key-deploy 即可在minions生成keys,下次开始就不使用密码
--------------------------------------------------------------------------------------
一定要注意中英文字符!!
5、salt-ssh批量关闭防火墙
centos6
#salt-ssh '*' -r 'service iptables stop'
# salt-ssh '*' -r 'chkconfig iptables off'
centos7
#salt-ssh '*' -r 'systemctl stop firewalld.service'
# salt-ssh '*' -r 'systemctldisable firewalld.service'
6、关闭selinux
# salt-ssh '*' -r 'setenforce 0'
# salt-ssh '*' -r 'sed -i 's/SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config'
7、安装yum源
#salt-ssh '*' -r ‘mv /etc/yum.repos.d/CentOS-Base.repo CentOS-Base.repo.backup’
#salt-ssh '*' -r 'wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS6-Base-163.repo'
#salt-ssh '*' -r 'yum install epel-release -y'
#salt-ssh '*' -r 'yum clean all && yum makecache'
8、安装salt-minion
#salt-ssh '*' -r 'yum install salt-minion -y'
9、时间同步
#salt-ssh '*' -r 'yum install ntp -y'
#salt-ssh '*' -r ‘sed -i "s/server /#server /g" /etc/ntp.conf’
#salt-ssh '*' -r ‘sed -i "\$a\server manager iburst” /etc/ntp.conf’
#salt-ssh '*' -r ‘sed -i "\$a\192\.168\.166\.102 manager” /etc/hosts’
#salt-ssh '*' -r 'service ntpd restart'
#salt-ssh '*' -r 'chkconfig ntpd on'
#salt-ssh '*' -r ‘sed -i "\$a\*\/10 \* \* \* \* ntpdate manager” /etc/crontab’
10、制定roster文件
#salt-ssh --roster-file=‘指定的roster路径’ 主机名 操作
# salt-ssh --roster-file='abc' '*' -r 'date'
参考文档:
Linux sed 批量替换字符串和更多用法