Saltstack

Saltstack介绍

01 自动化运维介绍
02 Saltstack介绍
03 Saltstack部署
04 使用saltstack部署环境

# 运维自动化介绍
背景
传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问题并加以解决。但是,随着互联网
+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心


# 自动化运维
自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。

自动化
监控自动化
数据采集自动化
数据分析自动化
日常巡检自动化
设备配置比对自动化
故障定位自动化
故障处理自动化
流程处理自动化
日常备份自动化
系统优化自动化
大批量配置自动化

# 自动化运维工具
saltstack:https://docs.saltstack.com/en/latest/
puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578
ansible:https://www.ansible.com/


# Saltstack介绍
• SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统
• Saltstack最主要的两个功能是:配置管理与远程执行
• Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器
• 采用订阅者模式的分布式管理工具 管理节点【发命令】——>被管理节点 【去执行 返回结果】
• 采用自定义协议zeromq 比SSH(一对一)速度更快


## Salt 原理!
SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列列通信
minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了。它们通常位于你的python库中,这些模块是
python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。

关于zeroMQ
master监听4505和4506端口:
4505对应的是ZMQ的PUB system,用来发送消息;
4506对应的是REP system是来接受消息的。

# Saltstack部署
## salt-master 安装!
• yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
• yum install salt-master
• yum install salt-syndic 分布式代理
• yum install salt-cloud 也是基于openstack来做的,它可以支持多种云的使用。
如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP Cloud、OpenStack

## Salt-minion 安装!
• yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
• yum install salt-minion


## 修改配置文件!
[root@master ~]# cat /etc/salt/master |head -5
master: 192.168.10.42
user: root

[root@minion01 ~]# head -10 /etc/salt/minion
master: 192.168.10.42
user: root
id: minion-01



## 启动 管理 认领
[root@master salt]# systemctl start salt-master
[root@master salt]# netstat -ntpl    
[root@master salt]# salt-key -L 

[root@master salt]# salt-key -A
...
...

[root@minion01 salt]# systemctl start salt-minion



## minion管理!
minion加入架构
[root@master srv]# salt-key -L
    Accepted Keys: 同意加入的
    Denied Keys: 未被加入的
    Unaccepted Keys: 未知的
    Rejected Keys: 被拒绝的


Salt-key!
• salt-key -L 列列出来认大哥的
• salt-key -A 所有小弟都认
• salt-key -a 单个认
• salt-key -D 剔除所有小弟
• salt-key -d 删除某个


## 如何使用salt查看手册
    查看模块列列表module
    salt 'minion-01' sys.list_modules
    查看指定module的function用法
    salt 'minion-01' sys.list_functions cmd
    查看指定模块的详细用法
    salt 'minion-01' sys.doc cmd

## 查看minion状态!
    # 查看minion的状态
    [root@master salt]# salt-run manage.status
    down:
    up:
        - minion-01

    # 查看minion在线状态
    [root@master salt]# salt-run manage.up
    - minion-01

    #查看minion不在线状态
    [root@master salt]# salt-run manage.down



## 文件分发 salt-cp!
    # salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
    #考本单个文件
    [root@master salt]# salt-cp minion-01 /root/salt-repo-latest-2.el7.noarch.rpm /tmp
    minion-01:
        ----------
        /tmp/salt-repo-latest-2.el7.noarch.rpm:
            True

    # 拷贝单个文件到minion的目标目录下并改名
    [root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc
    minion-01:
        ----------
        /tmp/abc:
            True    


## minion本地执行命令:salt-call!
    #salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job
    [root@minion01 tmp]# salt-call test.ping
    local:
        True



## 批量操作!
    # 执行单个salt命令
    [root@master salt]# salt "*" test.ping
    *代表所有主机
    test.ping 命令

    # 执行一个linux命令
    [root@master salt]# salt "*" cmd.run "whoami"
    cmd.run 告诉客户端执行什么命令

    # 执行一个脚本
    [root@master salt]# salt "*" cmd.script "salt://脚本名"       #/srv/salt 脚本路径默认




## 查看salt minion在执行什么操作!
[root@master ~]# salt-run jobs.active
20181029231137078329:
    ----------
    Arguments:
        - yum -y update
    Function:
        cmd.run
    Returned:
    Running:
        |_
        ----------
        minion-01:
            2651
    StartTime:
        2018, Oct 29 23:11:37.078329
    Target:
        minion-01
    Target-type:
        glob
    User:
        root



## 查看正在运行的任务,找到jid!
[root@master ~]# salt 'minion-01' saltutil.running
minion-01:
    |_
    ----------
    arg:
        - yum -y update
    fun:
        cmd.run
    jid:
        20181029231137078329
    pid:
        2651
    ret:
    tgt:
        minion-01
    tgt_type:
        glob
    user:
        root



## 根据jid杀掉任务!
[root@master ~]# salt 'minion-01' saltutil.kill_job 20181029231137078329
minion-01:
    Signal 9 sent to job 20181029231137078329 at pid 2651

## 清除minion缓存
[root@master ~]# salt '*' saltutil.clear_cache
minion-01:
    True



## 使用saltstack部署环境    
1)部署业务
2)升级业务
3)配置文件升级业务
4)服务管理






## saltstack
传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问
题并加以解决。但是,随着互联网+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越
多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心IT环境异构:系统软硬件种类繁多,导致运维人员运维监控压力大,日常工作量繁重。
故障发生后,运维工程师花费大量精力排查问题,"无法快速和准确的定位问题,治标不治本。由于设备数量巨大,日常巡检占用大量时间,导致工作效率低下,事倍功半。
工作机制混乱,面对庞大的IT系统,缺乏有效、自动化的运维流程,缺乏有效的绩效考核依据。
缺少自动运维机制:IT部门人员过少,导致运维压力大;由于误操作,导致"无法挽回的灾难;大而全的系统,对运维人员技术能力要求越来越高。
系统内数据非常重要,如果遗漏漏备份,系统瘫痪/误操作等出现时会导致"无法估量的后果。自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范
化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。


监控自动化zabbix
数据采集自动化 elk
数据分析自动化
日常巡检自动化
设备配置比对自动化
故障定位自动化 blueking
故障处理自动化
流程处理自动化
日常备份自动化
系统优化自动化 kickstart cobbler
大批量配置自动化
分布式管理工具
saltstack:https://docs.saltstack.com/en/latest/
puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578
ansible:https://www.ansible.com/


# 为什么不用shell
1.交互式 进程模式 多进程 机器受不了
2.开发周期长 没有第三方
SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统
Saltstack最主要的两个功能是:配置管理与远程执行
Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器

# 分布式工具
管理节点 被管理节点  管理节点【发命令】——>被管理节点 【去执行 返回结果】
几款软件 使用的协议 ssh   ssh 加密 一对一 所以比较慢 点对点
自定义协议 zeromq 管理和被管理建立长连接 pub—>sub 模式发布消息 发布者—> 订阅者  发布消息 传输消息 加密 字典方式发布


# salt 工作原理
SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列列通信
minion上线后先与master端联系,把自己的pub key发过去,这时master端通过saltkey-L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。
这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*'cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。
master监听4505和4506端口,4505对应的是ZMQ的PUBsystem,用来发送消息,4506对应的是REP system是来接受消息的。

slat
master minion
主人 奴隶
奴隶去找主人 minion 找 master
自己也可以管理自己
1) 安装包
2)配置文件
3)调整平台
4)应用
5)部署一个环境使用salt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#install
master salt-master
minion salt-minion
yum install https://repo.saltstack.com/yum/redhat/salt-repolatest-
1.el7.noarch.rpm
◦ sudo yum install salt-master #master
◦ sudo yum install salt-minion #minion
yum install salt-ssh
yum install salt-syndic 分布式代理
yum install salt-cloud 也是基于openstack来做的,它可以支持多种云的使用。
比如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP
Cloud、OpenStack、等等
#安装后
查看每台主机的主机名
cat /etc/hosts
主机名和ip对应
==========================
#0.配置文件
/etc/salt/master #
/etc/salt/minion #节点
##节点配置
yaml语言
master: IP #注意冒号空格不能少
id: 主机名 #注意冒号空格不能少
==========================
#1.启动
关闭防⽕火墙 selinux
使用端口 4505 4506
第一次启动
salt-master -l debug
salt-minion -l debug
正常
service salt-master start
service salt-minion start
[root@master salt]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion-01
Rejected Keys:
[root@master salt]# salt-key -a minion-01
The following keys are going to be accepted:
Unaccepted Keys:
minion-01
Proceed? [n/Y] Y
Key for minion minion-01 accepted.
[root@master salt]# salt-key -L
Accepted Keys:
minion-01
Denied Keys:
Unaccepted Keys:
Rejected Keys:
==========================
#2.master认小弟
salt-key -L 列列出来认大哥的
salt-key -A 所有小弟都认
salt-key -a 单个认
salt-key -D 剔除所有小弟
salt-key -d 删除某个
==========================
使用salt
#如何使用salt 看手册
查看模块列列表module
salt 'minion-01' sys.list_modules
查看指定module的function用法
salt 'minion-01' sys.list_functions cmd
查看指定模块的详细用法
salt 'minion-01' sys.doc cmd
#查看minion
#查看minion的状态
[root@master salt]# salt-run manage.status
down:
up:
- minion-01
#查看minion在线状态
[root@master salt]# salt-run manage.up
- minion-01
#查看minion不在线状态
[root@master salt]# salt-run manage.down
#salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
#考本单个文件
[root@master salt]# salt-cp minion-01 /root/salt-repolatest-
2.el7.noarch.rpm /tmp
minion-01:
----------
/tmp/salt-repo-latest-2.el7.noarch.rpm:
True
#拷贝单个文件到minion的目标目录下并改名
[root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc
minion-01:
----------
/tmp/abc:
True
#salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job
[root@minion01 tmp]# salt-call test.ping
local:
True
#查看salt minion在执行什么操作
[root@master ~]# salt-run jobs.active
20181029231137078329:
----------
Arguments:
- yum -y update
Function:
cmd.run
Returned:
Running:
|_
----------
minion-01:
2651
StartTime:
2018, Oct 29 23:11:37.078329
Target:
minion-01
Target-type:
glob
User:
root
#查看正在运行的任务,找到jjd
[root@master ~]# salt 'minion-01' saltutil.running
minion-01:
|_
----------
arg:
- yum -y update
fun:
cmd.run
jid:
20181029231137078329
pid:
2651
ret:
tgt:
minion-01
tgt_type:
glob
user:
root
#根据jid杀掉任务
[root@master ~]# salt 'minion-01' saltutil.kill_job
20181029231137078329
minion-01:
Signal 9 sent to job 20181029231137078329 at pid 2651
#清除minion缓存
[root@master ~]# salt '*' saltutil.clear_cache
minion-01:
True
#执行单个salt命令
salt "*" test.ping
*代表所有主机
test.ping 命令
#执行一个linux命令
salt "*" cmd.run "whoami"
cmd.run 告诉客户端执行什么命令
#执行一个脚本
salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认
salt "*" grains.items 查看minion的硬件信息
模块命令
salt "minion_name" 模块.函数 参数
系统命令 cmd.run
salt "*" cmd.run 'hostname'
#执行一个脚本
salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认

 

posted @ 2020-05-21 02:19  silencio。  阅读(125)  评论(0编辑  收藏  举报