Saltstack 自动化管理工具

Saltstack 自动化管理系统

1. 简介

  • Saltstack是基于python开发的一套C/S架构配置管理工具
  • 使用SSL证书签方的方式进行认证管理
  • 底层使用ZeroMQ消息队列pub/sub方式通信

    • 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作
    • 采用RSA Key方式确认身份
  • Saltstack基于C/S架构

    • 服务器端称作Master
    • 客户端称作Minion
  • 可以实现传统处理方式,即:客户端发送请求给服务器,服务器收到请求后处理请求,再将结果返回
  • 也可以使用消息队列中的发布与订阅(pub/sub)服务模式
    这里写图片描述
  • Saltstack工作机制
    • Master和Minion都以守护进程的方式运行
    • Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
    • 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
    • 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了

2. 进行软件的安装下载

1. 所需安装包及依赖性

可通过配置yum源为:https://repo.saltstack.com/yum/redhat/ 进行联网在线安装

master

 [root@server1 ~]# yum install -y salt-master

配置文件为 /etc/salt/master
启动服务

 [root@server1 ~]# /etc/init.d/salt-master start

minion

 [root@server2 ~]# yum install -y salt-minion

编辑配置文件/etc/salt/minion 进行,进行 master 指定

 [root@server2 ~]# vim /etc/salt/minion
 添加如下内容:
 #master: salt
 master: 172.25.21.1    # 指定master,可用IP,支持域名解析

启动minion

 [root@server2 ~]# /etc/init.d/salt-minion start
2. 进行公钥交换

启动后,minion 会自动向master 发送key,但master默认是不会接收的,需要进行手动接收
执行如下:

 [root@server1 ~]# salt-key -L
 Accepted Keys:  # 接收的公钥
 Denied Keys:   # 拒绝的公钥
 Unaccepted Keys:  # 未接收的公钥
 server2        # 主机名
 Rejected Keys:  # 拒绝的公钥
 手动进行添加:
 [root@server1 ~]# salt-key -A   
         # -A 表示接收所有请求公钥
         # -a 表示指定进行接收
 The following keys are going to be accepted:
 Unaccepted Keys:
 server2
 Proceed? [n/Y] y
 Key for minion server2 accepted.
 [root@server1 ~]# salt-key -L
 Accepted Keys:   
 server2     # server2已建立连接
 Denied Keys:
 Unaccepted Keys:
 Rejected Keys: 
 继进行ping测试:
 [root@server1 ~]# salt server2 test.ping
 server2: 
     True      # 可ping通

这里写图片描述
这里写图片描述
连接建立完成

其简单的信息介绍

数据缓存在 var/cache/salt
公钥存放在/etc/salt/pki
工作端口 4505:长连接端口
4506:发布订阅端口
再master端的cache中进行记录,每次提交的信息都会被记录
zmq(zreoMQ)
消息队列(pub/sub)
将控制文件,发送到所有的minion端,并以以超级用户的身份进行

3. 进行具体配置

进行简单的模块调用,类是于ansible的playbook
salt有自己的.sls文件,通过state模块进行执行

 Salt运行一个用zeromq编写的轻量级文件服务器,将文件交付给zeromq
 #仆从。这个文件服务器内置在主守护进程中,而不是
 需要专用端口。

修改master配置文件,指定files的base目录

 [root@server1 ~]# vim /etc/salt/master  
                 # 编辑 master 主配置文件
  534 file_roots:   # 
  535   base:
  536     - /srv/salt
 [root@server1 ~]# /etc/init.d/salt-master restart
                 # 编辑完成,重启服务

编辑.sls文件,进行命令下达(以安装配置mysql服务为例)

 建立指定目录与文件
 [root@server1 ~]# mkdir /srv/salt
 [root@server1 ~]# cd /srv/salt/
 [root@server1 salt]# mkdir mysql
 [root@server1 salt]# ls
 mysql
 [root@server1 salt]# cd mysql/
 [root@server1 mysql]# ls
 进行编辑:
 [root@server1 mysql]# vim install.sls
 内容如下:
 mysql,apache-install:  # 指定名称
  pkg.installed:    # 调用模块
    - pkgs:         # 多安装包安装
      - mysql-server   # 安装包名称
      - httpd          # 安装包名称
  file.managed:     # 指定监控的文件
    - name: /etc/my.cnf  # 文件名,minion端的
    - source: salt://mysql/files/my.cnf  # 同步的源头,master端进行
    - mode: 644     # 权限
    - user: root    # 用户

  service.running:  # 服务状态模块
    - name: mysqld  # 服务名称
    - enable: True  # 允许开机自启动
    - restart: True # 是否重新启动以加载配置文件
    - watch:        # 监控文件
      - file: mysql,apache-install

编辑完成,执行命令向minion推送

 [root@server1 ~]# salt server2 mysql.install

2. Grains组件

  • GRAINS组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者重新同步下 grains。除此之外我们还可以自定义Grains的一些信息。自定义的方法有三种:1、通过Minion配置文件定义;2、通过Grains相关模块定义;3、通过python脚本定义
1、查看Grains相关的命令及用法
 [root@server1 salt]# salt server2 sys.list_functions grains
 server2:
     - grains.append
     - grains.delval
     - grains.fetch
     - grains.filter_by
     - grains.get
     - grains.get_or_set_hash
     - grains.has_value
     - grains.item
     - grains.items
     - grains.ls
     - grains.remove
     - grains.set
     - grains.setval
     - grains.setvals

每个命令的帮助信息又可以通过sys.doc查看,如下:

 [root@server1 salt]# salt server2 sys.doc grains.items
 grains.items: 

     Return all of the minion's grains 

     CLI Example:

         salt '*' grains.items

     Sanitized CLI Example:

         salt '*' grains.items sanitize=True

指定某一项进行查看

 [root@server1 salt]# salt server2 grains.item ipv4
 server2:
     ----------
     ipv4:
         - 127.0.0.1
         - 172.25.25.2
2.自定义Grains
1.通过Minion配置文件配置

在Minion端我们可以通过查看/etc/salt/minion配置文件中,查找grains可以查看到相关注释的示例。不过便于配置管理,我们不一般不会选择在该文件上进行修改,而在minion include的目录下/etc/salt/minion.d目录下单独创建grains.conf文件。就以官方给出的示例,将minion配置文件中配置示例复到/etc/salt/minion.d/grains.conf中,并将注释去掉,如下:

 [root@server2 ~]# vim /etc/salt/minion.d/grain.conf
 grains:
   roles:
     - webserver
 编辑完成,重启服务
 [root@server2 ~]# /etc/init.d/salt-minion restart
 在server端进行查看
 [root@server1 salt]# salt server2 grains.item roles
 server2:
     ----------
     roles:
         - webserver

执行如下:
这里写图片描述

2. 使用自定义python脚本获取grains信息

默认自定义脚本需要存放在master的/srv/salt/_grains目录下,这里使用mkdir -p创建即可。

 #!/usr/bin/python
 def test_grains():
         grains = {}
         grains['test1'] = '111'
         grains['test2'] = '222'
         return grains

使用sync_grains命令同步脚本到minion主机上去,并通过grains.item命令获取相关信息即可,如下:

 [root@server1 _grains]# salt server2 saltutil.sync_grains
 server2:
     - grains.test_grains
 进行调用:
 [root@server1 _grains]# salt server2 grains.item test1
 server2:
    ----------
    test1:
        111    
3. 通过Grains模块定义Grains
 进行定义
 [root@server1 _grains]# salt server2 grains.append test3 '333'
 server2:
     ----------
     test3:
         - 333

 调用
 [root@server1 _grains]# salt server2 grains.item test3
 server2:
     ----------
     test3:
         - 333

会在minion主机端生成配置文件grains
这里写图片描述

grains配置优先级顺序为/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > master端自定义grains脚本(minion端/var/cache/salt/minion/extmods/grains目录下) > Grains模块定义Grains (/etc/salt/grains) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值