网2112 发表于 2016-10-8 09:08:15

自动化运维Saltstack系列(一)之基础功能篇

Saltstack简介
Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高; Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。
自动化工具对比
1)Puppet 优点:老牌经典自动化配置软件、应用广泛、功能强大 缺点:不能批处理,使用Ruby和DSL语言开发,没有相关技术栈的公司维护和二次开发起来比较很难,门槛比较高;缺少错误检查和报告;最致命的是Puppet的执行是无序执行,对于一些配置或者部署有先后顺序的项目比较难以处理 2)Chef 优点:功能也比较强大(资料比较少) 缺点:官方文档说明比较模糊浅显;执行并非push实时执行,而是client端定时获取server端数据 3)Ansible 优点:社区年轻有活力,play-book使用yaml,简洁,不需要客户端client支持 缺点:使用SSH管理配置,理论上慢于Saltstack,对于不苛求执行效率,Ansible也是一个不错的选择 4)Saltstack 优点:功能不仅限于配置管理、使用Python开发、Grain/Pillar支持、自定义moudles 缺点:社区相对比较年轻,文档资料较少(其实官方文档已经讲解得很深入了...)
Saltstack的三种运行方式
·Local·Master/Minion·Salt SSHSaltstack最传统的运行方式还是C/S模式,需要在被管理节点上安装Minion客户端;其实Saltstack也支持SSH方式,无需安装Agent,通过SSH实现管理

Saltstack目前最主要的三大主要功能·远程执行·配置管理·云管理
接下来,我们也会一步步深入学习Saltstck的各个重要功能,通过Saltstack系列实现一套常规的web集群环境自动化配置管理...
Saltstack部署实验环境
1
2
3
4
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
# uname -r
3.10.0-327.el7.x86_64




实验主机
1
2
saltstack-node1   10.0.0.185Master/Minior
saltstack-node2   10.0.0.186Minior





1)安装yum源Saltsatck官方提供了一些专门的repo源:https://repo.saltstack.com/#rhel
1
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm




2)安装软件在node1上面安装Master和Minion,node2只安装Minion
1
2
# yum install -y salt-master salt-minion
# yum install -y salt-minion




修改Master的主机地址
1
2
# vim /etc/salt/minion
#master: 172.16.2.185 #master地址,注意空格




更改minion的id号
1
id: saltstack-node2.lichengbing.com #id号是唯一用来区分不同minion的标识,如果不设置,默认使用主机名




id号对于后期做配置管理作用很大,注意命名规则,等开启服务后,能在salt文件夹下看见id文件
1
2
# cd /etc/salt/
-rw-r----- 1 root root 31892 Sep 25 19:27 minion




3)开启Master和Minion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# systemctl start salt-master.service
# systemctl start salt-minion.service
# systemctl start salt-minion
# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address         Foreign Address         State       PID/Program name   
tcp      0      0 0.0.0.0:22            0.0.0.0:*               LISTEN      1039/sshd         
tcp      0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      42394/python      
tcp      0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      42542/python      
tcp6       0      0 :::22                   :::*                  LISTEN      1039/sshd         
udp      0      0 127.0.0.1:323         0.0.0.0:*                           746/chronyd         
udp6       0      0 ::1:323               :::*
                               746/chronyd
#4505端口用户消息发布、4506用户接收minion返回消息





想查看saltstack具体进程,可以安装一个python-setproctitle库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# yum install -y python-setproctitle
# systemctl restart salt-master
# ps -ef|grep salt-master
root      49340      18 20:28 ?      00:00:01 /usr/bin/python /usr/bin/salt-master ProcessManager
root      49354493400 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MultiprocessingLoggingQueue
root      49355493400 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master ZeroMQPubServerChannel
root      49358493400 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master EventPublisher
root      49359493405 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master Maintenance
root      49466493401 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master Reactor
root      49467493402 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master ReqServer_ProcessManager
root      49470494670 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorkerQueue
root      49480494676 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorker-0
root      49483494676 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorker-1
root      49486494676 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorker-2
root      49488494675 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorker-3
root      49489494676 20:28 ?      00:00:00 /usr/bin/python /usr/bin/salt-master MWorker-4





4)Minion的私钥、公钥认证当配置好master地址,启动minion后,minion端会发送自己的公钥到master端请求验证
1
2
3
4
5
6
7
8
# tree /etc/salt/pki
/etc/salt/pki
├── master
└── minion
    ├── minion.pem
    └── minion.pub#这是minion的公钥
# md5sum /etc/salt/pki/minion/minion.pub
f1190cb622042a2cc9ca918b3d3ab7da/etc/salt/pki/minion/minion.pub




被成功发送到了master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# tree /etc/salt/pki
/etc/salt/pki
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre #minions_pre用来存储接收到的minion公钥
│   │   ├── saltstack-node1.lichengbing.com
│   │   └── saltstack-node2.lichengbing.com
│   └── minions_rejected
└── minion
    ├── minion.pem
    └── minion.pub
# md5sum /etc/salt/pki/master/minions_pre/saltstack-node2.lichengbing.com
f1190cb622042a2cc9ca918b3d3ab7da/etc/salt/pki/master/minions_pre/saltstack-node2.lichengbing.com
#MD5验证确实是minion的公钥





5)master认证minion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# salt-key #查看连接成功的minion
Accepted Keys:
Denied Keys:
Unaccepted Keys:
saltstack-node1.lichengbing.com
saltstack-node2.lichengbing.com
Rejected Keys:
# salt-key -a saltstack-node1.lichengbing.com # -a认证参数
The following keys are going to be accepted:
Unaccepted Keys:
saltstack-node1.lichengbing.com
Proceed? y
Key for minion saltstack-node1.lichengbing.com accepted.
# salt-key -a saltstack-node2.lichengbing.com
The following keys are going to be accepted:
Unaccepted Keys:
saltstack-node2.lichengbing.com
Proceed? y
Key for minion saltstack-node2.lichengbing.com accepted.
# salt-key
Accepted Keys: #认证成功的minion
saltstack-node1.lichengbing.com
saltstack-node2.lichengbing.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:




认证成功后,master也会将自己的公钥发一份到minion,作为以后连接认证
1
2
3
4
5
6
7
# tree /etc/salt/pki
/etc/salt/pki
├── master
└── minion
    ├── minion_master.pub #master发送过来的公钥
    ├── minion.pem
    └── minion.pub





远程执行认证成功后,在master之上就可以执行简单的远程执行命令了测试minion存活情况
1
2
3
4
5
# salt '*' test.ping
saltstack-node1.lichengbing.com:
    True
saltstack-node2.lichengbing.com:
    True




批量对所有minion远程执行一个w命令
1
2
3
4
5
6
7
8
9
10
11
# salt '*' cmd.run 'w'
saltstack-node1.lichengbing.com:
   20:14:22 up7:21,2 users,load average: 0.10, 0.28, 0.31
    USER   TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root   tty1                      15:49    4:18m0.40s0.40s -bash
    root   pts/1    10.0.0.1         15:55   22.00s3.22s1.20s /usr/bin/python /usr/bin/salt * cmd.run w
saltstack-node2.lichengbing.com:
   20:14:23 up7:32,2 users,load average: 0.00, 0.01, 0.05
    USER   TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root   tty1                      12:51    1:50m0.29s0.29s -bash
    root   pts/0    10.0.0.1         18:24    4:39   1.51s1.51s -bash







页: [1]
查看完整版本: 自动化运维Saltstack系列(一)之基础功能篇