学一学:dtstat 一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品
yum install dstat (sudo apt-get install dstat) --- 小 Q
---------------------------------------------------------------------------------------------------
三种工作方式: 本地, c/s, 基于ssh(不用安装agent)
三个大功能 : 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理
支持的系统 : 大多数都支持,windows上不支持安装master
【准备工作】
首先至少准备两台机器如果可以三台虚拟机是很好的
10.0.18.92 服务端
10.0.18.91 客户端
两台机器关闭selinux清空iptables规则并保存设置hostname
编辑/etc/sysconfig/network 定义hostname
92上hostname master.teng.com
91上hostname client.teng.com
server上:
yum install -y epel-release
yum install -y salt-master salt-minion
启动
/etc/init.d/salt-master start
/etc/init.d/salt-minion start
client上:
yum install -y epel-release
yum install -y salt-minionclient上:
vim /etc/salt/minion //指定server的ip,大概是16行,修改或增加
master: 10.0.18.92
id: client //注意冒号后有空格
注:这个id不定义也没有关系,如果不定义,那么master会以客户端的hostname来显示,若定义了就按id定义的名字来显示了,这个id可以不和hostname一致,但定义了id后,也应该在/etc/hosts里面定义记录
/etc/init.d/salt-minion start
【证书认证】
server:
添加证书认证 salt-key -a client.teng.com
删除证书认证 salt-key -d client.teng.com
签名所有证书 salt-key -A
查看签名证书 salt-key
客户端证书:/etc/salt/pki/minion/minion.pub
服务端证书:/etc/salt/pki/master/master.pub
服务端认证的客户端证书:/etc/salt/pki/master/minions/10.0.18.91
客户端认证的服务端证书:/etc/salt/pki/minion/minion_master.pub
如果总是无法认证证书,可以在这方向查一查。
注:如果更改id,需要重启客户端才可生效。
【配置管理】
server上:
vim /etc/salt/master //搜索找到 file_roots,入口文件和配置文件路径
file_roots: //打开如下内容的注释
base:
- /srv/salt // - 后要有空格
mkdir /srv/salt
cd /srv/salt
vim /srv/salt/top.sls //加入如下内容,入口文件,必须要有的
base:
'*': //* 代表所有认证过的客户端
- apache
意思是,在所有的客户端上执行 apache模块,这种模块和puppet类似
vim /srv/salt/apache.sls //加入如下内容,这个就是apache模块的内容
apache-service: //自定义的id名字
pkg.installed: // 包安装函数
- names: //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
- httpd
- httpd-devel
service.running: //启动运行的函数
- name: httpd
- enable: True //表示开机启动
执行: salt '*' state.highstate
【远程执行命令】
示例1: salt '*' test.ping //这里的*表示所以已经签名的客户端,也可以指定其中一个
示例2: salt '*' cmd.run 'df -h' //对所有认证过的客户端执行 df -h
注:此部分支持通配列表和正则,比如两台客户端web10 web11,可写成 salt 'web*' 或salt 'web1[02]'
salt 命令使用','时 :salt -L 'web10,web11'
salt 命令使用正则时:salt -E 'web(10|11)
salt 命令使用gains :salt -G ........
salt 命令使用pillar: salt -l ......... (后面会介绍)
【grains】
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip等。
salt 'client.teng.com' grains.ls 列出所有的grains项目名字
salt 'client.teng.com' grains.items 列出所有grains项目以及值
grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的。
grains可以用收集到的一些信息,做配置管理工作。
grains支持自定义信息,有两种方式客户端配置和服务端配置,如下
客户端:
a. 配置文件中打开 default_include: minion.d/*.conf 在此目录下建.conf结尾文件,写入如下格式:
grains: #必须标明是grains
items:10
.......
b. cd /etc/salt 目录下,命名文件grains的文件写入如下格式 vim grains
role: nginx
env: teng
重启minion服务
服务端:
在/srv/salt/ 创建_grains目录,编写grains文件,需要返回一个字典,例如:
cd /srv/salt/_grains/
cat nginx.py
def nginx():
nginx={}
nginx['nginx']='1.5.5'
return nginx
执行同步:salt ‘id或IP’ state.highstate
命令:
获取客户端全部的item值 :salt '*' grains.items
获取item为role和env的值: salt '*' grains.item role env
在有role规则输出为nginx的客户端上执行命令:salt -G role:nginx cmd.run 'hostname'
【pillar】
pillar和grains不一样,它是在master上定义的,并针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
查看指定minion的pillar值(一般都为空):salt 'client.teng.com' pillar.items
配置自定义pillar: vim /etc/salt/master
找到如下配置 : 去掉前面的警号
pillar_roots:
base:
- /srv/pillar
mkdir /srv/pillar
vi /srv/pillar/test.sls //内容如下
conf: /etc/123.conf
vi /srv/pillar/top.sls //内容如下,入口文件
base:
'client.teng.com': //客户主机名
- test //入口文件找当期那目录下的test.sls文件
重启master :/etc/init.d/salt-master restart
或刷新pillar :salt '*' saltutil.refresh_pillar
验证: salt '*' pillar.itme test
或者: salt -I 'conf:/etc/123.conf' test.ping
【目录文件拷贝】
首先搭建一个小的开发环境:
环境: base, dev(开发环境), test(测试环境), prod(生产环境)
vim /etc/salt/master
file_roots:
base:
- /srv/salt/
dev:
- /srv/salt/dev
test:
- /srv/salt/test
prod:
- /srv/salt/prod
mkdir /srv/salt/{dev,test,prod}
vi /srv/salt/top.sls
base:
'*':
- file
vim /srv/salt/file.sls
file_test: // 相当于puppet的类吧
file.managed: //文件用的模块
- name: /tmp/2.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 644
file_dir:
file.recurse: //文件使用file.managed
- name: /tmp/123 //复制到客户端后的地址
- source: salt://test/123 // salt://===/srv/salt
- user: root
- group: root
- file_mode: 644
- dir_mode: 755 // 拷贝到客户端后的权限
- mkdir: True
- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
- include_empty: True
saltstack 文件操作 state有多种方法,最典型的file.managed、file.recurse、file.append等手法;
https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html
【远程命令】
cat /srv/salt/ex.sls
cmd_test:
cmd.run:
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root
cat /srv/salt/top.sls
base:
'*':
- ex
扩展一:将所有的命令写道master的一个文件中,然后依次执行(类似脚本):
cat /srv/salt/test/exe.sls
cmd_test:
cmd.script: //脚本要指定script
- source: salt://test/1.sh
- user: root
cat /srv/salt/test/1.sh #!/bin/bash touch /tmp/111.txt if [ -d /tmp/1233 ] then rm -rf /tmp/1233 fi
cat /srv/salt/top.sls
base:
'*':
- test.exe //格式目录.文件
扩展二:条件语句onlyif,unless,前者如果条件成立执行下面命令,后者与其相反。
cmd_test:
cmd.run:
- unless: test -d /tmp/1233 //如果这个目录不存在,执行下面命令
- name: mkdir /tmp/1233
- user: root
或者:
cmd_test:
cmd.run:
- name: touch /tmp/111.txt
- onlyif: test -f /tmp/111.txt //如果这个文件存在,创建文件
执行:salt ‘id或IP’ state.highstate
【任务计划】
cat /srv/salt/top.sls
base:
'*':
- test.exe
cmd_test:
cmd.run:
- unless: test -d /tmp/1233
- name: mkdir /tmp/1233
- user: root
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hoinur: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
// 删除cron
// cron.absent:
// - name: /bin/touch /tmp/111.txt
// 两者不能共存,要想删除一个cron,那之前的present就得删除掉。
注:‘*’需要用单引号引起来。
当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。
【常用命令】
salt '*' cp.get_file salt://test/1.txt /tmp/123.txt //拷贝master上的文件到客户端
salt '*' cp.get_dir salt://test/conf /tmp/ // 拷贝目录
注:会自动在客户端创建conf目录,所以后面不要加conf,如果写成 /tmp/conf/ 则会在/tmp/conf/目录下又创建conf
salt '*' cmd.script salt://test/1.sh //执行shell脚本
salt-run manage.up //显示存活的minion:
----------------------------------------------------------------------------------------------------
salt编译安装nginx http://blog.cunss.com/?p=272
参考文档 :http://blog.cunss.com/?p=255
http://www.iyunv.com/forum-142-1.html
转载于:https://blog.51cto.com/tengxiansheng/1861798