「KUBERNETES-ADDONS」- kubeadm:集群部署工具

集群配置文件(kubeadm-config)
Kubernetes/kubeadm Configuration (v1beta3)

# kubeadm config print init-defaults > kubeadm-config.yaml

# kubeadm init –config=kubeadm-config.yaml –upload-certs

配置 BASH 补全

# 首先,需要安装 bash-complete 包,因为 kubectl 依赖于它。
apt-get install bash-completion # Debian
yum install bash-completion # CentOS

# 然后,启用 kubectl 补全
echo “source <($(which kubeadm) completion bash)” >> ~/.bashrc
source ~/.bashrc

参考文献
Kubeadm | Kubernetes[……]

READ MORE

「KUBERNETES-ADDONS」- 安装并使用 kubectl 管理集群

问题描述
kubectl 是 Kubernetes 集群管理命令,用于管理 Kubernetes 集群,完成集群维护任务。在使用集群时,我们有很多能用的管理工具,但是深入的集群管理与问题排查还是需要使用 kubectl 命令,而非那些高级 Web 图形化界面。
该笔记将记录:在 Linux 中,如何安装 kubectl 命令,以及常用命令、配置、使用方法,以及相关问题处理。
解决方案
Install and Set Up kubectl Overview of kubectl Kubernetes/Reference/kubectl[……]

READ MORE

「Doxygen」- 文档生成工具

用于 C, C++, Java, Objective-C, Python, IDL 和某些范围的 PHP, C#, D 的文档系统。可以从一组记录的源文件中,生成在线的 class 浏览(HTML 格式)和离线的参考手册(LaTeX 格式)。同时也支持生成 Man 手册、将生成的输出转化为 POstscript、超链接的 PDF、压缩的HTML。文档直接从源文件中提取,即写在代码中的注释。
用「Doxygen」可以做什么?
1)从代码的注释中,生成文档。 2)使用未注释的源码来:分析源码的结构,获取源码的调用图、继承图、关系图。 3)单纯的创建普通文档。
支持的输出格式
HTML、LaTeX、Man pages、Rich Text Format、XML
软件安装
通过包管理器安装(APT、YUM)

# Kali GNU/Linux Rolling
apt-get install doxygen doxygen-gui

# Doxygen手册
apt-get install doxygen-doc

通过源码编译安装(Linux)
参考 BLFS/Doxygen-1.8.11 站点,以获取编译安装的详细过程。
包含的可执行程序
doxygen 是一个基于命令行的程序,用于生成配置文件模板,然后用模板生成文档。 使用doxygen –help来解释命令行参数。
doxywizard 配置和运行doxygen的GUI工具。
doxyindexer 使用由doxygen生成的搜索数据文件,生成名为doxysearch.db的搜索索引文件。 http://www.stack.nl/~dimitri/doxygen/manual/extsearch.html
doxysearch.cgi 用于搜索由doxygen索引的数据的CGI程序。
参考文献
Wikipedia / Doxygen: https://en.wikipedia.org/wiki/Doxygen Homepage: http://www.stack.nl/~dimitri/doxygen/ Doxygen Manual: http://www.stack.nl/~dimitri/doxygen/manual/index.html Github Repo: https://github.com/doxygen/doxygen BLFS/Doxygen-1.8.11[……]

READ MORE

「COMPUTER-NETWORKING」- 计算机、网络、协议(数据通信网络)

研究对象
计算机网络。我们将开始学习网络技术,该部分内容是我们的对计算机网络技术及网络协议相关的学习笔记;
研究结果
理论:熟悉计算机网络通信过程所使用的网络协议,以及网络协议的大致交互过程; 实践:熟悉华为网络设备配置,能够通过网络设备(或开源组件)来实现企业网络;
鉴于网络工程师或计算机网络并非我们未来的发展方向,所以学习网络知识需要注意如下事项: 1)熟悉协议的交互流程,但切莫过于深入探索协议细节内容:例如,学习 IPSec VPN 内容,重点放在协议交互过程,切莫深究密码学知识; 2)减少厂商相关技术的学习,增加通用技术的学习,掌握解决问题的思想):例如,围绕华为体系展开学习,而不再学习其他厂商相关的知识;
研究工具
培训机构:
书籍教材: 1)华为 IP 网络系列丛书:https://e.huawei.com/cn/topic/enterprise-network/ip-ebook
官方文档:RFC
文章博客:
章节列表
基础知识:基本概念术语,形成对网络的基本认识、理解网络工作原理; 通信协议:数通网络技术,涵盖诸如网络、交换、路由等等技术;应用网络协议,常见应用层服务,以及服务搭建部署; 企业数通:企业网及解决方案; 运维管理:网络维护及管理;网络自动化; 附录杂项:网络硬件及解决方案(含硬件产品,但不含硬件参数及原理);
涵盖内容
该部分笔记内容将涵盖以下部分: 1)概念术语:形成对网络的宏观且基本的认识,了解网络的基本原理; 2)网络技术:在数据通信中用到的技术解决方案及其原理;例如对等网络、链路聚合等等; 3)网络协议:深入学习网络协议,了解协议工作原理;例如 HTTP、TCP、IP、L2TP 等等; 4)服务搭建:与具体网络协议相关的应用、服务、环境搭建及使用等等;
附加说明
该部分内容包括网络技术及网络协议,但不涉及网络硬件、操作系统网络实现等等知识; 该部分内容包括服务搭建,但不包含软件实现的过多介绍(比如客户端功能对比); 鉴于网络协议是操作系统无关的,因此该部分并不涉及「操作系统网络配置」相关内容;[……]

READ MORE

「PPP」- Point-to-Point Protocol

问题描述
PPP 用于 CE 与 PE 之间发送数据。
解决方案
PPP(Point-to-Point Protocol,点到点协议)是一种常见的广域网数据链路层协议,主要用于在全双工的链路上进行点到点的数据传输封装。
原理简述

协议特性
提供链路层参数协商协议: 1) LCP(Link Control Protocol,链路控制协议),用于各种链路层参数的协商,例如最大接收单元,认证模式等。
提供安全认证协议族: 1)PAP(Password Authentication Protocol,密码验证协议), 2)CHAP(Challenge Handshake Authentication Protocol,挑战握手认证协议), 3)而以太网不支持直接认证,需要其他认证手段(比如 Portal 认证)
提供网络层参数协议: 1)各种 NCP(Network Control Protocol,网络控制协议),用于各网络层参数的协商,更好地支持了网络层协议。 2)如 IPCP(IP Control Protocol ,网络控制协议),
提供良好的扩展性: 1)例如,当需要在以太网链路上承载 PPP 协议时,PPP 能够扩展为 PPPoE 协议。
注意事项: 1)在 PPP 中,它是点到点协议,并非以太那种多路访问 2)是不存在 MAC Address 的,所以也没有 ARP 协议; 3)鉴于是点到点链路,链路间不需要也不能连接交换机;
应用场景
PPP 用于 CE 与 PE 之间发送数据
概念术语
配置使用[……]

READ MORE

「PPP」- 报文格式

PPP Packet Format

Protocol:上层承载的报文;
Code:当前协议的不同报文类型;
Data:业务数据;
建立链接
Configuration Request

Frame 44: 18 bytes on wire (144 bits), 18 bytes captured (144 bits) on interface -, id 0
Point-to-Point Protocol
Address: 0xff
Control: 0x03
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol
Code: Configuration Request (1)
Identifier: 4 (0x04)
Length: 14
Options: (10 bytes), Maximum Receive Unit, Magic Number
Maximum Receive Unit: 1500
Magic Number: 0x3283550a

Configuration Ack

Frame 45: 18 bytes on wire (144 bits), 18 bytes captured (144 bits) on interface -, id 0
Point-to-Point Protocol
Address: 0xff
Control: 0x03
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol
Code: Configuration Ack (2)
Identifier: 4 (0x04)
Length: 14
Options: (10 bytes), Maximum Receive Unit, Magic Number
Maximum Receive Unit: 1500
Magic Number: 0x3283550a

断开链接
Termination Request

Frame 41: 8 bytes on wire (64 bits), 8 bytes captured (64 bits) on interface -, id 0
Point-to-Point Protocol
Address: 0xff
Control: 0x03
Protocol: Link Cont[……]

READ MORE

「PPP」- 报文交换

链路建立流程
建立 PPP 链路,需要进行三个阶段的协商: 1)链路协商:通过LCP报文进行链路参数协商,建立链路层连接; 2)认证协商(可选):通过链路建立阶段协商的认证方式进行链路认证; 3)网络协商 :通过 NCP 协商,来选择和配置一个网络层协议,并进行网络层参数协商;
链路接口状态机
PPP协商由链路两端的接口完成。接口的状态表示了协议的协商阶段;

第一步、链路协商过程(LCP)
LCP 协商由不同的 LCP 报文交互完成,相互协商: 1)协商由任意一方发送 Configure-Request 报文发起; 2)如果对端接收此报文且参数匹配,则通过回复 Configure-Ack 响应协商成功;
参数匹配,协商成功

Magic Number:用于防环;
Configure-Request 需要相互发送。
参数相异,重新协商
在LCP报文交互中出现LCP参数不匹配时,接收方回复 Configure-NAK 响应告知对端修改参数然后重新协商;

参数未知,重新协商
在LCP报文交互中出现LCP参数不识别时,接收方回复 Configure-Reject 响应告知对端删除不识别的参数,然后重新协商;

第二步、认证协商过程(Auth)
链路协商成功后,进行认证协商(此过程可选)。认证协商有两种模式:PAP;CHAP;
PAP,Password Authentication Protocol
PAP 认证双方有两次握手。协商报文以明文的形式在链路上传输;

Auehenticate-Request,Authenticate-ACK(Authenticate-NAK)
CHAP,Challenge Handshake Authentication Protocol
CHAP认证双方有三次握手。协商报文被 HASH 后再在链路上传输;

第三步、网络协商过程(Network)
PPP认证协商后,双方进入NCP协商阶段,协商在数据链路上所传输的数据包的格式与类型;
以常见的 IPCP 协议为例,它分为: 1)静态地址协商。需要事先手动在链路两端配置IP地址,协商过程只是通知对方; 2)动态地址协商;
静态网络地址协商

动态网络地址协商
动态地址协商支持 PPP 链路一端为对端配置地址,即:某端未配置地址,另端已配置地址,此时零端负责分配地址;[……]

READ MORE

「Huawei VRP」- 配置 PPP 协议

配置命令(Huawei)
链路配置

// 配置接口封装PPP协议
// 在接口视图下,将接口封装协议改为 ppp,华为串行接口默认封装协议为ppp。
[Huawei-Serial0/0/0] link-protocol ppp

// 配置协商超时时间间隔
// 在PPP LCP协商过程中,本端设备会向对端设备发送LCP协商报文,如果在指定协商时间间隔内没有收到对端的应答报文,则重新发送。
[Huawei-Serial0/0/0] ppp timer negotiate seconds

认证配置
PAP 认证配置命令

// 远程:配置验证方以PAP方式认证对端
// 首先需要通过AAA将被验证方的用户名和密码加入本地用户列表,然后选择认证模式。
[Huawei-aaa] local-user user-name password { cipher | irreversible-cipher } password
[Huawei-aaa] local-user user-name service-type ppp
[Huawei-Serial0/0/0] ppp authentication-mode pap
// 本地:配置被验证方以PAP方式被对端认证
// 配置本地被对端以PAP方式验证时,本地发送PAP用户名和口令。
[Huawei-Serial0/0/0] ppp pap local-user user-name password { cipher | simple } password

CHAP 认证配置命令

// 远程:配置验证方以CHAP方式认证对端
[Huawei-aaa] local-user user-name password { cipher | irreversible-cipher } password
[Huawei-aaa] local-user user-name service-type ppp
[Huawei-Serial0/0/0] ppp authentication-mode chap

// 本地:配置被验证方以CHAP方式被对端认证
// 配置本地用户名,配置本地被对端以CHAP方式验证时的口令。
[Huawei-Serial0/0/0] ppp chap user user-name
[Huawei-Serial0/0/0] ppp chap password { cipher | simple } password

实验:PPP, PAP
远端配置: 1)接口链路类型: 2)创建用户,指定服务类型: 3)接口认证类型:
本端配置: 1)接口链路类型: 2)接口认证:ppp pap …[……]

READ MORE

「PPP」- Point-to-Point Protocol

问题描述
PPP,Point-to-Point Protocol,点对点协议。
而 ppp (Paul’s PPP Package),实现 PPP 协议。
解决方案
安装服务
可以去官网下载ppp。官网中也有ppp的Git仓库的地址。最开始我下载了ppp-2.4.7.tar.gz,但是编译中有错误,虽然通过了,但是有错误,与我的内核版本头文件有关。然后我又重新从Git仓库中检出master分支重新编译,这时候不再有编译错误。
内核要支持PPP驱动 -> Device Drivers

-> Network device support

阅读README及README.linux进行安装 如果是Linux下编译,先阅读源码目录下的README和README.linux,里面有详细的指引。
相关文件

.
├── include
│   └── pppd # 相关的头文件
├── lib
│   └── pppd # 相关的.SO文件
└── sbin
├── chat
├── pppd
├── pppdump
├── pppoe-discovery
└── pppstats

参考文献
Homepage Wikipedia / PPP[……]

READ MORE

「SSH」- 概念、术语

协议结构
在SSH 协议框架中,最主要的部分是三个协议: 1)传输层协议:提供 版本协商、加密算法协商、密钥交换、服务端认证、信息完整性支持; 2)用户认证协议:为服务器提供客户端的身份鉴别; 3)连接协议:将加密的信息隧道复用为多个逻辑通道,提供给高层的应用协议(STelnet、SFTP)使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

SSH 传输层协议
SSH 传输层协议,是个安全传输协议。SSH 传输层通常建立在TCP/IP连接上,但也可以在任何其他可靠的数据流上建立。 SSH 传输层协议协商所有的密钥交换算法、公钥算法、对称加密算法、消息认证算法等。
算法类别 | 算法功能 | 算法名称 1)密钥交换算法 | 用于产生会话密钥 | diffie-hellman-group14-sha1, diffie-hellman-group1-sha1… 2)公钥算法 | 用于进行数字签名和用户认证 | ssh-rsa,ssh-dss … 3)对称加密算法 | 用于会话的加密 | aes128-ctr,3des-cbc … 4)消息认证算法 | 用于数据完整性认证 | hmac-sha1,hmac-md5 …
完美前向保密
完美前向保密(Perfect Forward Secrecy,PFS),是安全通讯协议中的一种属性,PFS由Christoph G. Günther在1990年提出,其最初用于定义会话密钥交换协议的一种安全性,指的是用来产生会话密钥的长期密钥(long-term key,通常为私钥或者相关认证材料)的泄露,不会导致过去的会话密钥(session key)泄漏。前向保密能够保护历史通讯和会话不受密码或密钥在未来暴露的威胁,即使攻击者进行主动干预也是如此。
SSH传输层协议采用的Diffie-Hellman密钥交换算法可以提供完美的前向保密性(PFS)。
更多参考 RFC4251 9.3.7 Forward Secrecy 小节,https://www.ietf.org/rfc/rfc4251.txt
SSH 用户认证协议
SSH用户认证协议为服务器提供客户端的用户鉴别。它运行在传输层协议上。
SSH用户认证协议提供两种认证方法: 1)口令认证:客户端通过用户名和密码登录到服务器,完成用户认证。 2)公钥认证:服务器通过公钥解密客户端的数字签名,完成用户认证。
公钥是用来解密信息的,确保让别人知道这条信息是真的,是有自己本人发布的,是完整正确的。接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。
当此协议启动时,它从SSH传输层协议接收会话ID[……]

READ MORE

「SSH」- 原理简述

在整个通讯过程中,为实现 SSH 的安全连接,Client 与 Sever 要经历如下五个阶段:    1)版本协商阶段:目前 SSH 包括 SSH1 和 SSH2 两个版本,双方通过版本协商确定使用的版本; 2)算法协商阶段:SSH 支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的加密算法; 3)密钥交换阶段:通过密钥交换算法生成会话密钥,此后双方的会话均通过会话密钥加密; 4)用户认证阶段:SSH Client 向 Server 发起认证请求, Server 对 Client 进行认证;    5)会话交互阶段:当认证通过后,Server 和 Client 进行信息的交互;

版本协商阶段
客户端和服务器交互 SSH 版本协商报文,确定 V1 或 V2 版本

1)服务端打开端口 22,等待客户连接。客户端向服务端发起 TCP 连接,双方完成握手并建立连接。 3)客户端向服务端发送第一个报文,包括版本标志字符串,格式为 “协议版本号 次协议版本号 软件版本号”。 4)服务端收到报文后,解析协议版本号:如果客户端的协议版本号比自己的低,且服务端能支持客户端的低版本,就使用客户端的协议号,否则使用自己的协议版本号。
算法协商阶段
客户端和服务器交互自己支持的算法列表,该列表包括四种算法的具体算法名称。

算法协商过程为: 1)从客户端发来的算法列表取出第一个算法,服务器在自身的算法列表中查找,若匹配上相同的算法,则协商成功,继续协商下一种算法;否则继续从客户端的该种算法列表中取出下一个算法,在服务器端的算法列表中匹配,直到匹配成功。
密钥交换阶段
根据密钥交换算法,双方动态地产生会话密钥用于后续会话加密。会话密钥无法被第三者截获,安全可靠。

客户端和服务器首先约定两个公开的质数p和g。 客户端和服务器各自随机产生一个数Xc,Xs,作为自己的私钥。 各自计算出自己的公钥Yc,Ys。 交换公钥Yc,Ys。 根据公私钥计算出加密用的会话密钥。
具体的密钥交换算法为DH算法,DH算法基于数学的离散对数(不再详述)。在密钥交换过程中私钥Xc,Xs始终是保密不传播的,且由于离散对数计算的困难性,其他用户即使获取 p、g、Yc、Ys 也无法推断出私钥 Xc、Xs,从而保证了会话密钥的安全性。
注意,该阶段产生的公私钥仅用于产生会话密钥,与后续用户认证无关。密钥交换阶段完成后,后续所有报文交互均为会话密钥加密过的报文。
用户认证阶段
用户认证阶段有口令认证和公钥认证两种方式。
口令认证
客户端发送携带用户名和口令的认证请求,服务器与本地用户数据进行匹配认证。[……]

READ MORE

「NETWORKING」- 软件实现网络(搭建,软路由,路由器,软件)

问题描述
无意间在油管上看见 Openwrt/LEDE 搭建路由的方法(一个 U 盘优盘就翻墙免费拥有 VPN 翻墙路由器的两种方法 Openwrt/LEDE 软路由 U 盘优盘的制作 ButterflyVPN 评测)。我们有心搭建,可惜无用(没有需求),所有也没有搭建,但依旧记录下这就事情。如果日后真的有必要,我们将会按照视频中的方法搭建自己的“高级路由器”;
# 02/06/2022 数月前,我们开始探索软路由相关的应用技术,目的是为我们的 边缘数据中心(Edge DC) 提供网关设备;
# 03/29/2023 针对该部分笔记,其内容逐渐倾向于记录我们构建家庭网络的过程;
解决方案
我们需要准备如下物件: 1)设备:旧电脑,工控机; 2)存储:(可选)优盘; 3)固件:选择路由系统固件,比如 LEDE、OpenWrt 等等;[……]

READ MORE

「CEPH」- RBD 镜像

解决方案
配置RBD映像可以在不同的Ceph集群之间实现RBD块设备的异步复制,以实现容灾。
原理简述
RBD Mirror的核心原理是使用日志回放(JournalReplay)功能保证主集群RBD和次集群RBD的数据副本一致。注意,这里的日志并不是Ceph OSD日志。
该机制使用异步操作,在网络上将 Primary RBD Image 复制到目标 Seconadry RBD Image。如果 Primary RBDImage的集群不可用,你可以使用远程集群上的 Secondary RBDImage,然后重新启动该映像的应用程序。从Source RBD Image故障转移到Mirror RBD Image时,必须降级Source RBD Image,同时升级Target RBD Image。Image降级后,将变为锁定且不可用状态;升级后,将进入读写模式,可被使用。RBD映像功能需要rbd-mirror软件包。该软件包需要安装在两个集群的服务器上,并且每个Ceph集群必须至少配置一个MirrorAgent。
数据复制方向
RBD Mirror支持两种复制:单向复制、双向复制。
在单向复制下,主集群的RBD Image读/写可用,而远程Secondary Cluster仅容纳镜像,并不提供对外服务。Mirror agent仅在Secondary Cluster上,Mirror是Secondary Cluster上运行的Mirror Agent远程拉取主集群上的RBD Image。此模式下,你可以配置多个辅Secondary Cluster。图11-3是RBDMirror单向复制的数据流向。
在双向复制下,每个RBD Mirror实例必须能够同时连接到另一个Ceph集群。此外,网络必须在两个数据中心站点之间具有足够的带宽,以处理镜像。图11-4是双向复制模式下的数据流向。这里要强调的是,虽然是双向复制模式,但是并不是业务双活,不能同时在两个集群中对相同的RBD数据进行读写。因为Ceph的RBD Mirror是异步的。双向复制模式要求单向写入,一旦主集群不可写,就可以配置Secondary Cluster作为读写集群,待主集群恢复后,Secondary ClusterRBD映射到主集群。本质上,双向复制和单向复制操作机制一样。
数据复制模式
RBD Mirror 有两种复制模式:
1)Pool 模式下,Mirror Pool中创建的每个RBDImage自动启动Mirror开始同步。在主站点MirrorPool中创建Image后,远程备站点自动创建副本Image。
2)Image 模式下,必须为每个RBD Image分别启动Mirror,并且必须明确指定要在两个集群之间复制的RBD[……]

READ MORE

「CEPH」- CephFS 数据备份

考虑到 CephFS 已经是文件形式的存储,用户的最终使用习惯和操作系统上的一样,所以官方未提供专用于 CephFS 容灾备份的集成方案,建议使用网络备份软件来设置容灾的集成方案。
如果 CephFS 的元数据损坏,Ceph 提供了修复工具 cephfs-journal-tool;[……]

READ MORE

「CEPH」- 对象存储(Object Storage,S3,Swift)

问题描述
S3 兼容接口提供了一套简单的 Web 服务接口,可随时随地通过 HTTP 的方式在网络上的任何位置存储和检索任意数量的数据,是一套非常实用的对象存储服务标准。很多互联网公司的产品,比如图片、视频一类资源的存储与发布等都是借助这套标准服务来实现的,节约了大量的采购、开发和部署运维成本,特别适合一次写入,多用户同时读取的场景;
解决方案
RGW(RADOS Gateway,Ceph 对象存储网关服务),是基于 librados 封装而实现的 FastCGI 服务,对外提供 RESTful 风格的对象存储数据访问和管理接口。它提供与 OpenStack Swift 和 Amazon S3 兼容的接口;
原理简述

RGW,建立在 librados 层之上,提供对象存储接口,为使用标准对象存储 API 的客户端提供访问 Ceph Cluster 的 RESTfulAPI 接口; RGW,使用 librgw(RADOS 网关库)和 librados,允许应用程序与 Ceph 对象存储建立连接; radosgw(核心守护进程)提供以 librados 为基础封装的接口,RGW 通常将自己的 Web 服务器作为前端来处理请求; Client 使用 API 与 RGW 通信,RGW 通过 librados 与 Ceph Cluster 通信;
特性特征
S3 and Swift
RGW 支持两个接口: 1)提供 S3 兼容接口:兼容大部分 Amazon S3 API 标准,详见 S3 接口兼容列表;(Ceph Object Gateway S3 API) 2)提供 Swift 兼容接口:兼容大部分 OpenStack Swift API 接口;(Ceph Object Gateway Swift API/FEATURES SUPPORT)
S3 和 Swift API 共享同个命名空间,所以可以使用其中一个 API 写入数据,使用另一个 API 检索数据;
Admin Ops API
提供 Ceph Admin API 支持:它们用于通过原生 API 调用来管理 Ceph 存储集群;(Admin Operations)
User Managerment
RGW 具有独立的用户管理功能,其拥有自己的用户集,与 Ceph Cluster 用户不同。换句话说,RGW 的客户端通过 Amazon S3 或 OpenStack Swift API 来使用自己的用户集进行身份验证。我们可以使用 radosgw-admin 工具或基于 LDAP 的外部身份验证服务来配置用户;
其他特性
Ceph 还支持多租户对象存储,通过 RESTful API 存取;
Ceph 对象存[……]

READ MORE

「Ceph」- 对象存储:多站点

Zonegroup:由多个 Zone 组成,应该有一个主 Zonegroup 来处理对系统配置的更改;
Zone:由一个或多个 Ceph 对象网关实例组成的逻辑组。Zone 的配置不同于典型的 Ceph 配置,因为并非所有设置最终都存储在 Ceph 配置文件中。Zonegroup 中必须指定一个 Zone 为主 Zone。主 Zone 将处理所有桶和用户请求。从 Zone 可以接收桶和用户请求,但会将它们重定向到主 Zone。如果主 Zone 崩溃,桶和用户请求处理失败。我们可以将从 Zone 升级为主 Zone。但是,升级从 Zone 为主 Zone 是一项复杂的操作,建议仅在主 Zone 长时间崩溃时执行;
Realm:代表由一个或多个 Zonegroup 组成的唯一的全局命名空间。每个 Zonegroup 包含一个或多个 Zone,每个 Zone 包含存储对象数据的桶。Realm 还包含 Period,每个 Period 展示某一时间段内 Zonegroup 和 Zone 配置的状态;
Period:每个 Period 展示唯一的 ID 和 Epoch。每次提交操作都会增加 Period 中的 Epoch。每个 Realm 都有一个关联的当前 Period,其中包含 Zonegroup 和存储策略的当前配置状态。每次更改 Zonegroup 或 Zone 时操作 Period 并提交。每个 Cluster Map 都保留其版本的历史记录。这些版本中的每一个版本都称为一个 Epoch;
参考文献
Multi-Site — Ceph Documentation[……]

READ MORE

「CEPH」- 模块交互过程

模块交互过程
首先通过 Ceph Client 接口将文件、视频、图片等数据写入,并将用户数据分割成对象(对象和定义的存储池关联),将对象放入存储池生成规则集,由 CRUSH 算法计算出 PG,最后将 PG 关联到具体服务器的硬盘,[……]

READ MORE

「CEPH」- RGW 管理维护

[WIP] 当创建用户时,命令挂起
问题描述:当创建用户时,命令挂起,很久才返回,并伴随错误,而继续创建新用户则不会再出现该问题;

root@ceph-node-09:/# radosgw-admin user create –uid=10 –display-name=’AAAAAA’
2022-06-04T15:06:19.301+0000 7f30db75c1c0 1 int RGWSI_Notify::robust_notify(RGWSI_RADOS::Obj&, const RGWCacheNotifyInfo&, optional_yield):394 Notify failed on object us-east-1.rgw.meta:users.uid:10: (110) Connection timed out
2022-06-04T15:06:19.301+0000 7f30db75c1c0 1 int RGWSI_Notify::robust_notify(RGWSI_RADOS::Obj&, const RGWCacheNotifyInfo&, optional_yield):397 Backtrace: : ceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)
1: (RGWSI_Notif[……]

READ MORE

「CEPH」- 规划高可用集群

问题描述
投产 Ceph 之前,需要做好充分的集群规划,才能在后续实践中得到满意的集群性能,同时降低运维难度。如果集群规划不当,将可能给集群扩容、升级、维护等带来很多麻烦;
解决方案
Ch.1 需求确认 Ch.2 版本选择 Ch.3 硬件选型 Ch.4 操作系统 Ch.5 服务规划 Ch.6 配置策略
Ch.1 确认场景
根据存储需求和使用场景,来制定 Ceph 的硬件选型需要;
高性能场景(IOPS)
特征:这种配置的类型亮点在于它在低 TCO(ownership 的总消耗)下每秒拥有最高的 IOPS;
实现:典型的做法是使用包含了更快的 SSD 硬盘、PCIe SSD、NVMe 做数据存储的高性能节点;
场景:通常用于块存储;也可以用在高 IOPS 的工作负载上:随着闪存使用的增加,企业越来越多地将 IOPS 密集型工作负载(例如 MySQL、MariaDB 或 PostgreSQL 等等)托管在 Ceph 集群,以便提高私有云存储解决方案性能,并支持结构化数据;
推荐配置:
CPU:假定主频 2GHz,则每个 NVMe SSD 使用 6vCPU,每个非 NVMe SSD 使用 2vCPU; RAM:16GB + OSD * 5GB(16GB 作为基线,每个 OSD 使用 5GB 内存) DISK:NVMe SSD Bluestore WAL/DB:可与 NVMe SSD 同盘; 磁盘控制器:PCIe OSD 进程数:每个 NVMe SSD 分配 OSD * 2 进程; 网络:每 OSD * 2 使用 10GB 网络;
通用场景(Bandwidth)
特征:亮点在于高吞吐量和每吞吐量的低功耗;
实现:通用的做法是拥有一个高带宽、物理隔离的双重网络,使用 SSD 和 PCIe SSD 做 OSD 日志盘;
场景:这种方法常用于块存储,如果你的应用场景需要高性能的对象存储和文件存储,也可以考虑使用;对于存储非结构化数据的用户,制定吞吐量大的方案即可;
Ceph 集群通常可以存储半结构化数据或非结构化数据,一般是顺序读写较大的文件,需要提供很大的带宽。存储服务器上的磁盘可以使用基础 SSD 做日志加速的 HDD 盘;
推荐配置: 1)CPU:假定主频 2GHz,则每个 HDD 使用 2vCPU,通常不需要使用 SSD 存储; 2)RAM:16GB + OSD * 5GB(16GB 作为基线,每个 OSD 使用 5GB 内存) 3)DISK:HDD (7200 RPM SATA/SAS) 4)Bluestore WAL/DB:使用 SAS SSD / NVMe SSD 进行加速; 5)磁盘控制器:HBA(JBOD) 6)OSD 进程:每个 HDD[……]

READ MORE

「CEPH」- 备份,恢复,迁移

数据备份:防止地域集群故障
容灾即灾难恢复、容灾备份或灾备,是数据中心业务连续性和可靠性中非常重要的考量指标。如果在生产系统上线后还没有做好容灾方案,那么一旦数据中心出现区域性故障,轻则业务中断,重则数据丢失。而容灾更多是指 系统在遭受自然灾害、人为操作失误 等情况下对业务数据的恢复能力;
当建设 Ceph Cluster 完毕后,单集群模式可以通过副本或者纠删码方式实现数据的高可用性,保证数据盘在部分损坏(可容许损坏数量范围内)的情况下,仍然能够持续提供服务,不会导致数据丢失;
但是,在单集群整体故障的情况下,实现数据可靠就需要提出完整的容灾方案;
解决方案
Ceph 的使用接口主要包括三种:对象存储接口、块存储接口、文件存储接口。除了这三种传统接口外,Ceph 还提供了在这三种接口上封装的其他服务,比如 iSCSI、NFS、Samba 等。对于不同接口保存的数据,我们都需要对其设计相应的容灾方案,保证在数据中心单 Ceph 集群出现故障后,相应存储接口保存的数据在远端容灾集群中有副本。
典型的 Ceph 容灾方案要求有两个 Ceph 集群:一个集群提供业务,另一个集群提供备份;
数据恢复:
为了能够细粒度的进行数据恢复,Ceph 提供 ceph-objectstore-tool 命令,用于低层次 PG 和对象的数据恢复;
使用该命令需要具有一定的知识背景,否则可能会造成数据丢失;
WIP[……]

READ MORE

「Ceph」- 运行观测

该笔记将记录:与 Ceph 有关的监控解决方案,但并不涉及集群的日常管理运维过程中的状态查看;
监控系统方案
GitHub – ceph/calamari,最后一次更新是 Jan 4, 2018(11/22/2022) GitHub – ceph/calamari-clients,已归档; GitHub – ceph/romana,已归档;
常用监控命令
需要查看的对象有:MON OSD MDS PG;RBD RADOSGW GEPHFS Client;
=
Auth

# ceph auth list

CRUSH map

# ceph osd crush dump

# ceph osd crush rule list

# ceph osd crush rule dump <crush_rule_name>

# ceph osd find <Numeric_OSD_ID>

Ceph MDS

# ceph mds stat

# ceph mds dump

# ceph fs ls[……]

READ MORE

「CEPH」- 性能提升

问题描述
在 Ceph 集群建设完毕后,需要对集群的性能进行测试,获取相应的测试指标(以确定集群是否能够满足性能要求),并针对测试指标对 Ceph 集群进行调优(以尽量减少软件层面带来的性能损耗,尽可能大地发挥硬件的性能优势,达到预期的性能要求)。
虽然,经过多年的研究,在 Linux 操作系统和 Ceph 自身性能上进行了优化。但是,每套 Ceph 集群的规模及场景都有差别,很难给出万能的参数让性能达到预期。要综合考虑各方面因素进行调优,避免参数之间相互影响,而无法获得良好的整体性能。
该笔记将记录:概述 Ceph Cluster 进行基准测试的方法;概述性能调优的方法;针对特定性能场景的解决办法;
解决方案
需要关注的对象
性能调优是为 Ceph 集群定制一个或多个系统的过程,以便使 Ceph 具有最佳的响应时间或吞吐量。
衡量 Ceph 集群的性能有 3 个指标: 1)延迟(Latency): 2)每秒读写次数(IOPS): 3)吞吐量(Latency):我们还可以测量从客户端到服务器网络甚至整个系统的吞吐量;
需要得到的结果
降低 Latency;提高 IOPS;提高 Bandwidth;
提升性能的方法
性能提升需要从两方面入手: 1)性能测试:针对硬件及当前系统进行测试,以了解最大性能; 2)性能调优:根据硬件负载模型、性能表现,来调整参数;[……]

READ MORE

「Ceph」- 性能测试,块存储性能

问题描述
在 Ceph 上线前,需要进行性能测试,以确定 Ceph 是否能够满足自己的场景需求。我们的目的是清楚掌握当前 Ceph Cluster 性能,所以要针对 Ceph Cluster 进行性能测试。
解决方案
在进行测试时,我们要清楚以下几点:
测试对象
Hardware:Network;Raw Block Device; Ceph Cluster:RDB;CephFS;RGW;
测试指标
IOPS、MBPS、Latency;
测试方法
在宣布测试结果时,需要说明该测试的工具、参数、方法,以便于比较。
测试工具:

1)Fio:灵活的I/O测试工具,通过其广泛的配置选项,测试各种复杂的I/O性能。它拥有适用于本地块设备和RBD的插件,这意味着可以直接从Ceph集群测试RBD,也可以通过Linux内核驱动程序将RBD映射到客户端,然后使用Fio对通过客户端映射的块设备进行I/O性能测试。

2)S3bench:提供了针对兼容S3接口的基本吞吐量测试功能。它执行一系列put操作,然后执行一系列get操作,并显示相应的统计信息。该工具使用AWS GoSDK。

3)Ping:除了能够诊断许多网络问题外,Ping对网络连接的延迟测试也非常有用。

4)iPerf:其允许进行一系列网络测试,以确定两台服务器之间的带宽。该工具是最常用的网络性能测试工具。

5)RADOS:Ceph自带的性能测试工具,包括对带宽等指标的全面测试。

测试参数:

在测试过程中,我们将调整 IO Size、寻址空间、队列深度、读写模式、随机/顺序模式 等等参数;

测试方法:

测试是为了对比,所以需要定性和定量。基准测试,实际上是一种比较。基准测试(benchmarking)是一种测量和评估软件性能指标的活动。你可以在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化后,再进行一次基准测试以确定那些变化对性能的影响。这是基准测试最常见的用途。

基准测试可以在不同层级执行:

第一步、获取硬件基准性能(针对存储集群底层硬件的基准测试)

如果想要知道 Ceph Cluster 性能,那首先要知道可能的集群最大性能。而最大性能不可能超过基础设施的性能,所以我们首先将针对硬件进行独立测试,以获取特定硬件的最大性能;

我们需要获取两个基础设施的指标:
1)[……]

READ MORE

「CEPH」- 性能测试:RADOS 性能测试

rados bench
命令行参数:

bench <seconds> write|seq|rand [-t concurrent_operations] [–no-cleanup] [–run-name run_name] [–no-hints] [–reuse-bench]
default is 16 concurrent IOs and 4 MB ops
default is to clean up after write benchmark
default run-name is ‘benchmark_last_metadata’

// 需要先运行 write 测试,以写入数据,用于后面的读取测试;
// seq and rand are read benchmarks, either sequential or random.
// 但是,我们没有找到该 write 属于 rand 还是 seq 模式;

通过 rados bench 命令:

# rados bench 60 write -p benchmark-rados-bench –no-cleanup -t 32 -block_size 4K
hints = 1
Maintaining 32 concurrent writes of 1048576 bytes to objects of size 1048576 for up to 60 seconds or 0 objects
Object prefix: benchmark_data_laptop-asus-k53sd_4090139
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)

48 32 1581 1549 32.2665 42 0.851067 0.979014
49 32 1608 1576 32.1589 27 0.863697 0.980051
50 32 1652 1620 32.3956 44 0.556496 0.983059
51 32 1686 1654 32.427 34 0.4329[……]

READ MORE

「CEPH」- 性能测试:RBD 性能测试

测试用例
针对 RBD 设备的性能测试,可以设置具体的性能指标。通过这些指标可以综合衡量 Ceph 集群中 RBD 的极限性能;
rbd bench-write

# rbd bench-write
rbd: bench-write is deprecated, use rbd bench –io-type write …
rbd: image name was not specified

rbd bench-write,该命令已废弃,建议使用 rbd bench 命令;
rbd bench
Ceph Documentation/rbd/bench

# rbd help bench
usage: rbd bench [–pool <pool>] [–namespace <namespace>] [–image <image>]
[–io-size <io-size>] [–io-threads <io-threads>]
[–io-total <io-total>] [–io-pattern <io-pattern>]
[–rw-mix-read <rw-mix-read>] –io-type <io-type>
<image-spec>

创建用于性能测试的磁盘:

rbd -p benchmark-rados-bench create benchmark-rbd-bench –size 20G
rbd -p benchmark-rados-bench info –image benchmark-rbd-bench
rbd -p benchmark-rados-bench map benchmark-rbd-bench
rbd showmapped

Bandwidth
Write

rbd bench –pool benchmark-rados-bench –image benchmark-rbd-bench \
–io-size 4M –io-threads 32 –io-total 10G –io-pattern seq –io-type write


308 2496 6.16315 25 MiB/s
312 2528 6.18411 25 MiB/s
elapsed: 316[……]

READ MORE

「CEPH」- 测试 S3 性能

# ./s3bench –accessKey=xxx –accessSecret=xxx \
–bucket=tb1 –endpoint=http://mon1.ceph1.example.com:8080,http://mon2.ceph1.example.com:8080,http://mon3.ceph1.example.com:8080 \
–numClients=3 –numSamples=10 –objectSize=838860800[……]

READ MORE

「CEPH」- 性能调优

问题描述
该笔记将记录:与 Ceph Cluster 相关的性能调优方法,以及相关问题的解决办法;
解决方案
存储系统的优化方法如下: 1)增加并行度; 2)降低服务时间;
硬件环境调优
操作系统调优
服务参数调优
针对参数调优配置,从如下方向入手: 1)服务端参数优化; 2)客户端参数优化;
内存分析
通常用于内存泄漏等等 BUG 排查的场景中;
ceph tell osd.0 heap start_profiler …(经过一段时间运行,或者手动产生一些负载) ceph tell osd.0 heap stats
# 导出文件,并通过google-perftools 查看 ceph tell osd.0 heap dump pprof –text /usr/bin/ceph-osd /var/log/ceph/osd.0.profile.001.heap[……]

READ MORE

「CEPH」- 性能总结

赶不上本地 SSD。本地 SSD(尤其是 NVMe)现在非常快,它们的延迟约为 0.05 毫秒。SDS 很难达到相同的结果,击败它几乎是不可能的。仅网络就吃掉了那些 0.05 毫秒……
在 SATA SSD 的集群中,实现了 0.14 毫秒的延迟(读取和写入),已经很快了;
我们的目标:Ceph 在同一硬件上实现 1 ms 的写入和 0.57ms 的读取。
Vitastor targets SSD and SSD+HDD clusters with at least 10 Gbit/s network, supports TCP and RDMA and may achieve 4 KB read and write latency as low as ~0.1 ms with proper hardware which is ~10 times faster than other popular SDS’s like Ceph or internal systems of public clouds.
参考文献
YourcmcWiki/Ceph performance[……]

READ MORE

「Ceph」- 维护管理:CRUSH map

修改 CRUSH Map 内容(改)
Ceph Documentation/CRUSH Maps
直接修改 CRUSH Map 内容

# 导出当前 CRUSH Map 内容(二进制)
ceph osd getcrushmap -o crushmap_compiled_file

# 导出结果转成文本文件
crushtool -d crushmap_compiled_file -o crushmap_decompiled_file

# 修改文件内容
vim crushmap_decompiled_file

# 生成新的 CRUSH Map 文件
crushtool -c crushmap_decompiled_file -o crushmap_compiled_file.new

# 测试文件内容
crushtool –test -i ./crushmap_compiled_file.new –num-rep 3 –rule 1 –show-mappings

# 应用新的 CRUSH Map 文件
ceph osd setcrushmap -i crushmap_compiled_file.new

# 针对 CRUSH Map 的编辑,是立即生效的。等待变更……
ceph status

# 重新查看新的集群映射图
ceph osd tree

通过命令修改 CRUSH Map 信息
命令行无法直接修改 CRUSH Map 的内容,但是部分针对 Ceph Cluster 的操作能够反馈到 CRUSH Map 中

# ceph osd crush remove osd.9

# ceph osd crush remove pc-amd64-100249[……]

READ MORE

「CEPH」- 运维管理:Monitor

增加 Monitor 实例(增)
WIP
删除 Monitor 实例(删)
WIP
修改 Monitor 实例(改)
WIP
查看 Monitor 实例(查)

# ceph mon stat

# ceph mon dump
epoch 3
fsid cf79beac-61eb-11ed-a2e0-080027d3c643
last_changed 2022-11-11T18:16:17.258788+0000
created 2022-11-11T18:08:21.534427+0000
min_mon_release 17 (quincy)
election_strategy: 1
0: [v2:192.168.200.1:3300/0,v1:192.168.200.1:6789/0] mon.ceph-node-01
1: [v2:192.168.200.2:3300/0,v1:192.168.200.2:6789/0] mon.ceph-node-02
2: [v2:192.168.200.3:3300/0,v1:192.168.200.3:6789/0] mon.ceph-node-03
dumped monmap epoch 3

// Client 将首选与 Leader Mon 建立连接,然后依照 rank 进行
# ceph quorum_status -f json-pretty[……]

READ MORE