Saltstack深度实践(1)

一、简介

为什么叫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

Search

    Table of Contents