saltstack:使用教程之一安装及客户端返回写入MySQL
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的更多相关文章
- 2.saltstack笔记之目标,模块,返回写入数据库
作者:刘耀 QQ:22102107 一.目标(targeting Minions) 1.匹配Minions Id 匹配所有 (*) [root@node1 salt]# salt '*' test.p ...
- PLSQL安装教程,无需oracle客户端(解决本地需要安装oracle客户端的烦恼)
最近用笔记本开发,项目用的是Oracle数据库,不想本地安装Oracle客户端. 就只装了一个PLSQL 连接数据库的时候各种错误,现在解决了记录一下. 详细内容见 附件
- saltstack:使用教程之二高级模块用法Grains、Pillar
1.grains用法: 在客户端服务启动的时候收集客户的基础信息,在配置发生变化后也可以通过master重新同步 显示一个客户端的所有项目: [root@node5 ~]# salt "no ...
- saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入
saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入salt的返回值写入mysql数据库:可参考:https://docs.saltstack.com/en/lat ...
- SaltStack简明教程
第1章 SaltStack简明教程 1.1 SaltStack简介 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS E ...
- python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...
- saltstack学习笔记1 --安装
salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...
- 不安装oracle客户端,连接到服务器的oracle (注:针对 odp.net)
前几天在研究怎样不安装oracle客户端去访问oracle,并把里面的数据同步到本地的Sql Server数据库中. 准备工作:首先你得有如下.dll,我这个是针对oracle10g的,如果是更高的版 ...
- Linux Centos 系统上安装BT客户端 Transmission
Linux Centos 系统上安装BT客户端 Transmission Transmission是一种BitTorrent客户端,特点是一个跨平台的后端和其上的简洁的用户界面,以MIT许可证和G ...
随机推荐
- BZOJ2440(全然平方数)二分+莫比乌斯容斥
题意:全然平方数是指含有平方数因子的数.求第ki个非全然平方数. 解法:比較明显的二分,getsum(int middle)求1-middle有多少个非全然平方数,然后二分.求1-middle的非全然 ...
- Android SDK三种更新失败及其解决方法
更新Android SDK,居然失败了三次. 1.第一次失败 出现Failed to fetch URL错误提示 Failed to fetch URL https://dl-ssl.google.c ...
- Android多线程及异步处理问题
1.问题提出 1)为何需要多线程? 2)多线程如何实现? 3)多线程机制的核心是啥? 4)到底有多少种实现方式? 2.问题分析 1)究其为啥需要多线程的本质就是异步处理,直观一点说就是不要让用户感觉到 ...
- Java多线程之synchronized(四)
前面几章都是在说synchronized用于对象锁,无论是修饰方法也好修饰代码块也好,然而关键字synchronized还可以应用到static静态方法上,如果这样写,那就是对当前的*.java文件所 ...
- 基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证.RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器. radius的验证的一般流程如下 ...
- Recursive Depth first search graph(adj matrix)
1 深度优先遍历邻接矩阵 1 邻接矩阵初始化 2 访问数组初始化 3 深度优先遍历邻接矩阵图 算法如下: bool MGraph[128][128]; bool visit[128]; int vex ...
- Controller.RedirectToAction 方法
此成员被重载.有关此成员的完整信息,包括语法.用法和示例,请单击重载列表中的名称.
- JRebel 6 破解版及使用方法
最近更新到jrebel6.2.1了,我自己做了个技术分享的微信公众号(茶爸爸),有心的朋友可以来这里一起学习 云盘下载链接: http://pan.baidu.com/s/1bnGzMUF 配置: - ...
- 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!
鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS Memory Limit:262144KB 64bit IO Fo ...
- Treasure Exploration(二分最大匹配+floyd)
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 7455 Accepted: 3 ...