saltstack使用教程:

1、安装:

需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1 [epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

epel.repo

服务端安装:

yum install salt-master
#/etc/init.d/salt-master restart

客户端安装:

yuim install salt-minion
#/etc/init.d/salt-minion restart

2、编辑客户端配置文件:

客户端:

vim /etc/salt/minion
master: 192.168.10.205 #指定服务端地址
id: node6.a.com #设置自己的id,服务器会看到客户端的id,可以使用自己的主机名作为id便于区分

3、编辑服务端配置文件:

vim /etc/salt/master

 state_top: top.sls #定义top入口文件,告诉state用来映射什么sls模块,然后安装到相应的软件或部署相应的文件到minions上面。

file_roots:  #相当于是项目的目录路径,之后批量管理客户的时候的配置文件就定义在这些目录里面
base:
- /etc/salt/states
dev:
- /etc/salt/states/dev
prod:
- /etc/salt/states/prod /etc/init.d/salt-master restart

4、创建项目目录和文件:

mkdir /etc/salt/states/prod -p
mkdir /etc/salt/states/init -p

5、简单配置管理:

salt-key #查看证书
salt-key -a node6.a.com #对主机认证

[root@node5 ~]# salt "*" test.ping  #返回True为主机正常

node6.a.com:
True

salt '*' test.ping #测试所有主机
salt 'minion.saltstack.com' test.ping #测试指定主机
salt "*" cmd.run "df -TH" #远程执行命令

命令格式为:
#salt "目标主机" 模块.方法 "参数"

6、编辑项目配置文件:

cd /etc/salt/states/prod/
state_top: top.sls #文件类型 vim prod/top.sls base: #名称
"minion.saltstack.com": #包含的主机
- init.pkg #执行的文件是init目录下的pkg文件,pkg文件的后缀一定要是sls
vim init/pkg.sls #文件名必须以sls结尾:
pkg.init: #ID的声明,随便起名称
pkg.installed: #pkg是状态模块的名字,installed是状态模块的方法,install是安装
- names: #指定要安装的包
- lrzsz #以下是要安装的包的名称
- mtr
- nmap
- httpd

7、执行操作:
salt "*" state.sls init.pkg #命令格式为:salt "*" 模块.方法  文件

执行结果:

[root@node5 init]# salt "*" state.sls init.pkg
node6.a.com:
----------
ID: pkg.init
Function: pkg.installed
Name: mtr
Result: True
Comment: Package mtr is already installed.
Started: 23:58:24.511819
Duration: 1308.811 ms
Changes:
----------
ID: pkg.init
Function: pkg.installed
Name: nmap
Result: True
Comment: Package nmap is already installed.
Started: 23:58:25.820865
Duration: 0.515 ms
Changes:
----------
ID: pkg.init
Function: pkg.installed
Name: lrzsz
Result: True
Comment: Package lrzsz is already installed.
Started: 23:58:25.821461
Duration: 0.323 ms
Changes:
----------
ID: pkg.init
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 23:58:25.821883
Duration: 0.324 ms
Changes: Summary
------------
Succeeded: 4
Failed: 0
------------
Total states run: 4

salt 执行操作

8、文件同步操作:

vim prod/top.sls

base:
"minion.saltstack.com":
- init.pkg
- init.limit

vim init/limit.sls

limit-conf-config:
file.managed:
- name: /etc/security/limits.conf
- source: salt://init/files/limits.conf
- user: root
- group: root
- mode: 644
mkdir init/files
cp /etc/security/limits.conf init/files/
salt "*" state.sls init.limit

测试客户端的/etc/security/limits.conf文件已经发生更改:

9、服务端和客户端的key:

服务器:

[root@node5 master]# pwd
/etc/salt/pki/master

[root@node5 master]# ll
-r-------- 1 root root 1679 Mar 3 01:47 master.pem #服务器的私钥
-rw-r--r-- 1 root root 451 Mar 3 01:47 master.pub #服务器的公钥,将发给所有被认证的客户端

[root@node5 master]# cat master.pub  #发给客户端的认证公钥
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArjBP4H+twndPlHylh/m9
rD/E5CNX0Tl6Bu0/RhxhVJxtmp4fcFhNaKEc/Rf3HF8hYav5FB1wH/HODM9wd1gO
Q7P1eOtE8NlW3l6np9maAFCMwjIT97R5lVIPy4ZqRmNzYVu/k0xmHLehjgIipaW2
KT240QyS5a0VI0T+rZLpX5oCrQ+6T6yHQmZLYZFOSAaHpDqYV7YzcirVAekTW0VM
de2Dfk+eet3nsUIIEMTy4IOYsq4kDQAvi/0xRga1HVZOlg9CEHKGOFNE7OFxD7JH
IHcpw1GOV6ZOoIMmXAr1DcWjtcRiGu6SKHVmZpvUwY2LAIeJIaTK98Cbw8qkwymS
HwIDAQAB
-----END PUBLIC KEY-----

服务器将客户端的key保存的路径:

/etc/salt/pki/master/minions

[root@node5 minions]# ls

node6.a.com

cat node6.a.com

[root@node5 minions]# cat node6.a.com
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA39/NdTOO3Dh52daFB8iW
LA1WUA8qjnAndywnOnHh4KNhgsI1uvrBasVpSM1uIIUxTfa2IYweuV+896CX+jyT
5shh8u4NqIMglEmZNqxmmKUoPphZW9jDr/KcqXF6w5NHLh0UmA4mFtpyJUkZuEw5
4Gi9CLCari3rF3oZ+nJcfu19bpyT0grE/zUV0RF+lZrYWb/peAt5J/p4O1ueE/SS
31s88Wpiq7lyI1sTFcsI0DkaZW5RM/WICTuhQtGZsqCduJh0XPvB7pMCDkN50uqo
ednXmEypPLULss+QfKGP4KT9Bsk5viFuzkLXSs9meXwnkR7pwTZreivfXsgXE7wQ
6QIDAQAB
-----END PUBLIC KEY-----

客户端的公钥、私钥和报错master的文件:

[root@node6 minion]# ls
minion_master.pub #保存服务器的公钥

[root@node6 minion]# cat minion_master.pub  #客户端保存的服务器的公钥
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArjBP4H+twndPlHylh/m9
rD/E5CNX0Tl6Bu0/RhxhVJxtmp4fcFhNaKEc/Rf3HF8hYav5FB1wH/HODM9wd1gO
Q7P1eOtE8NlW3l6np9maAFCMwjIT97R5lVIPy4ZqRmNzYVu/k0xmHLehjgIipaW2
KT240QyS5a0VI0T+rZLpX5oCrQ+6T6yHQmZLYZFOSAaHpDqYV7YzcirVAekTW0VM
de2Dfk+eet3nsUIIEMTy4IOYsq4kDQAvi/0xRga1HVZOlg9CEHKGOFNE7OFxD7JH
IHcpw1GOV6ZOoIMmXAr1DcWjtcRiGu6SKHVmZpvUwY2LAIeJIaTK98Cbw8qkwymS
HwIDAQAB
-----END PUBLIC KEY-----

minion.pem #客户端的私钥

minion.pub #客户端的公钥

[root@node6 minion]# cat minion.pub  #客户端的公钥,认证时会发给服务端
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA39/NdTOO3Dh52daFB8iW
LA1WUA8qjnAndywnOnHh4KNhgsI1uvrBasVpSM1uIIUxTfa2IYweuV+896CX+jyT
5shh8u4NqIMglEmZNqxmmKUoPphZW9jDr/KcqXF6w5NHLh0UmA4mFtpyJUkZuEw5
4Gi9CLCari3rF3oZ+nJcfu19bpyT0grE/zUV0RF+lZrYWb/peAt5J/p4O1ueE/SS
31s88Wpiq7lyI1sTFcsI0DkaZW5RM/WICTuhQtGZsqCduJh0XPvB7pMCDkN50uqo
ednXmEypPLULss+QfKGP4KT9Bsk5viFuzkLXSs9meXwnkR7pwTZreivfXsgXE7wQ
6QIDAQAB
-----END PUBLIC KEY-----

10、salt-key参数:

-a:同意单个主机

-A:同意所有主机

-L:列出已经同意的主机

-d:删除单个主机

-D:删除所有主机

11、saltstack远程执行:

使用正则表达式匹配主机:

-E:

[root@node5 ~]# salt -E  "(node6|node9).a.com" test.pingnode9.a.com:
True
node6.a.com:
True

或者更改top.sls文件:

base:
"(node\d.a.com)":
- match: pcre
- init.pkg
- init.limit

-L:

[root@node5 ~]# salt -L  "node6.a.com,node9.a.com" test.ping
node9.a.com:
True
node6.a.com:
True

-S:匹配IP地址

[root@node5 ~]# salt -S '192.168.10.0/24' test.ping
node6.a.com:
True
node9.a.com:
True

service模块:

salt "*" service.get_all
[root@node5 ~]# salt "*" service.status sshd  #判断一个服务的当前状态
node9.a.com:
True
node6.a.com:
True
[root@node5 ~]# salt "*" service.restart  sshd #重启一个服务
node9.a.com:
True
node6.a.com:
True

salt-cp:远程拷贝文件

[root@node5 ~]# salt-cp  "*"  /etc/hosts  /tmp/
{'node6.a.com': {'/tmp/hosts': True}, 'node9.a.com': {'/tmp/hosts': True}}

12、 信息返回并写入mysql:

即客户端给服务器的返回,默认是在屏幕输出,可以写入在mysql、redis等,下面写入mysql:

在客户端和server端都安装MySQL-python,复制无法写入到数据库。

yum install  MySQL-python -y

创建数据库:

mysql> CREATE DATABASE salt default character set utf8 default collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

创建表:

CREATE DATABASE  `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci; USE `salt`; DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; grant all on salt.* to salt@"node5.a.com" Identified by "";
grant all privileges on salt.* to salt@"l27.0.0.1" Identified by "";
grant all on salt.* to salt@'%' identified by 'salt';

在MySQL服务器授权远程访问:

grant all on salt.* to salt@"192.168.10.%" Identified by "";  #授权从192.168.10网段的用户salt使用密码123456可以远程访问
grant all privileges on salt.* to salt@"l27.0.0.1" Identified by ""; #授权本地访问
create database xx charset utf8; #创建支持中文的数据库
flush privileges; #刷新表

服务器端配置mysql写入:

vim  /etc/salt/master

mysql.host: '192.168.10。205' #数据库自己的IP和数据库名称
mysql.user: 'salt'
mysql.pass: ''
mysql.db: 'salt'
mysql.port: 3306

每个客户端也要进行配置并安装MySQL-python

mysql.host: '192.168.10.205' #服务器的IP地址和数据库名称
mysql.user: 'salt'
mysql.pass: ''
mysql.db: 'salt'
mysql.port: 3306

测试MySQL是否有数据:

[root@node5 ~]# salt '*' test.ping --return mysql #指定返回给数据库

mysql>use  salt;
mysql> select * from salt_returns;

配置服务器时时写入mysql:

mysql.host: '192.168.10.205'
mysql.user: 'salt'
mysql.pass: ''
mysql.db: 'salt'
mysql.port: 3306
master_job_cache: mysql #自动写入mysql

注意:成功写入mysql必备的条件:

1、数据库和表及表格式需完全按照官网的要求

2、服务器和客户端必须连接成功,即可以正常使用salt执行命令名成功返回

3、客户端必须安装MySQL-python

4、客户端和服务器的配置文件都要进行mysql的相关配置,客户端写mysql服务器的地址(mysql可能会和master不在一个服务器)

5、如果要服务器自己将返回写入数据库,需在配置文件加上master_job_cache: mysql (需保证使用 salt '*' test.ping --return mysql能成功写入)

saltstack:使用教程之一安装及客户端返回写入MySQL的更多相关文章

  1. 2.saltstack笔记之目标,模块,返回写入数据库

    作者:刘耀 QQ:22102107 一.目标(targeting Minions) 1.匹配Minions Id 匹配所有 (*) [root@node1 salt]# salt '*' test.p ...

  2. PLSQL安装教程,无需oracle客户端(解决本地需要安装oracle客户端的烦恼)

    最近用笔记本开发,项目用的是Oracle数据库,不想本地安装Oracle客户端. 就只装了一个PLSQL 连接数据库的时候各种错误,现在解决了记录一下. 详细内容见  附件

  3. saltstack:使用教程之二高级模块用法Grains、Pillar

    1.grains用法: 在客户端服务启动的时候收集客户的基础信息,在配置发生变化后也可以通过master重新同步 显示一个客户端的所有项目: [root@node5 ~]# salt "no ...

  4. saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入

    saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入salt的返回值写入mysql数据库:可参考:https://docs.saltstack.com/en/lat ...

  5. SaltStack简明教程

    第1章 SaltStack简明教程 1.1 SaltStack简介 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS E ...

  6. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  7. saltstack学习笔记1 --安装

    salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...

  8. 不安装oracle客户端,连接到服务器的oracle (注:针对 odp.net)

    前几天在研究怎样不安装oracle客户端去访问oracle,并把里面的数据同步到本地的Sql Server数据库中. 准备工作:首先你得有如下.dll,我这个是针对oracle10g的,如果是更高的版 ...

  9. Linux Centos 系统上安装BT客户端 Transmission

    Linux Centos 系统上安装BT客户端 Transmission   Transmission是一种BitTorrent客户端,特点是一个跨平台的后端和其上的简洁的用户界面,以MIT许可证和G ...

随机推荐

  1. Cloud Foundry warden container 安全性探讨

    本文将从Cloud Foundry中warden container的几个方面探讨warden container的安全性. 1. warden container互訪 1.1.  互訪原理· 在Cl ...

  2. STM32关于优先级设定的理解 NVIC_SetPriority()

    Systick模块初始化配置函数(Systick_config)中设定模块中断优先级的函数为: NVIC_SetPriority((SysTick_IRQn, (1<<__NVIC_PRI ...

  3. SQL Server调试常用参数

    SQL Server 清除缓存: DBCC DROPCLEANBUFFERS 从缓冲池中删除所有清除缓冲区. DBCC FREEPROCCACHE 从过程缓存中删除所有元素. DBCC FREESYS ...

  4. jvm的内存区域简介

    1.内存区域划分 jvm在执行java程序过程中会将管理的内存划分成若干不同的数据区域,他们分别是程序计数器,堆,方法区,虚拟机栈,本地方法栈. 1.1指令计数器 指令计数器是线程私有的,每个线程都有 ...

  5. 阿里云部署 Flask + WSGI + Nginx 详解

    抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...

  6. Android 常用开源代码整理

    1.AndroidAnnotations一个强大的android开源注解框架, 基本上可以注入任何类型, 比一般的所谓的注入框架要快, 因为他是通过生成一个子类来实现的绑定.具体查看文档. 2.and ...

  7. LNMP安装包sh脚本

    Xshell 5 (Build 0719) Copyright (c) 2002-2015 NetSarang Computer, Inc. All rights reserved. Type `he ...

  8. 深入浅出—JAVA(8)

    8.接口与抽象类 不是抽象的类就被称为具体类 不同继承树的类也可以实现相同的接口,类可以实现多个接口.

  9. Protel对话窗字体显示不完全问题解决办法(PCB)

    点击protel99左上角的大箭头,点击preferences ,在对话框中把use client system fonts for all dialogs 复选框去掉,就可以了.

  10. spring Annotation 笔记2.1

    使用注解替代xml 在前几章的笔记基础上添加使用注解的形式 1.配置applicationContext 添加context schema <?xml version="1.0&quo ...