一、简介
为什么叫salt? 因为写这个人的作者住在美国的盐湖城 为什么叫stack? 因为第一这个域名可以注册,第二现在觉得stack都很火,例如openstack..
官网:http://docs.saltstack.cn/
三种运行方式:
- Local
- Master/Minion 主节点/奴隶 #传统
- Salt SSH
三大功能:
- 远程执行
- 配置管理
- 云管理 #支持阿里云,亚马逊,各种云
支持操作系统:
二、安装
版本:
[root@node1-saltstack salt]# salt --version
salt 2015.5.10 (Lithium)
1、环境测试:node1-saltstack 10.1.250.96 node2-saltstack 10.1.250.95
域名建议名称:
适用于电商(不适合游戏公司): redis-node1-redis03-idc04-soa.exmaple.com
设置主机解析(避免去解析):
vim /etc/hosts
10.1.250.96 node1-saltstack
10.1.250.95 node2-saltstack
node1
yum install http://mirrors.sohu.com/fedora-epel/7/x86_64/e/epel-release-7-8.noarch.rpm
yum install epel-release-7-8.noarch.rpm
yum install salt-master salt-minion -y
node2
yum install http://mirrors.sohu.com/fedora-epel/7/x86_64/e/epel-release-7-8.noarch.rpm
yum install epel-release-7-8.noarch.rpm
yum install salt-minion -y
启动master及开机运行
systemctl enable salt-master.service
systemctl start salt-master.service
配置minion 设置成master的Ip,如果内网有dns是推荐的,这样换master是比较方便 vim /etc/salt/minion master: 10.1.250.96
启动minion
systemctl start salt-minion
systemctl enable salt-minion
三、认证(AS加密的)
key认证 启动minion后会发送公钥,私钥
[root@node1-saltstack ~]# cd /etc/salt/pki/minion/
[root@node1-saltstack minion]# ll
总用量 8
-r-------- 1 root root 1675 1月 6 10:24 minion.pem
-rw-r--r-- 1 root root 451 1月 6 10:24 minion.pub
master也会生成
[root@node1-saltstack]# cd /etc/salt/pki/master/
[root@node1-saltstack master]# ll
总用量 8
-r-------- 1 root root 1679 1月 6 10:13 master.pem
-rw-r--r-- 1 root root 451 1月 6 10:13 master.pub
drwxr-xr-x 2 root root 6 1月 6 10:13 minions
drwxr-xr-x 2 root root 6 1月 6 10:13 minions_autosign
drwxr-xr-x 2 root root 6 1月 6 10:13 minions_denied
drwxr-xr-x 2 root root 50 1月 6 10:24 minions_pre
drwxr-xr-x 2 root root 6 1月 6 10:13 minions_rejected
master要同意认证
[root@node1-saltstack master]# tree
.
├── master.pem
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre #目录下有2台主机未认证
│ ├── node1-saltstack
│ └── node2-saltstack
└── minions_rejected
[root@node1-saltstack master]# salt-key
Accepted Keys: 已经同意
Denied Keys: 拒绝
Unaccepted Keys:未同意有下面2条
node1-saltstack
node2-saltstack
Rejected Keys:
-A: 同意所有
-a: 支持通配符 例如:salt-key -a linux*
-d: 支持通配符
-D:慎用,删除所有节点
-L
[root@node1-saltstack master]# salt-key -a node*
The following keys are going to be accepted:
Unaccepted Keys:
node1-saltstack
node2-saltstack
Proceed? [n/Y] Y
Key for minion node1-saltstack accepted.
Key for minion node2-saltstack accepted.
[root@node1-saltstack master]# salt-key
Accepted Keys:#已经同意下面两条
node1-saltstack
node2-saltstack
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@node1-saltstack master]# tree
├── master.pem
├── master.pub
├── minions#已经从pre到了minions目录
│ ├── node1-saltstack
│ └── node2-saltstack
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
在master同意时,minion已经把master的公钥拿到了
[root@node2-saltstack ~]# cd /etc/salt/pki/minion/
[root@node2-saltstack minion]# ll
总用量 12
-rw-r--r-- 1 root root 451 1月 6 10:36 minion_master.pub #master的公钥已经拿了过来
-r-------- 1 root root 1675 1月 6 10:24 minion.pem
-rw-r--r-- 1 root root 451 1月 6 10:24 minion.pub
四、远程执行(核心功能)
[root@node1-saltstack ~]# salt '*' test.ping
node2-saltstack:
True
node1-saltstack:
True
salt:是命令 ‘*’ :所有minion执行,是为了避免转义 test.ping:发消息是否回复 ,test是模块,ping是一个方法
[root@node1-saltstack ~]# salt '*' cmd.run 'uptime'
node2-saltstack:
11:06:28 up 1:32, 2 users, load average: 0.00, 0.01, 0.05
node1-saltstack:
11:06:28 up 1:32, 2 users, load average: 0.00, 0.01, 0.05
‘uptime’ :参数 cmd.run:是一个万能的模块,可以执行所有的命令
五、利用saltstack安装软件:
[root@node1-saltstack ~]# vim /etc/salt/master file_roots: base: #环境 - /srv/salt #放在哪
创建目录:
[root@node1-saltstack ~]# mkdir /srv/salt
重启master:
[root@node1-saltstack ~]# systemctl restart salt-master
1、安装apache
[root@node1-saltstack salt]# vim apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel
apache-service:
service.running:
- name: httpd
- enable: True
- reload: True
pkg是模块,installed是方法 service是模块,running是方法 不同间系统是通用的,都已经封装好的
vim小技巧: :set list 显示所有字符
执行: salt ‘*’ state.sls apache
解释: salt:是一个命令 ‘*‘:通配符,代表在所有的minion上执行 state:模块 sls:方法 apache:参数
成功图:
2、高级状态,入口文件 默认情况下叫top.sls,必须放在bash环境下,就是现在的/srv/salt
[root@node1-saltstack salt]# vim top.sls
base:
'*-saltstack':
- apache
执行:
salt '*' state.highstate