mine 数据

THE SALT MINE

Salt Mine被用于在minion端收集任意数据,并被存放在master并扩散到其他minion,这些数据可以通过salt.modules.mine模块从minion端获取。


MINE VS GRAINS

mine与grains的比较

mine数据要比grains更加的灵活实时性更高,grains多是静态数据,而且刷新也是非常有限的,当minion需要从其他minion中获取信息的时候,利用master端定时收集到的mine数据进行共享,取代minion节点之间的对等通信,减少消耗。

在minion端有一个定时任务在/etc/salt/minion.d/_schedule.conf文件中,里面会定时运行mine.update,将mine数据反馈到master端。


MINE FUNCTIONS

在minion端配置mine函数,可以在主配置文件中也可以在pillar中

示例:

1 mine_functions:
2   test.ping: []            #参数必须设置,即使为空
3   network.ip_addrs:
4     interface: eth0
5     cidr: '10.0.0.0/8'
View Code

查看master收到的minion声明的mine信息
  salt 'minion-id' mine.get '*' network.ip_addrs
当该mine信息被扩散到其他minion机器的环境中后需要删除的话使用如下方法
  salt '*' mine.delete '*' network.ip_addrs


 MINE FUNCTIONS ALIASES

函数别名

示例:

1 mine_functions:
2   network.ip_addrs: [eth0]
3   networkplus.internal_ip_addrs: []
4   internal_ip_addrs:
5     mine_function: network.ip_addrs
6     cidr: 192.168.0.0/16
7   ip_list:
8     - mine_function: grains.get
9     - ip_interfaces
View Code

支持多函数和多参数


MINE INTERVAL

执行mine函数执行的间隔

配置在minion.d/mine.conf文件中

  mine_interval: 60


MINE IN SALT-SSH

从2015.5.0版本开始,salt-ssh支持mine.get功能

由于minion不能提供自己的mine函数配置,所以功能参数就只能从一下3个地方获取:
1、Roster data
2、Pillar
3、Master config

salt-ssh里面的mine函数配置示例:

1 test:
2   host: 104.237.131.248
3   user: root
4   mine_functions:
5     cmd.run: ['echo "hello!"']
6     network.ip_addrs:
7       interface: eth0
View Code

MINIONS TARGETING WITH MINE

利用收集到的mine数据获取其他的minion信息,用于部署配置
参考mine模块的使用
  链接:https://docs.saltstack.com/en/2016.11/ref/modules/all/salt.modules.mine.html#module-salt.modules.mine

EXAMPLE

配置一个HA服务的配置文件,使用mine.get获取指定角色的minion的IP

 (1)定义pillar的top文件

1 /srv/pillar/top.sls:
2 
3 base:
4   'G@roles:web':
5     - web
View Code

(2)定义pillar的sls文件,里面添加mine fuction

1 /srv/pillar/web.sls:
2 
3 mine_functions:
4   network.ip_addrs: [eth0]
View Code

(3)开启minion端定时执行mine函数

1  /etc/salt/minion.d/mine.conf:
2  mine_interval: 5
View Code

 (4)编写任务sls文件

1 /srv/salt/haproxy.sls:
2 haproxy_config:
3   file.managed:
4     - name: /etc/haproxy/config
5     - source: salt://haproxy_config
6     - template: jinja
View Code

     配置文件中内容

     
1 /srv/salt/haproxy_config:
2 <...file contents snipped...>
3 
4 {% for server, addrs in salt['mine.get']('roles:web', 'network.ip_addrs', expr_form='grain') | dictsort() %}
5 server {{ server }} {{ addrs[0] }}:80 check
6 {% endfor %}
View Code

在配置文件中使用mine.get获取到复合条件的minion主机的信息,利用模板渲染到配置文件中

总结:
  使用mine函数的功能可以帮我们获取到指定的其他minion上的一些信息,譬如grains或pillar的数据信息以及一些全局定义的信息,这些信息是很新鲜的以指定的间隔刷新,使用

        起来会感觉比grains和pillar更加方便,但也是很消耗机器资源,提高了系统的负载压力。

原文地址:https://www.cnblogs.com/solitarywares/p/7467282.html