自动化运维好帮手之Slatstack批量管理

引用也不知谁说的一句话:
一个没有自动化运维的梦的运维OPS不是一个好开发。啧啧……

一、Slatstack简介

  Saltstack是一个基于Python开发的一种C/S架构配置管理工具的服务器基础架构管理平台,具备配置管理、远程执行、监控等功能,可以理解为简化版的额Puppet 和加强版的SSHKey.
  Saltstack给予python语言实现,结合轻量级的消息队列(ZeroMQ)与Python第三方模块(Pyzmq、Pyjinjia2、python-msgpack及PyYAML等)构建。

二、Slatstack特性

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

  1)部署简单、方便;
  2)支持大部分Unix/Linux 及windows环境
  3)主从集中化管理;
  4)配置简单,功能强大,拓展性强
  5)主控端(master)和被控端(minion)基于证书认证,安全可靠。;
  6)支持API及自定义模块,可通过Python轻松拓展。

三、Saltstack服务模式及核心功能

3.1 Saltstack服务模式
 1)C/S架构服务模式:
  Saltstack架构中,服务器端 Master 客户端叫做 Minion;
 1)Msterless架构模式:
说明:实际生产环境中,一般使用Master 和Minion模式进行配置管理;
3.2 Saltstack核心功能:

	1)使命令发送到远程系统是并行而不是串行
	2)使用ssl安全加密的协议
	3)使用最小最快的网络载荷
	4)提供简单的编程接口
	5)salt 域控制系统来远程执行,是系统成为目标,不仅可以使用主机名还可以使用系统属性;

3.3 Saltstack 三大功能
  1.远程执行
  2.配置管理(状态,不可以回滚,需要谨慎操作)
  3.云管理
3.4 四种运行方式:

  1.Local #本地模式
  2.Minion/Master  #C/S架构(客户端/服务器 )
  3.Syndic -Zabbix proxy  #代理模式
  4.Salt   #SSHSSH模式

3.5 Saltstack有两种消息系统:
  1.RAET(测试阶段)
  2.ZeroMQ(默认使用)
3.6 关于master和minion认证说明:

  1. minoin在第一次启动时,会在/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命令的public key 然后master就能对minion发送指令了。

3.7 关于master和minion通信说明:
  1)Saltstack master 启动后默认的监听4505 和4506 两个端口;4505端口(public_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof查看4505端口,会发现所有的minion 4505端口持续保持在 ESTABLISHED 状态。
  2)minion与master之间的通信模式如下:

四、Saltstack安装部署及远程执行


下面让我们开始Saltstac 之路吧
安装之前我们先来安装软件依赖:
软件依赖要求:

	1)Python版本要求Python版本大于2.6小于3.0
	2)msgpack-python: Saltstack消息交换库
	3)YAML: Saltstack配置解析定义语法
	4)jinja2: Saltstack states配置模板
	5)MarkupSafe: Python unicode转换库
	6)apache-libcloud: Saltstack对云架构编排库
	7)Requests HTTP Python库
	8)Zero MQ: Saltstack消息系统
	9)pyzmq: ZeroMQ Python库
	10)PyCrypto: Python 密码库
	11)M2Crypto: Openssl Python包装库

安装系统环境:

  操作系统:centos7 x86_64
  主机1: IP:192.168.56.11
       主机名: linux-node1.oldboyedu.com
  主机2: IP: 192.168.56.12
       主机名:linux-node2.oldboyedu.com

Saltstack官方的仓库
  http://repo.saltstack.com

CENTOS 7 yum仓库
sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm -y
好,上面铺垫完毕,下面我们开始来安装 Saltstack
安装说明:

  1.在主机192.168.56.11上安装salt-master 和salt-minion
  2.主机192.168.56.12上安装salt-minion

  1)具体过程:

[root@linux-node1 ~]# yum install -y salt-master salt-minion
[root@linux-node2 ~]# yum install -y salt-minion

#启动192.168.56.11上的salt-master
[root@linux-node1 ~]# systemctl start salt-master
  2)配置minion的配置文件
首先进入salt文件夹
#进入指定目录/etc/salt/ 并查看当前目录结构

[root@linux-node2 ~]# cd /etc/salt/
[root@linux-node2 salt]# ll
total 108
-rw-r----- 1 root root  2626 Aug 27 02:55 cloud
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.conf.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.deploy.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.maps.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.profiles.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.providers.d
-rw-r----- 1 root root 39826 Aug 27 02:55 master
drwxr-xr-x 2 root root     6 Aug 31 05:59 master.d
-rw-r----- 1 root root 31854 Aug 27 02:55 minion
drwxr-xr-x 2 root root     6 Aug 31 05:59 minion.d
drwxr-xr-x 4 root root    32 Sep 19 17:22 pki
-rw-r----- 1 root root 26855 Aug 27 02:55 proxy
-rw-r----- 1 root root   344 Aug 11  2015 roster

#更改minion配置文件:
[root@linux-node2 salt]# vim /etc/salt/minion
16行
master: salt更改为:master: 192.168.56.11
说明:生产环境中,最佳实践是使用主机名解析;
101行

id 唯一标识符 ==》默认不配置#id
主机名:FQDN名==》配置好,保存并退出

#查看主机名

[root@linux-node1 salt]# hostname
linux-node1.oldboyedu.com

#启动salt-minion
[root@linux-node1 salt]# systemctl start salt-minion
#然后我们查看/etc/salt目录结构多了一个minion_id的文件

[root@linux-node1 salt]# ll
total 112
-rw-r-----. 1 root root  2626 Aug 27 02:55 cloud
drwxr-xr-x. 2 root root     6 Aug 31 05:59 cloud.conf.d
drwxr-xr-x. 2 root root     6 Aug 31 05:59 cloud.deploy.d
drwxr-xr-x. 2 root root     6 Aug 31 05:59 cloud.maps.d
drwxr-xr-x. 2 root root     6 Aug 31 05:59 cloud.profiles.d
drwxr-xr-x. 2 root root     6 Aug 31 05:59 cloud.providers.d
-rw-r-----. 1 root root 39826 Aug 27 02:55 master
drwxr-xr-x. 2 root root     6 Aug 31 05:59 master.d
-rw-r-----. 1 root root 31862 Sep 21 00:20 minion
drwxr-xr-x. 2 root root     6 Aug 31 05:59 minion.d
-rw-r--r--. 1 root root    25 Sep 21 00:21 minion_id
drwxr-xr-x. 4 root root    32 Sep 20 02:18 pki
-rw-r-----. 1 root root 26855 Aug 27 02:55 proxy
-rw-r-----. 1 root root   344 Aug 11  2015 roster

#我们查看minion_id文件
[root@linux-node1 salt]# cat minion_id
linux-node1.oldboyedu.com[root@linux-node1 salt]#

3)然后我们把node2这台机器的minion也更改了:
vim /etc/salt/minion

16行 更改为 master: 192.168.56.11
#保存退出后我们启动salt-minion
systemctl start salt-minion

安装配置小结:

  1.配置yum源,yum安装
  2.分别更改安装salt-minion配置文件
  3.分别启动salt-minion
特别说明:saltstack的配置文件严格要求空格(YAML语法),具体我们后面文章在详细说明。

接上文我们查看下node2 /etc/salt文件目录

[root@linux-node2 salt]# ll
total 112
-rw-r----- 1 root root  2626 Aug 27 02:55 cloud
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.conf.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.deploy.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.maps.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.profiles.d
drwxr-xr-x 2 root root     6 Aug 31 05:59 cloud.providers.d
-rw-r----- 1 root root 39826 Aug 27 02:55 master
drwxr-xr-x 2 root root     6 Aug 31 05:59 master.d
-rw-r----- 1 root root 31862 Sep 20 15:33 minion
drwxr-xr-x 2 root root     6 Aug 31 05:59 minion.d
-rw-r--r-- 1 root root    25 Sep 20 15:33 minion_id
drwxr-xr-x 4 root root    32 Sep 19 17:22 pki
-rw-r----- 1 root root 26855 Aug 27 02:55 proxy
-rw-r----- 1 root root   344 Aug 11  2015 roster

#对比后我们发现多了个pki文件夹

[root@linux-node2 salt]# tree pki/
pki/
├── master
└── minion
    ├── minion.pem
    └── minion.pub
2 directories, 2 files

#我们看下node1 /etc/salt/

[root@linux-node1 salt]# tree pki/
pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   ├── linux-node1.oldboyedu.com
│   │   └── linux-node2.oldboyedu.com
│   └── minions_rejected
└── minion
    ├── minion.pem
    └── minion.pub
7 directories, 6 files

这里的/etc/salt/pki 下linux-node1.oldboyedu.com 文件就是node2 /etc/salt/pki 下的minion.pub
4)配置认证:
#查看所有key

[root@linux-node1 pki]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
linux-node1.oldboyedu.com
linux-node2.oldboyedu.com
Rejected Keys:

#签收所有签证
[root@linux-node1 pki]# salt-key -A -y
命令说明

salt-key -L #查看当前所有证书情况
salt-key -A -y  # -A 是接受所有等待认证的key
  -l ARG, --list=ARG #显示指定状态的key(支持正则表达式)
  -L, --list-all  #显示所有public keys
  -a ACCEPT, --accept=ACCEPT #接受指定等待认证的key(支持正则表达式)
  -A, --accept-all  #接受所欲等待认证得key
  -r REJECT, --reject=REJECT  #拒绝指定的等待认证的key(支持正则)
  -R, --reject-all  #拒绝所有等待认证的key
  -d DELETE, --delete=DELETE #删除指定key
  -D, --delete-all  #删除所欲key
  -f FINGER, --finger=FINGER #删除指定key
  -F, --finger-all  #删除所有key

更过salt-key 命令参数 详细查看salt-key -h
#测试远程执行
下面我们来执行第一条saltstack命令:

[root@linux-node1 ~]# salt '*' test.ping
linux-node2.oldboyedu.com:
    True
linux-node1.oldboyedu.com:
    True

到目前为止,Saltstack基础环境就全部搭建完成了
好吧,这里让我们来执行第一条命令:
salt '*' cmd.run 'w'

参考资料:
官方网站:http://www.saltstack.com
官方文档:http://docs.saltstack.com
GitHub:https://github.com/saltstack
中国SaltStack户组:http://www.saltstack.cn

1 条评论

发表评论

*