设为首页 收藏本站
查看: 1005|回复: 0

[经验分享] Saltstack安装配置过程

[复制链接]

尚未签到

发表于 2018-1-3 23:08:52 | 显示全部楼层 |阅读模式
  一、安装配置
  1、服务器配置情况
  三台服务器,均需要关闭iptables和selinux(否则salt执行指令无效)
  

master:  192.168.60.139 centos
  

  
slave:
  

  
    192.168.60.140 centos
  192.168.60.141 centos
  

  

  2、配置hosts
  

# cat /etc/hosts  
192.168.60.139 es01.com
  
192.168.60.140 es02.com
  
192.168.60.141 es03.com
  

  

  3、设置hostname,所有服务器均配置
  

# cat /etc/sysconfig/network  
NETWORKING=yes
  
HOSTNAME=es01.com
  

  

  4、安装master端
  

# yum install epel-release  
# yum install -y salt-master salt-minion
  

  

  5、安slave端
  

# yum install epel-release  
# yum install -y salt-minion
  

  

  6、修改配置文件,所有服务器均是同一设置
  

# vi /etc/salt/minion   //在第16行添加,冒号后有一个空格  
master: 192.168.60.139
  

  

  7、启动master服务
  

[iyunv@es01 ~]# /etc/init.d/salt-master start  
Starting salt-master daemon:                               [确定]
  
[iyunv@es01 ~]# /etc/init.d/salt-minion start
  
Starting salt-minion daemon:                               [确定]
  

  

  8、启动所有客户端
  

[iyunv@es03 ~]# /etc/init.d/salt-minion start  
Starting salt-minion daemon:                               [确定]
  

  

  9、配置master与slave的认证
  

[iyunv@es01 ~]# salt-key -a es01.com  
The following keys are going to be accepted:
  
Unaccepted Keys:
  
es01.com
  
Proceed? [n/Y] Y
  
Key for minion es01.com accepted.
  
[iyunv@es01 ~]# salt-key -a es02.com
  
The following keys are going to be accepted:
  
Unaccepted Keys:
  
es02.com
  
Proceed? [n/Y] Y
  
Key for minion es02.com accepted.
  
[iyunv@es01 ~]# salt-key -a es03.com
  
The following keys are going to be accepted:
  
Unaccepted Keys:
  
es03.com
  
Proceed? [n/Y] Y
  
Key for minion es03.com accepted.
  

  

  10、查看master与salve的验证配置情况
  

[iyunv@es01 ~]# salt-key  
Accepted Keys:
  
es01.com
  
es02.com
  
es03.com
  
Denied Keys:
  
Unaccepted Keys:
  
Rejected Keys:
  

  

  
说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端
  

  

  11、测试salt可用性

  二、指令集
  1、grains指令集(在slave端定义)
  minion启动时会收集一次grains信息,查看grains收集到的所有信息项名
[iyunv@es01 ~]# salt 'es02.com' grains.ls

  

es02.com:  - SSDs
  - biosreleasedate
  - biosversion
  - cpu_flags
  
……
  

  能否看到minion收到的所有信息项名称及其值呢?
[iyunv@es01 ~]# salt 'es02.com' grains.items

  

es02.com:  ----------
  SSDs:
  biosreleasedate:
  07/02/2015
  biosversion:
  6.00
  cpu_flags:
  - fpu
  - vme
  
……
  

  

  2、grains是可以自定义配置的,可以增加一些配置项
  

[iyunv@es02 ~]# cat /etc/salt/grains  
role: nginx
  
env: test
  
myname: tpp
  

  

  配置完后,重启minion
  这些新的配置项是否生效了呢,能获取到它们吗?
  

[iyunv@es01 ~]# salt 'es02.com' grains.item role env myname  
es02.com:
  ----------
  env:
  test
  myname:
  tpp
  role:
  nginx
  

  

  那能否得到这些配置项的值呢
  

[iyunv@es01 ~]# salt 'es02.com' grains.get role  
es02.com:
  nginx
  

  

  好的,配置项和值都得到了,我们的grains配置成功了。
  三、批量安装程序
  1、在master上设置saltstack所有状态文件的根目录
[iyunv@es01 ~]# vi /etc/salt/master


  2、顶级配置文件,top是执行的入口,使用两个空格来代替tab

  3、服务安装配置文件,配置具体的安装细节

  4、重启master,加载配置
[iyunv@es01 salt]# /etc/init.d/salt-master restart

  5、执行安装吧
[iyunv@es01 salt]# salt  '*'  state.highstate

  四、文件及目录管理
  我们看一下master如何分发文件到minion吧
  1、配置一下顶级文件,指定需要翻译的配置文件名称

  2、定义配置文件,salt:// 第一个/,表示master中定义的base目录,第二个/表示路径分隔符

  3、开发执行文件分发
  

[iyunv@es01 salt]# salt '*' state.highstate  
es01.com:
  
----------
  ID: file-manager
  Function: file.managed
  Name: /app/myfile.txt
  Result: True
  Comment: File /app/myfile.txt is in the correct state
  Started: 18:28:47.523751
  Duration: 14.709 ms
  Changes:
  

  
Summary
  
------------
  
Succeeded: 1
  
Failed:    0
  
------------
  
Total states run:     1
  
es02.com:
  
----------
  ID: file-manager
  Function: file.managed
  Name: /app/myfile.txt
  Result: True
  Comment: File /app/myfile.txt updated
  
……
  

  

  4、查看minion端被分发的文件
  

[iyunv@es02 salt]# ls -l /app/  
总用量 26736
  
drwxr-xr-x. 7 kzg  root     4096 10月 25 02:23 elasticsearch
  
-rwxr-xr-x. 1 kzg  root 27364449 10月 25 01:17 elasticsearch-2.4.0.tar.gz
  
-rw-r--r--  1 root root       15 11月 23 18:28 myfile.txt
  
drwxr-xr-x  3 root root     4096 11月 23 17:55 salt
  

  

  实现了文件的分发,那么目录是不是也可以分发呢,我们来看一下。
  1、还是先修改top.sls文件
  

[iyunv@es01 salt]# vi top.sls  

  
base:
  '*':
  - dirTest    //定义要测试的目录,位于/app/salt下
  

  

  2、新建我们定义的dirTest.sls配置文件
  

[iyunv@es01 salt]# vi dirTest.sls  

  
dir-test:  // 自定义模块名称
  file.recurse:  // 功能函数(目录管理)
  - name: /app/myDirTest  // 目标位置
  - source: salt://testDir  // 源位置(master)
  - user: root
  - file_mode: 644
  - dir_mode: 755
  - mkdir: True  // 自动创建目录
  - clean: True  //源删除则目标跟着删除
  

  

  3、测试一把
  

[iyunv@es01 salt]# mkdir testDir  
[iyunv@es01 salt]# chmod 755 testDir/
  
[iyunv@es01 salt]# touch testDir/1.txt
  
[iyunv@es01 salt]# touch testDir/2.txt
  
[iyunv@es01 salt]# touch testDir/3.txt
  
[iyunv@es01 salt]# touch testDir/4.txt
  

  

[iyunv@es01 testDir]# salt 'es02.com' state.highstate

  

es02.com:  
----------
  ID: dir-test
  Function: file.recurse
  Name: /app/myDirTest
  Result: True
  Comment: Recursively updated /app/myDirTest
  Started: 19:02:12.144839
  Duration: 843.311 ms
  Changes:
  ----------
  /app/myDirTest/1.txt:
  ----------
  diff:
  New file
  mode:
  0644
  /app/myDirTest/2.txt:
  ----------
  diff:
  New file
  mode:
  0644
  /app/myDirTest/3.txt:
  ----------
  diff:
  New file
  mode:
  0644
  /app/myDirTest/4.txt:
  ----------
  diff:
  New file
  mode:
  0644
  

  
Summary
  
------------
  
Succeeded: 1 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     1
  

  

  看结果是执行成功了,到客户羰看一下吧
  嗯,客户端确实已经有了,证明我们目录分发成功了。
  

[iyunv@es02 app]# pwd  
/app
  
[iyunv@es02 app]# ls -l myDirTest/
  
总用量 0
  
-rw-r--r-- 1 root root 0 11月 23 19:02 1.txt
  
-rw-r--r-- 1 root root 0 11月 23 19:02 2.txt
  
-rw-r--r-- 1 root root 0 11月 23 19:02 3.txt
  
-rw-r--r-- 1 root root 0 11月 23 19:02 4.txt
  

  

  那我在服务端testDir目录下删除两个文件,再发分一下会怎么样呢?
  

[iyunv@es01 testDir]# rm -rf 1.txt  
[iyunv@es01 testDir]# rm -rf 2.txt
  
[iyunv@es01 testDir]# salt 'es02.com' state.highstate
  
es02.com:
  
----------
  ID: dir-test
  Function: file.recurse
  Name: /app/myDirTest
  Result: True
  Comment: Recursively updated /app/myDirTest
  Started: 19:05:59.010513
  Duration: 774.468 ms
  Changes:
  ----------
  removed:
  - /app/myDirTest/2.txt
  - /app/myDirTest/1.txt
  

  
Summary
  
------------
  
Succeeded: 1 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     1
  

  

  在客户端看一下结果, 发现在master上删除了文件,经分发后,客户端也跟着自动删除了
  

[iyunv@es02 myDirTest]# ll  
总用量 0
  
-rw-r--r-- 1 root root 0 11月 23 19:02 3.txt
  
-rw-r--r-- 1 root root 0 11月 23 19:02 4.txt
  

  

  五、远程执行操作
  1、远程执行命令
  老路子了,还是在master上,先设置一下top.sls吧
  

[iyunv@es01 salt]# cat top.sls  
base:
  '*':
  - cmdtest
  

  

  然后创建一下cmdtest.sls文件
  

[iyunv@es01 salt]# cat cmdtest.sls  
cmd-test:
  cmd.run:
  - onlyif : test -f /app/tmp/123.txt
  - names:
  - touch /app/tmp/cmdtest.txt
  - mkdir /app/tmp/cmdtest
  - user: root
  

  

  执行一下命令,试试看,
  执行命令前,确保/app/tmp目录及/app/tmp/123.txt是存在在的,程序不会自动创建目录,onlyif 决定了只有存在123.txt时才会执行下面的命令
[iyunv@es01 salt]# salt '*' state.highstate

  

……  
----------
  ID: cmd-test
  Function: cmd.run
  Name: mkdir /app/tmp/cmdtest
  Result: True
  Comment: Command "mkdir /app/tmp/cmdtest" run
  Started: 23:08:59.181719
  Duration: 66.727 ms
  Changes:
  ----------
  pid:
  5166
  retcode:
  0
  stderr:
  stdout:
  

  
Summary
  
------------
  
Succeeded: 2 (changed=2)
  
Failed:    0
  
------------
  
Total states run:     2
  

  

  到各节点检查一上程序执行情况吧。
  远程执行命令我们做到了,那远程执行脚本,可以做到吗?
  还是在master上先设置top.sls,
  

[iyunv@es01 salt]# cat top.sls  
base:
  '*':
  - pytest
  

  

  再创建pytest.sls
  

[iyunv@es01 salt]# cat top.sls  
base:
  '*':
  - pytest
  
[iyunv@es01 salt]# cat pytest.sls
  
py-test:
  cmd.script:
  - source: salt://tmp/abc.py
  - user: root
  

  

  保证 /app/salt/tmp 目录下有abc.py脚本,内容如下
  

with open('/app/tmp/ccc.txt', 'w') as fp:  fp.write("abcdef")
  

  
功能是:执行脚本就自动创建一个文件,内容为abcdef
  

  

  执行一下看看吧:
  

[iyunv@es01 salt]# salt '*' state.highstate  
es02.com:
  
----------
  ID: py-test
  Function: cmd.script
  Result: True
  Comment: Command 'py-test' run
  Started: 00:04:18.424272
  Duration: 144.95 ms
  Changes:
  ----------
  pid:
  5843
  retcode:
  0
  stderr:
  stdout:
  

  
Summary
  
------------
  
Succeeded: 1 (changed=1)  # 表示脚本执行成功了
  
Failed:    0
  
------------
  
Total states run:     1
  

  

  六、管理客户端的cron任务,不需要手动设置cron了
  一、添加cront任务
  1、 设置top.sls
  

base:  '*':
  - crontest
  

  

  2、创建文件crontest
  

[iyunv@es01 salt]# cat crontest.sls  
cron-test:
  cron.present:
  - name: /bin/touch /tmp/111.txt
  - user: root
  - minute: '*'
  - hour: 20
  - daymonth: 1-10
  - month: '3,5'
  - dayweek: '*'
  

  

  3、执行
  

[iyunv@es01 salt]# salt '*' state.highstate  

  

  4、检查
  

[iyunv@es02 tmp]# crontab -l  
# Lines below here are managed by Salt, do not edit
  
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
  
* 20 1-10 3,5 * /bin/touch /tmp/111.txt
  

  

  二、删除添加的cront任务
  只需要修改crontest.sls文件即可
  

[iyunv@es01 salt]# cat crontest.sls  
cron-test:
  cron.absent:
  - name: /bin/touch /tmp/111.txt
  - user: root
  - minute: '*'
  - hour: 20
  - daymonth: 1-10
  - month: '3,5'
  - dayweek: '*'
  

  

  七、Saltstack常用命令
  1、拷贝文件到客户端
[iyunv@es01 salt]# salt '*' cp.get_file salt://apache.sls /app/tmp/copy.txt

  2、拷贝目录到客户端
[iyunv@es01 salt]# salt '*' cp.get_dir salt://testDir /app/tmp/

  3、显示存活的客户端
[iyunv@es01 salt]# salt-run manage.up

  4、命令行下执行脚本(直接执行python命令无效????)
[iyunv@es01 salt]# salt '*' cmd.script salt://tmp/abcd.sh

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431355-1-1.html 上篇帖子: saltstack操作windows的可视化界面 下篇帖子: Saltstack 安装 命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表