Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明

转载http://www.21yunwei.com/archives/3155


之前文章《Saltstack命令参数详解以及配置文件说明》 做了一个saltstack 的简单用户举例以及配置文件说明,基本对saltstack这个自动化工具有了一个原理、安装和配置方面的大概认识。不过,这才是精彩的开始,请关注后边的文章。

今天文章介绍了saltstack的两个重要数据系统组件grains和pillar,这两个组件都是用来做数据系统的,用来取客户端基本信息数据或主控端数据。特此笔记如下。
一,Grains
1,Grains是什么
Grains
Static bits of information that a minion collects about the system when the minion first starts.
The grains interface is made available to Salt modules and components so that the right salt minion commands are automatically available on the right systems.

以上是官方的解释,大致意思是说grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。这个很重要,可以让某些同学企图使用grains值来做监控死心了,值不全都是固定的。
我们这里简单做一个输出测试,可以看到节点minion节点HK-VPN的一些信息如下:


  1. [root@Master ~]# salt 'HK-VPN' grains.items
  2. HK-VPN:
  3. ----------
  4. SSDs:
  5. cpu_flags:
  6. - fpu
  7. - vme
  8.  
  9. 此处省略一万行
  10. cpu_model:
  11. Intel(R) Xeon(R) CPU E5-2648L v2 @ 1.90GHz
  12. cpuarch:
  13. x86_64
  14. domain:
  15. fqdn:
  16. HK-VPN
  17. fqdn_ip4:
  18. fqdn_ip6:
  19. gpus:
  20. |_
  21. ----------
  22. model:
  23. Hyper-V virtual VGA
  24. vendor:
  25. unknown
  26. host:
  27. HK-VPN
  28. hwaddr_interfaces:
  29. ----------
  30. eth0:
  31. 00:00:5d:a2:ee:1e
  32. lo:
  33. 00:00:00:00:00:00
  34. id:
  35. HK-VPN
  36. init:
  37. upstart
  38. ip4_interfaces:
  39. ----------
  40. eth0:
  41. - 43.252.228.XXX
  42. lo:
  43. - 127.0.0.1
  44. ip6_interfaces:
  45. ----------
  46. eth0:
  47. - fe80::200:5dff:fea2:ee1e
  48. lo:
  49. - ::1
  50. ip_interfaces:
  51. ----------
  52. eth0:
  53. - 43.252.228.XXX
  54. - fe80::200:5dff:fea2:ee1e
  55. lo:
  56. - 127.0.0.1
  57. - ::1
  58. ipv4:
  59. - 127.0.0.1
  60. - 43.252.228.XXX
  61. ipv6:
  62. - ::1
  63. - fe80::200:5dff:fea2:ee1e
  64. kernel:
  65. Linux
  66. kernelrelease:
  67. 2.6.32-504.el6.x86_64
  68. locale_info:
  69. ----------
  70. defaultencoding:
  71. gbk
  72. defaultlanguage:
  73. zh_CN
  74. detectedencoding:
  75. GBK
  76. localhost:
  77. HK-VPN
  78. lsb_distrib_codename:
  79. Final
  80. lsb_distrib_id:
  81. CentOS
  82. lsb_distrib_release:
  83. 6.6
  84. master:
  85. 139.129.17.95
  86. mdadm:
  87. mem_total:
  88. 987
  89. nodename:
  90. HK-VPN
  91. num_cpus:
  92. 1
  93. num_gpus:
  94. 1
  95. os:
  96. CentOS
  97. os_family:
  98. RedHat
  99. osarch:
  100. x86_64
  101. oscodename:
  102. Final
  103. osfinger:
  104. CentOS-6
  105. osfullname:
  106. CentOS
  107. osmajorrelease:
  108. 6
  109. osrelease:
  110. 6.6
  111. osrelease_info:
  112. - 6
  113. - 6
  114. path:
  115. /sbin:/usr/sbin:/bin:/usr/bin
  116. ps:
  117. ps -efH
  118. pythonexecutable:
  119. /usr/bin/python2.6
  120. pythonpath:
  121. - /usr/bin
  122. - /usr/lib/python2.6/site-packages/setuptools-19.6.1-py2.6.egg
  123. - /usr/lib/python2.6/site-packages/pip-8.0.2-py2.6.egg
  124. 此处省略一万行
  125. pythonversion:
  126. - 2
  127. - 6
  128. - 6
  129. - final
  130. - 0
  131. saltpath:
  132. /usr/lib/python2.6/site-packages/salt
  133. saltversion:
  134. 2015.5.8
  135. saltversioninfo:
  136. - 2015
  137. - 5
  138. - 8
  139. - 0
  140. selinux:
  141. ----------
  142. enabled:
  143. False
  144. enforced:
  145. Disabled
  146. server_id:
  147. 1132599106
  148. shell:
  149. /bin/sh
  150. virtual:
  151. physical
  152. zmqversion:
  153. 3.2.5

 输出HK-VPN节点grains的key:


  1. [root@Master ~]# salt 'HK-VPN' grains.ls
  2. HK-VPN:
  3. - SSDs
  4. - cpu_flags
  5. - cpu_model
  6. - cpuarch
  7. - domain
  8. - fqdn
  9. - fqdn_ip4
  10. - fqdn_ip6
  11. - gpus
  12. - host
  13. - hwaddr_interfaces
  14. - id
  15. 此处省略十万行。。。。

查看grains单个项目:


  1. [root@Master ~]# salt 'HK-VPN' grains.item os
  2. HK-VPN:
  3. ----------
  4. os:
  5. CentOS

2,应用场景:      grains的特性–每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num),操作系统版本等诸如此类非常固定的属性。简单总结起来grains的用途如下:(1),grains可以在state系统应用中,用户配置管理模块。(2),grains可以在target中使用,用来匹配minion,比如os,用-G。(3),grains可以用于信息查询,grains保存着收集到的客户端的信息。那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。

3,grains优先级     grains可以保持在minion端、通过master端下发等多个方式来分发。但不同的方法有不同的优先级的(由低到高):(1). /etc/salt/grains(2) /etc/salt/minion(3)./srv/salt/_grains/  master端_grains目录下优先级顺序依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值可以会覆盖minion端的所有同名值。比较拗口,总之记得,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,就不讨论了,这个比/etc/salt/grains还低)。

4,grains的下发

grains的下发大致可以分为两个思路:(1)自定义的(_grains)可以通过state.highstatesaltutil.sync_grainssaltutil.sync_all 等方法批量下发,切记所有在_grains目录下的所有自定义grains值都会下发到minion,这是血的教训。

(2)固定存放在minion端配置文件中,如grains、minion文件中,可以通过file manager的方法去批量下发/etc/salt/grains等配置文件实现grains的批量下发,当然了也通过别的方式把这个文件批量下发下去,都是ok的。

对比:

(1)通过state.highstate 下发的grains好处是无须重启minion即可生效,但通过下发/etc/salt/grains文件下发的grains值则必须重启minion端服务才可以生效。(2)自定义的_grains每次在highstate调用的时候就会自动下发、刷新,而/etc/salt/grains文件的则不会。

二,PillarPillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!不是自己的,想要都木有。安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。这里简单写几个小脚本了解下吧:首先我们要编辑/etc/salt/master 打开pillar存储路径,默认即可比如/srv/pillar


  1. illar_roots:
  2. base:
  3. - /srv/pillar

编辑cd /srv/pillar编辑top.sls入口文件:


  1. [root@Master pillar]# cat top.sls
  2. base:
  3. 'HK-VPN':
  4. - nginx
  5. 'aliserver':
  6. - mysql

然后分别写其他调用:


  1. [root@Master pillar]# cat nginx.sls
  2. nginx:
  3. root: /home/wwwroot

  1. [root@Master pillar]# cat mysql.sls
  2. mysqlmanager: 21yunwei
  3. mysqluser: root
  4. mysqlpassword: rootxxx

读取结果如下:


  1. [root@Master pillar]# salt 'HK-VPN' pillar.data
  2. HK-VPN:
  3. ----------
  4. nginx:
  5. ----------
  6. root:
  7. /home/wwwroot
  8. [root@Master pillar]# salt 'aliserver' pillar.data
  9. aliserver:
  10. ----------
  11. mysqlmanager:
  12. 21yunwei
  13. mysqlpassword:
  14. rootxxx
  15. mysqluser:
  16. root

涉及的内容太多,以后会单独写文章介绍,这里就先简单了解下这个概念和情况吧。


三,grains 对比pillar 以及总结

grains和pillar的差别是很多同学都会问的问题,具体的讨论不再细说,参见saltstack用户组的相关讨论(https://groups.google.com/forum/#!topic/saltstack-users-cn/wXGcz0N6814)。总结下来有以下几点:

     1.grains存储的是静态数据、不常变化的内容,pillar则相反
     2.grains是存储在minion本地,而pillar存储在master本地
     3.minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改
Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明_第1张图片

 

 

转载请注明:21运维 » [原创]Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明

你可能感兴趣的:(Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明)