Saltstack 介绍,部署

Saltstack 介绍

一、SaltStack是什么

SaltStack是一个配置管理系统,能够维护预定义状态的远程节点

SaltStack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据

二、saltstack说明
  1. salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ

  2. 用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎

  3. 也有一个强大的配置管理系统,通常叫做Salt State System。

  4. 主要作用: 远程执行、配置管理、事件驱动

    a. 远程执行: 及支持 使用agent 支持 使用ssh远程执行

    b. 配置管理: 如果用salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改对(保证机器状态和你描述一致)

  5. 特点:即可支持 agent 方式,也支持 ssh方式

三、SaltStack的服务架构
  1. Master:负责管理所有节点

  2. Minion:(相当于客户端)节点服务

  3. ZeroMQ:通信服务

  4. AES:数据加密方法

在这里插入图片描述

四、基本原理
  1. SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

  2. minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

  3. master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中

五、SaltStack的优缺点
  1. SaltStack特点:

    1. 简单(相对于Puppet)
    
    2. 并行执行
    
    3. 基于成熟的技术(ZeroMQ(通信),AES(数据加密))
    
    4.  Python API
    
    5.  灵活,开放
    
  2. SaltStack的缺点:

    1.  需要单独安装客户端
    
    2.  安全隐患大
    
六、了解ZeroMQ

ZeroMQ以嵌入式网络编程库的形式实现了一个并行开发框架,能够提供进程内,进程间,网络和广播方式的消息信道,并支持扇出、发布—订阅,任务分发、请求/响应等通信模式。



saltstack具体步骤如下

  1. Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc

  2. salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。

  3. master接收到命令后,将要执行的命令发送给客户端minion。

  4. minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理

  5. minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master

  6. master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中

  7. salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

saltstack认证原理

  1. salt-master和salt-minion第一次启动时会在 /etc/salt/pki/master目录下生成公钥和私钥用于身份验证
[root@linux-node1 master]# cd /etc/salt/pki/master

[root@linux-node1 master]# ll -lh
-r-------- 1 root root 1.7K Jan 7 05:36 master.pem
-rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub
  1. 所有未认证minion的私钥都会放到master的 /etc/salt/pki/master/minions_pre/ 文件夹下

  2. 当minion通过认证后就会放到 /etc/salt/pki/master/minions 文件夹下

  3. master通过在认证的同时会把自己的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub

  4. 这样就实现了双向密钥交换

开工

我们接下来用两台服务器简单的来测试一下

一、环境部署好

第一台机配置

  1. 配置网卡

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    如果是阿里云这里就不用了
    在这里插入图片描述

    systemctl restart network				# 重启网络
    systemctl disable firewalld          	# 关闭防火墙
    systemctl disable NetworkManager		# 关闭网络管理器
    
  2. 设置主机名

    # 我们第一台主机
    vi /etc/hostname
    
    linux-node1.example.com
    
  3. 设置主机名解析

    vi /etc/hosts
    
    192.168.56.11 linux-node1 linux-node1.example.com    # 第一台机器
    192.168.56.12 linux-node2 linux-node2.example.com    # 第二台机器
    
  4. 设置DNS

    如果是阿里云,这步也不用弄了

    vi /etc/resolv.conf
    
    nameserver 192.168.56.2
    
  5. 安装最新epel yum源

    注:此地址中有各种源(https://opsx.alibaba.com/mirror)

    rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
    
  6. yum安装 一些基础包

    yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap
    
  7. 关闭selinux

    vim /etc/selinux/config 
    
    SELINUX=disabled
    
  8. 重启系统

    yum update -y && reboot          # 升级所有包同时也升级软件和系统内核, 并重启
    
  9. 确认是否一些服务是否已按计划关闭

    getenforce          # selinux是否关闭
    
    firewall-cmd --state         # 防火墙是否关闭
    

第二台机器 按照上面的步骤 配置就ok了,当然 主机名和 IP别写一样的就好

  • 如:
    vim /etc/hostname       # 1、修改主机名
    
    linux-node2.example.com
    
    vi /etc/sysconfig/network-scripts/ifcfg-eth0 
    
    IPADDR=192.168.56.12
    


Saltstack 的安装

注:saltstack官方提供了各种版本系统安装方法(地址:http://repo.saltstack.com/#rhel)

  1. 在linux-node1 中安装saltstack master 和 minion

    yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 
    
    yum -y install salt-master salt-minion
    
    	/etc/salt/master(master配置文件)
    
    	/etc/salt/minion(minion配置文件)
    
  2. 在linux-node2 中安装saltstack minion

yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 

yum -y install salt-minion

	/etc/salt/minion(minion配置文件)
  1. 在linux-node1中配置 salt-minion

    vim /etc/salt/minion
    
    # master: salt   修改为(master: 192.168.56.11) ----》配置master IP
    
    # id:           修改为(id: linux-node1.example.com)   ---》告诉master自己是谁,默认会读取当前主机名
    

    注:saltstack是以主机名区分不同 agent 需保证主机名唯一

  2. 在linux-node2中配置 salt-minion

    vim /etc/salt/minion
    
    #master: salt   修改为(master: 192.168.56.11) ----》配置master IP
    
    #id:           修改为(id: linux-node2.example.com)   ---》告诉master自己是谁,默认会读取当前主机名
    
  3. 启动linux-node1中salt-maser 和 salt-minion

    systemctl start salt-master       # 启动salt-master
    
    systemctl enable salt-master       # 设置salt-master开机自启动
    
    systemctl start salt-minion        # 启动
    
    systemctl enable salt-minion     # 开机自启动
    
  4. 启动linux-node2中salt-minion

    systemctl start salt-minion        # 启动
    
    systemctl enable salt-minion      # 开机自启动
    
  5. 认证

    salt-key             # 在master中查看所有key的状态
    
    salt-key -a linux-node1.example.com      # 认证 linux-node1.example.com的key
    
    salt-key -A          # 一次性认证所有key
    
  6. 远程执行测试

    salt  \*  test.ping         # 测试saltstack minion与master的连通性
    
    salt \* cmd.run 'df -h'     # 在所有minion中批量执行 df -h 命令
    

    如果此时 能看到这两个服务器的名字,就代表完成了。

常用 的命令会在下篇文章介绍

以上参考:https://www.cnblogs.com/jiawei2527/p/12547157.html

以上参考:https://www.cnblogs.com/xiaonq/p/10233439.html#i3

发布了102 篇原创文章 · 获赞 229 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/105127577