博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Saltstack安装配置过程
阅读量:5321 次
发布时间:2019-06-14

本文共 9421 字,大约阅读时间需要 31 分钟。

 

 

 

 

 一、安装配置

  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/hosts192.168.60.139 es01.com192.168.60.140 es02.com192.168.60.141 es03.com

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

# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=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服务

[root@es01 ~]# /etc/init.d/salt-master startStarting salt-master daemon:                               [确定][root@es01 ~]# /etc/init.d/salt-minion startStarting salt-minion daemon:                               [确定]

  8、启动所有客户端

[root@es03 ~]# /etc/init.d/salt-minion startStarting salt-minion daemon:                               [确定]

  9、配置master与slave的认证

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

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

[root@es01 ~]# salt-key Accepted Keys:es01.comes02.comes03.comDenied 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收集到的所有信息项名

  [root@es01 ~]# salt 'es02.com' grains.ls

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

  能否看到minion收到的所有信息项名称及其值呢?

  [root@es01 ~]# salt 'es02.com' grains.items

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

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

[root@es02 ~]# cat /etc/salt/grains role: nginxenv: testmyname: tpp

  配置完后,重启minion

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

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

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

[root@es01 ~]# salt 'es02.com' grains.get rolees02.com:    nginx

  好的,配置项和值都得到了,我们的grains配置成功了。

 

三、批量安装程序

  1、在master上设置saltstack所有状态文件的根目录

         [root@es01 ~]# vi /etc/salt/master

        

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

        

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

  

   4、重启master,加载配置

        [root@es01 salt]# /etc/init.d/salt-master restart

  5、执行安装吧

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

 四、文件及目录管理

  我们看一下master如何分发文件到minion吧

  1、配置一下顶级文件,指定需要翻译的配置文件名称

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

  3、开发执行文件分发

[root@es01 salt]# salt '*' state.highstatees01.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: 1Failed:    0------------Total states run:     1es02.com:----------          ID: file-manager    Function: file.managed        Name: /app/myfile.txt      Result: True     Comment: File /app/myfile.txt updated……

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

[root@es02 salt]# ls -l /app/总用量 26736drwxr-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.txtdrwxr-xr-x  3 root root     4096 11月 23 17:55 salt

  实现了文件的分发,那么目录是不是也可以分发呢,我们来看一下。

 

  1、还是先修改top.sls文件

[root@es01 salt]# vi top.sls base:  '*':    - dirTest    //定义要测试的目录,位于/app/salt下

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

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

  3、测试一把

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

  [root@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:                      0644Summary------------Succeeded: 1 (changed=1)Failed:    0------------Total states run:     1

  看结果是执行成功了,到客户羰看一下吧

  嗯,客户端确实已经有了,证明我们目录分发成功了。

[root@es02 app]# pwd/app[root@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目录下删除两个文件,再发分一下会怎么样呢?

[root@es01 testDir]# rm -rf 1.txt [root@es01 testDir]# rm -rf 2.txt [root@es01 testDir]# salt 'es02.com' state.highstatees02.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.txtSummary------------Succeeded: 1 (changed=1)Failed:    0------------Total states run:     1

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

[root@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吧

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

  然后创建一下cmdtest.sls文件

[root@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时才会执行下面的命令

  [root@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,

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

  再创建pytest.sls

[root@es01 salt]# cat top.sls base:  '*':    - pytest[root@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

  执行一下看看吧:

[root@es01 salt]# salt '*' state.highstatees02.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

[root@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、执行

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

  4、检查

[root@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文件即可

[root@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、拷贝文件到客户端

  [root@es01 salt]# salt '*' cp.get_file salt://apache.sls /app/tmp/copy.txt

  2、拷贝目录到客户端

  [root@es01 salt]# salt '*' cp.get_dir salt://testDir /app/tmp/

  3、显示存活的客户端

  [root@es01 salt]# salt-run manage.up

  4、命令行下执行脚本(直接执行python命令无效????)

  [root@es01 salt]# salt '*' cmd.script salt://tmp/abcd.sh  

 

转载于:https://www.cnblogs.com/kongzhagen/p/7879072.html

你可能感兴趣的文章
连续free()两次会出现什么情况
查看>>
解决iframe,div在移动设备上实现局部刷新的方法
查看>>
2018安卓巴士开发者大会打造Android技术盛宴
查看>>
关于工作
查看>>
万能日志数据收集器 Fluentd - 每天5分钟玩转 Docker 容器技术(91)
查看>>
DropBox运营模式
查看>>
SQL基本语句汇总
查看>>
.Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法。
查看>>
java9新特性-11-String存储结构变更
查看>>
Android 消息通知栏返回正在运行的Activity
查看>>
html5-fullscreen和FileReader构造函数
查看>>
条款7:预先准备好内存不够的情况
查看>>
Day 5 前四天总结练习
查看>>
hubble和mongo做站内搜索
查看>>
EGLImage与纹理
查看>>
转载-Mac下iterm无法使用rz并提示waiting to receive.**B0100000023be50
查看>>
[Practical Git] Show who changed a line last with git blame
查看>>
C# Lock 解读
查看>>
泛型程序设计——Generic Programing
查看>>
阻塞socket 非阻塞socket 以及同步异步、阻塞非阻塞
查看>>