学习 SUSE Storage 系列文章

(1)SUSE Storage6 实验环境搭建详细步骤 - Win10 + VMware WorkStation

(2)SUSE Linux Enterprise 15 SP1 系统安装

(3)SUSE Ceph 快速部署 - Storage6

(4)SUSE Ceph 增加节点、减少节点、 删除OSD磁盘等操作 - Storage6

(5)深入理解 DeepSea 和 Salt 部署工具 - Storage6


首先我们通过前几篇文章,已经搭建了一套完整的Ceph集群,对使用salt工具自动化搭建集群有所了解,下面我们就对部署方式进行详解

SUSE Enterprise Storage 部署方式

storage4 采用的方式:

  • ceph-deploy 工具,标准的ceph脚本部署,适用于中小型存储集群
  • crowbar工具,部署SUSE Openstack的标准工具

storage5/6 采用方式:

  • DeepSea (Salt),轻量级,敏捷性,灵活性,弹性部署

过去我们的部署方式采用社区的方式ceph-deploy或 crowbar 工具搭建,这2种工具部署都有一定局限性,不适合大型存储集群部署,敏捷性、灵活性太差。因此从2018年开始,SUSE Enterprise Storage 5 弃用 ceph-deploy / crowbar 群集部署工具 ,推出DeepSea方式进行部署,该方式更加轻量级,高速互通,敏捷性,灵活性,适用于各种场景部署集群系统,也是Ceph产品部署方式的趋势。

一、DeepSea 简介

DeepSea 旨在节省管理员的时间,让他们自信地对 Ceph 群集执行复杂操作。Ceph 是一款高度可配置的软件解决方案。它提高了系统管理员的自由度和职责履行能力。最低的 Ceph 设置能够很好地满足演示目的,但无法展示 Ceph 在处理大量节点时可体现的卓越功能。DeepSea 会收集并储存有关单台服务器的相关数据,例如地址和设备名称。对于诸如 Ceph 的分布式储存系统,可能需要收集并储存数百个这样的项目。收集信息并手动将数据输入到配置管理工具的过程非常耗费精力,并且容易出错。准备服务器、收集配置信息以及配置和部署 Ceph 所需执行的步骤大致相同。但是,这种做法无法解决管理独立功能的需求。在日常操作中,必须做到不厌其烦地将硬件添加到给定的功能,以及从容地去除硬件。DeepSea 通过以下策略解决了这些需求:DeepSea 可将管理员的多项决策合并到单个文件中。这些决策包括群集指派、角色指派和配置文件指派。此外,DeepSea 会收集各组任务以组成一个简单的目标。每个目标就是一个阶段:

关于DeepSea官方资料:

GitHub 链接: https://github.com/SUSE/DeepSea/wiki

二、SaltStack 简介

SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack 基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、 python-msgpack和PyYAML等)构建。

通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

特性:

(1)部署简单、方便;

(2)支持大部分UNIX/Linux及Windows环境;

(3)主从集中化管理;

(4)配置简单、功能强大、扩展性强;

(5)主控端(master)和被控端(minion)基于证书认证,安全可靠;

(6)支持API及自定义模块,可通过Python轻松扩展。

SaltStack: Pillar 和 Grains 详解

SatlStack 远程执行

1、远程执行

  • 目标 (Targeting)
  • 模块 (Module)
  • 返回 (return)

2、目标

(1)和Minion ID 有关,需要使用Minion ID

  • 通配符
  • 正则表达式
  • 列表

通配符方式:

# salt 'node00[1-3]'.example.com cmd.run 'w'
node002.example.com:
:: up :, users, load average: 0.28, 0.09, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
node001.example.com:
:: up :, users, load average: 0.23, 0.13, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
node003.example.com:
:: up :, users, load average: 0.24, 0.09, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

正则表达式

# salt -E 'node(001|002).example.com' test.ping
node002.example.com:
True
node001.example.com:
True

(2)和Minion ID 无关,不涉及到Minion ID

  • 子网 /  IP 地址
  • Grains
  • Pillar
  • Compound matchers (复合匹配)
  • Node groups (节点组)
  • Batching execution (批处理执行)

Grains 方式,OS是SUSE

# salt -G 'os:SUSE' test.ping
node001.example.com:
True
node002.example.com:
True
node003.example.com:
True
node004.example.com:
True
admin.example.com:
True

获取 Pillar ,然后指定pillar方式

# salt 'admin*' pillar.items
admin.example.com:
----------
available_roles:
- storage
- admin
- mon
- mds
- mgr .....     roles:
        - master
        - admin
        - prometheus
        - grafana
    time_server:
        admin.example.com # salt -I 'roles:grafana' test.ping             
admin.example.com:
    True

3、模块详解

1000+ 的模块,目前在不断增加中 , saltstack模块链接

admin:~ # salt 'node001*' network.arp
node001.example.com:
----------
:0c::::2d:
192.168.2.42
:0c:::::
192.168.3.42
:0c::ae:::
172.200.50.39
:0c::ae::5b:
192.168.2.39
:0c::d3:ba::
192.168.2.41
:0c::d3:ba:1f:
192.168.3.41
:0c::e0:5c:8c:
192.168.2.43
:0c::e0:5c::
192.168.3.43
admin:~ # salt 'node001*' network.interface eth1
node001.example.com:
|_
----------
address:
192.168.2.40
broadcast:
192.168.2.255
label:
eth1
netmask:
255.255.255.0

三、配置和自定义

policy.cfg 文件

/srv/pillar/ceph/proposals/policy.cfg 配置文件用于确定单个群集节点的角色。例如,哪个节点充当 OSD,或哪个节点充当监视器节点。请编辑 policy.cfg ,以反映所需的群集设置。段落采用任意顺序,但所包含行的内容将重写前面行的内容中匹配的密钥。

1、policy.cfg 的模板

  • 可以在 /usr/share/doc/packages/deepsea/examples/ 目录中找到完整策略文件的多个示例。
  • 一般我们选择基于角色定义的模板
# ll /usr/share/doc/packages/deepsea/examples/
total
-rw-r--r-- root root Aug : policy.cfg-generic
-rw-r--r-- root root Aug : policy.cfg-regex
-rw-r--r-- root root Aug : policy.cfg-rolebased

2、群集指派

要包含所有受控端,请添加以下几行:

cluster-ceph/cluster/*.sls

要将特定的受控端加入白名单,请运行以下命令:

cluster-ceph/cluster/abc.domain.sls

要将一组受控端加入白名单,可以使用通配符:

cluster-ceph/cluster/mon*.sls

要将受控端加入黑名单,可将其设置为 unassigned :

cluster-unassigned/cluster/client*.sls 

3、policy.cfg 示例

下面是一个基本 policy.cfg 文件的示例:

 vim /srv/pillar/ceph/proposals/policy.cfg 

 ## Cluster Assignment
cluster-ceph/cluster/*.sls ## Roles
# ADMIN
role-master/cluster/admin*.sls
role-admin/cluster/admin*.sls # Monitoring
role-prometheus/cluster/admin*.sls
role-grafana/cluster/admin*.sls # MON
role-mon/cluster/node00[1-3]*.sls # MGR (mgrs are usually colocated with mons)
role-mgr/cluster/node00[1-3]*.sls # COMMON
config/stack/default/global.yml
config/stack/default/ceph/cluster.yml # Storage
role-storage/cluster/node00*.sls # MDS
role-mds/cluster/node001*.sls # IGW
role-igw/stack/default/ceph/minions/node002*.yml
role-igw/cluster/node002*.sls # RGW
role-rgw/cluster/node00[3-4]*.sls

(1)第3-4行:

  • 指示在 Ceph 群集中包含所有受控端。如果您不想在 Ceph 群集中包含某些受控端,请使用:
cluster-unassigned/cluster/*.sls
cluster-ceph/cluster/node00*.sls
  • 将所有受控端标记为未指派。
  • 覆盖与“node00*.sls”匹配的受控端,并将其指派到 Ceph 群集。

(2)第7-9行

  • 指定主机名为admin的主机节点具有"master" 和 “admin” 角色

(3)第11-13行

  • 指定要部署 Dashboard 可视化界面的节点

(4)第15-16行

  • 将受控节点 node001 node002 node003 设置为MON 节点

(5)第18-19

  • 将受控节点 node001 node002 node003 设置为 MGR 节点 ,该设置必须跟随 MON 设置一样

(6)第21-23行

  • 表示接受 fsid 和 public_network 等通用配置参数的默认值

(7)第25-36行

  • 受控端 “node00*” 将具有 storage  IGW RGW MDS 角色

四、DeepSea 部署方式

通过架构图,我们可以清楚的了解到,安装 Storage6 时只要管理节点安装 satl-master 和 salt-minion,其他OSD节点安装 salt-minion,并且所有的 minion 都指向salt-master IP地址或主机名(推荐使用public网段地址),然后执行deepsea 的4个阶段命令 “salt-run state.orch ceph.stage.X” 就可以轻松的搭建完成。

DeepSea阶段说明

阶段 0 — 准备:在此阶段,将应用全部所需的更新,并且可能会重引导您的系统。

阶段 1 — 发现:在此阶段,通过Salt在客户端安装的salt minion, 将检测群集中的所有硬件, 并收集 Ceph 配置所需的信息。

阶段 2 — 配置:您需要以特定的格式准备配置数据。(定义 salt 的pillar)

阶段 3 — 部署:创建包含必要 Ceph 服务的基本 Ceph 群集。有关必要服务的列表

阶段 4 — 服务:可在此阶段安装 Ceph 的其他功能,例如 iSCSI、RADOS 网关和CephFS。其中每个功能都是可选的。

阶段 5 — 去除阶段:此阶段不是必需的,在初始设置期间,通常不需要此阶段。在此阶段,将会去除受控端的角色以及群集配置。如果您需要从群集中去除某个储存节点,则需要运行此阶段.

DeepSea CLI

DeepSea 还提供了一个 CLI 工具,供用户监视或运行阶段,同时实时将执行进度可视化。支持使用以下两种模式来可视化阶段的执行进度:

  • 监视模式:可视化另一个终端会话中发出的 salt-run 命令所触发 DeepSea 阶段的执行进度。
  • 独立模式:运行 DeepSea 阶段,并在该阶段的构成步骤执行时提供相应的实时可视化效果。

监控模式 Monitor Mode

该程序监控提供一个详细的,实时的可视化操作行为,当在执行运行salt-run state.orch时,监控执行期间运行了什么

# deepsea monitor

独立模式 Stand-alone Mode

# deepsea stage run stage-name
# salt-run state.orch ceph.stage.
# deepsea stage run ceph.stage.

Deepsea帮助信息

# man deepsea-monitor
NAME
deepsea-monitor - Starts the DeepSea stage execution progress monitor.
# man deepsea-stage run

深入理解 DeepSea 和 Salt 部署工具 - Storage6的更多相关文章

  1. Capsule:开源的 JVM 应用部署工具

    [编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...

  2. Openstack部署工具

    Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Openstack的is ...

  3. openstack部署工具简介

    个人使用方面DevStack无疑,在可预见的未来时间内,DevStack仍将是众多开发者们的首选安装方式或工具.该方式主要是通过配置参数,执行shell脚本来安装一个OpenStack的开发环境.Gi ...

  4. 云原生下基于K8S声明式GitOps持续部署工具ArgoCD实战-上

    @ 目录 概述 定义 工作原理 主要组件 核心概念 环境准备 概述 安装Kubekey 创建K8S 安装K9S OpenLB 安装ArgoCD 安装 ArgoCD CLI 从Git库中创建一个应用程序 ...

  5. OpenStack部署工具总结

    目前感觉比较简单直观的部署工具有RDO.devstack.Fuel等: 1. RDO https://openstack.redhat.com/Quickstart REDHAT出品,支持Redhat ...

  6. Capistrano初探--Ruby快速部署工具

    1.Capistrano介绍 是什么?---一种部署工具.(部署就是在生产服务器上安装应用程序,或是更新最新版本:web服务器的启动重启与停止:使网站进入维护状态或将其恢复为常态) 在进行 Rails ...

  7. seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  8. NodeJS热部署工具 — supervisor

    NodeJS热部署工具 — supervisor 大家都在开发nodejs应用时遇到过这样的情况,修改nodejs应用中的程序文件后必须重启nodejs才能重新加载应用代码.这是因为nodejs加载过 ...

  9. 阿里云运维部署工具AppDeploy详细教程

    AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...

随机推荐

  1. PHP学习—了解篇

    了解PHP 了解神器:PhpStudy 一键搭建PHP环境 语法: ​ PHP是一种可以嵌套在HTML页面的脚本语言 嵌套HTML文件: <!DOCTYPE html> <html& ...

  2. Codeforces Round #504 E - Down or Right 交互题

    1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1), ...

  3. Educational Codeforces Round 44#985DSand Fortress+二分

    传送门:送你去985D: 题意: 你有n袋沙包,在第一个沙包高度不超过H的条件下,满足相邻两个沙包高度差小于等于1的条件下(注意最小一定可以为0),求最少的沙包堆数: 思路: 画成图来说,有两种可能, ...

  4. 2015 省赛 简单的图论问题? bfs

    [E] 简单的图论问题? 时间限制: 5000 ms 内存限制: 65535 K 问题描述 给一个 n 行 m 列的迷宫,每个格子要么是障碍物要么是空地.每个空地里都有一个权值.你的 任务是从找一条( ...

  5. Codeforces Round #582 (Div. 3)

    题目链接:https://codeforces.com/contest/1213 A: 题意:给定数的位置,位置为整数,每个数可以向左或右移动一格或者两格,移动一格花费一个硬币,两格不花费硬币,问所有 ...

  6. 为什么spark中只有ALS

    WRMF is like the classic rock of implicit matrix factorization. It may not be the trendiest, but it ...

  7. java 中for循环中断的办法

    /* 中断for循环的办法: 1.break ***2.return是结束方法的,不是结束循环的. 3.标签的方法. 格式: 表签名:语句 运行结果:D:\test\day0413>java T ...

  8. c语言文件的基本操作

    c语言对文件的操作主要分为:按字符操作,按行操作,按内存块操作 主要的函数: fopen(): FILE * fopen(_In_z_ const char * _Filename, _In_z_ c ...

  9. 019 模块2-time库的使用

    目录 一.概述 二.time库基本介绍 2.1 time库概述 三.时间获取 四.时间格式化 4.1 格式化控制符 4.2 时间格式化-代码 五.程序计时应用 5.1 程序计时 六.单元小结 参考:h ...

  10. WEB应用中普通java代码如何读取资源文件

    首先: 资源文件分两种:后缀.xml文件和.properties文件 .xml文件:当数据之间有联系时用.xml .properties文件:当数据之间没有联系时用.properties 正题:   ...