Saltstack安装配置过程
一、安装配置
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服务
[root@es01 ~]# /etc/init.d/salt-master start
Starting salt-master daemon: [确定]
[root@es01 ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon: [确定]
8、启动所有客户端
[root@es03 ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon: [确定]
9、配置master与slave的认证
[root@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.
[root@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.
[root@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的验证配置情况
[root@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收集到的所有信息项名
[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: nginx
env: test
myname: tpp
配置完后,重启minion
这些新的配置项是否生效了呢,能获取到它们吗?
[root@es01 ~]# salt 'es02.com' grains.item role env myname
es02.com:
----------
env:
test
myname:
tpp
role:
nginx
那能否得到这些配置项的值呢
[root@es01 ~]# salt 'es02.com' grains.get role
es02.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.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端被分发的文件
[root@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文件
[root@es01 salt]# vi top.sls base:
'*':
- dirTest //定义要测试的目录,位于/app/salt下
2、新建我们定义的dirTest.sls配置文件
[root@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、测试一把
[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:
0644 Summary
------------
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.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上删除了文件,经分发后,客户端也跟着自动删除了
[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.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
[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
Saltstack安装配置过程的更多相关文章
- WAMP(Windows、Apache、MySQL、php)安装配置过程常见问题
WAMP(Windows.Apache.MySQL.php)安装配置过程 可以参考该网友的总结(总结的不错,鼓掌!!): http://www.cnblogs.com/pharen/archive/2 ...
- LAMP安装配置过程
Mysql ./configure --prefix=/usr/local/mysql (注意/configure前有“.”,是用来检测你的安装平台的目标特征的,prefix是安装路径) #make ...
- saltstack安装配置(syndic)
syndic是saltstack用来做集群部署的,一般结构如图: syndic是一个特殊的minion,syndic类继承于minion类,syndic可以看作一个代理,只做数据传递. CentOS上 ...
- saltstack安装配置(halite)
saltstack官方提供了一个简单的web UI--halite.但是给出的安装配置方法实在没法实现,在网上找了几篇博客,见文章末尾的参考链接,可以用起来了.但是功能有点简单.这篇文章记录安装配置h ...
- Gentoo安装配置过程与总结
前些时间在VMware上安装了Gentoo Linux,用了当前最新版的Gentoo,安装过程记录下来了,但一直没有整理到blog上.今天重新整理一下,写出来与大家分享和备用.接触Gentoo不久,对 ...
- Saltstack 安装配置详解
下面这篇文章主要介绍另外一个运维自动化工具 Saltstack . 一.简介 Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master ...
- windows 下android react native详细安装配置过程
写在前面: 在网上搜了很多安装配置文档,感觉没有一个真的跟我安装的过程一模一样的,东拼拼西凑凑,总算是装好了,我不会告诉你,断断续续,我花了两天时间...一到黑屏报错就傻眼,幸好在react群里遇到了 ...
- SaltStack安装配置
一.环境准备:操作系统CentOS Linux release 7.3.1611master ip:192.168.1.180minion ip:192.168.1.183设置server(maste ...
- 游戏服务端pomelo完整安装配置过程
版权声明:本文为博主原创文章,转载或又一次发表请先与我联系. https://blog.csdn.net/jonahzheng/article/details/27658985 游戏服务端pomelo ...
随机推荐
- PLSQL Developer是什么?
不多说,直接上干货! PLSQL Developer是一款可以帮助用户管理Oracle数据库开发存储程序单元的集成开发环境IDE,通过该软件,用户可以编辑.编译.纠正.测试.调试.优化.查询您的数据信 ...
- Docker概念学习系列之Docker核心概念之容器container
不多说,直接上干货! Docker 利用容器来运行应用. 容器是从镜像创建的运行实例. 它可以被启动.开始.停止.删除.每个容器都是相互隔离的.保证安全的平台. 可以把容器看做是一个简易版的 Linu ...
- 自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。
要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识.和JS/JQuery基本语法. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到 ...
- 接口测试学习笔记(Jmeter)
常见接口协议: 1.http 超文本传输协议 2.https 安全超文本传输协议 3.ftp 文件传输协议 4.tcp 网络控制协议 5.IP 互联网协议 6.udp 用户数据协议 -- HTTP协议 ...
- java Queue的用法
https://www.cnblogs.com/caozengling/p/5307992.html https://blog.csdn.net/a724888/article/details/802 ...
- php的explode()和implode()方法
php 中,字符串与数组互转 拆分字符串 到数组 explode() - -(其他语言中的 split) 将数组连接成字符串 implode() <?php $test = ' ...
- android app启动过程
Native进程的运行过程 一般程序的启动步骤,可以用下图描述.程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行. 通常,native进程是由shell或者init启 ...
- Java 8 新特性-菜鸟教程 (4) -Java 8 默认方法
Java 8 默认方法 Java 8 新增了接口的默认方法. 简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法. 我们只需在方法名前面加个default关键字即可实现默认方法. 为 ...
- 公众号开发之wx-tools+springboot应用实战-音乐爬虫推送[JAVA]
springboot+wx-tools实践!音乐爬虫推送公众号DEMOGitHub地址:wx-tools 最终DEMO源码地址: music_collector 先理一下大概的开发步骤: 1. 创建一 ...
- php json_encode在CI框架中的使用细节
这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...