「HTTPS」- HTTP over TLS

问题描述
HTTP 具有以下问题: 1)缺乏安全性:HTTP 不具备数据加密和身份验证的功能,因此传输的数据容易被黑客窃取和篡改,可能导致信息泄露和安全风险; 2)易受攻击:HTTP 传输数据时,黑客可以轻松地窃取数据包和会话 ID,从而伪造用户身份,登录用户账户,进行恶意操作和攻击; 3)用户隐私不受保护:HTTP 传输数据时,用户的个人信息和隐私数据容易被窃取和泄露,从而导致身份被盗用和财产损失;
解决方案
HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议),也常称为 HTTP over TLS(Hyper Text Transfer Protocol over Transport Layer Security)或 HTTP over SSL(Hyper Text Transfer Protocol over Secure Socket Layer),HTTP Secure,是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。HTTPS 通过 HTTP 进行通信,并使用 SSL/TLS 来加密数据;
HTTPS 证书是一种数字证书,用于保护网站和应用程序的安全性;
原理简述
它通过加密通信的方式来保护用户的隐私和敏感信息,如用户名、密码、信用卡号等;
HTTPS 证书通常由第三方认证机构(CA)颁发,证明了网站或应用程序的身份,确保用户与其交互的是合法的实体,并且保证数据传输的完整性和机密性;
HTTPS 在 HTTP 的基础下加入 SSL/TLS 层,是使用 SSL/TLS 加密的 HTTP 协议;

特性特征
HTTP 协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议 TLS 具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生;
数据传输安全性更高:HTTPS 使用 SSL/TLS 协议对数据进行加密,可以防止数据被窃听和篡改,确保数据传输的安全性; 用户隐私保护更好:HTTPS 使用 SSL/TLS 协议对数据进行加密,可以防止敏感信息被截获和泄露,保护用户的隐私; 增强网站可信度:HTTPS 使用 SSL/TLS 协议进行认证,可以证明网站的身份和合法性,增强网站的可信度; 支持 HTTP/2 协议:HTTPS 支持 HTTP/2 协议,可以提高网站的性能和速度,加快网页加载速度;
应用场景
网上购物:HTTPS 可以加密用户的信用卡信息和其他敏感信息,提高用户的支付安全性; 网上银行:HTTPS 可以保证用户的银行账户信息不会被盗取,提高用户的资金安全性; 社交网络:HTTPS 可以保护用户的个人信息不被黑客窃取,提高用户的隐私保护; 搜索引擎:HTTPS[……]

READ MORE

「HTTPS」- 概念术语

泛域名证书
Can You Create A Wildcard SSL Certificate For Two Levels? SSL Multilevel Subdomain Wildcard 泛域名证书是否对三级子域名生效呢?[……]

READ MORE

「HTTPS」- 模块交互

HTTPS 优化
美图HTTPS优化探索与实践 从无法开启 OCSP Stapling 说起
说明
TLS 将所有流量包含在不同类型的“记录(record)”中。第一个字节是十六进制字节 0x16=22,这意味着这是一个“握手(handshake)”记录。共有以下几种“记录”类型:

change_cipher_spec(20, 0x14)
alert(21, 0x15)
handshake(22, 0x16)
application_data(23, 0x17)
(255)

括号中的值分别为十进制和十六进制的编码;
“非对称加密”算法用于在握手过程中加密生成的密码;“对称加密算法”用于对真正传输的数据进行加密;“哈希算法”用于验证数据的完整性;[……]

READ MORE

「HTTP/HTTPS」- 常见问题处理

配置 HTTPS 证书
Configuring HTTPS servers
在腾讯云购买了域名,赠送了一年的SSL证书。其他的云平台应该也有赠送吧(瞎猜的)。我的博客主要是静态页面,压根就没有敏感的数据需要保护。但是,送的SSL证书不用干嘛,闲着也是闲着,跟一下风,正好也整理一下与HTTPS有关的内容,毕竟这里不用其他的地方还要用。所以,HTTPS还是很有必要学习一下的。
不同Web服务器配置方法
详细的配置方法和各种参数在各个Web服务器的官方手册里都有介绍。
腾讯云里也有现成的文档,参考「文档平台/SSL 证书/操作指南/证书安装指引」一文。涵盖的Web服务器有:Apache 2.x、Nginx、IIS、Tomcat这四种Web服务器。
具体的配置方法这里就不再赘述。
强制使用HTTPS访问
How to force or redirect to SSL in nginx?[……]

READ MORE

「TLS」- 与 IE 有关的问题

问题描述
在使用 Chrome、Firefox 浏览器时,能够正常访问 HTTPS 站点。在使用 IE 浏览器时,无法正常访问并产生如下提示:
然后,我们按照提示修改 IE 浏览器的 TLS 设置: 然后便可正常访问 HTTPS 站点(默认只勾选TLS 1.0选项),至此原因已经清晰。
问题原因
该站点部署在Kusernetes Cluster中,使用NGINX Ingress Controller暴露,但是NGINX Ingress Controller默认只支持TLS 1.2版本。在IE 11中,默认只启用TLS 1.0版本。因此出现TLS握手失败的情况,导致站点无法访问。
查看服务器支持哪些 SSL 协议版本:

openssl s_client -connect foo.example.com:443 -tls1 # TLSv1
openssl s_client -connect foo.example.com:443 -tls1_1 # TLSv1.1
openssl s_client -connect foo.example.com:443 -tls1_2 # TLSv1.2
openssl s_client -connect foo.example.com:443 -tls1_3 # TLSv1.3

# 有时可以使用NMAP进行扫描,但是有时候会出现无结果(原因未知)
nmap –script ssl-enum-ciphers -p 443 www.example.com

解决办法
调整 NGINX Ingress Controller 配置,修改名为nginx-configuration的ConfigMap资源,在data中应包含如下两行配置:

ssl-ciphers: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-A[……]

READ MORE

「HTTPS」- 使用 mitmproxy 调试

The web gui is very comfortable. You can use mitmproxy instead.
1)Run the proxy server $ mitmweb –listen-port 44700 Make sure that 44700 port is open in firewall. You can specify the IP of proxy with –listen-host flag. I.E. –listen-host 192.168.0.10 or try –listen-host 0.0.0.0 if can not access remotely.
2)Configure in the remote device the IP and port proxy.
3)Open browser in the remote device and go to http://mitm.it, is a local page, in a local DNS, that you can download and install the certs. If android, you must specify a pin lock screen.

mv mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates

4)Open web gui, by default in port 8081 in your browser: http://127.0.0.1:8081/#/flows
5)Enjoy networks intercepts.
参考文献
linux – How to configure mitmproxy to intercept https? – Server Fault[……]

READ MORE

「HTTPS」- unable to get local issuer certificate

问题描述
当我们更新网站证书之后,使用 Safari 正常,但是使用 curl 访问产生如下错误:

# curl https://xxxxx.example.com/
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

问题原因
HTTP Server Test Fails with SSL Error – ThousandEyes Documentation
解决方法
针对我们的问题,我们需要下载 RapidSSL TLS DV RSA Mixed SHA256 2020 CA-1 的 PEM 证书。
保存到 /usr/local/share/ca-certificates/extra/RapidSSLTLSDVRSAMixedSHA2562020CA-1.crt 文件
然后执行 update-ca-certificates 命令即可。
参考文献
DigiCert Root Certificates – Download & Test | DigiCert.com How to import CA root certificates on Linux and Windows[……]

READ MORE

「Certbot」- 基本概念

原理概述
Let’s Encrypt/How It Works
在使用Certbot申请证书时,我们会疑问…………我们可以为任意域名申请证书吗?我们应该能够想到,这是不可能的…………
本文将简述ACME协议工作原理,通过理解原理来找到它的适用场景。
分为两个步骤:(1)向CA证明域名所有权;(2)进行证书申请、续期、撤销动作。
域名所有权证明
首先客户端会生成密钥对,公钥发送给CA服务器,这等同于“创建帐号”。以后申请证书都与该公钥挂钩。
然后客户端会请求CA服务器,应该如何证明自己拥有域名。随后CA则会返回用于证明身份的方法,并且还会返回随机串,而客户端必须使用该随机字符串签名,以证明它控制密钥对。
之后CA服务器会进行检查,如果检查通过就表示该密钥可以用于特定域名管理。
证书操作过程
在密钥对认证通过之后,就可以使用该密钥对进行证书管理。
频率限制,Rate Limits
Rate Limits[……]

READ MORE

「Certbot」- 安装并申请 Let’s Encrypt 证书

问题描述
该笔记将记录:在 Linux 中,如何安装 Certbot 工具,并使用它申请证书,以及相关问题的处理。
解决方案
注意事项
该部分内容属于简述,详细内容请参考 certbot instructions 官方页面,依据提示操作即可。以下是操作大致流程: 1)选择站点服务器软件,以及操作系统发行版 2)查看是否满足条件 3)依据提示安装软件包 4)执行命令生成证书 5)访问站点以检查证书是否生效 6)添加定时任务以实现证书自动续期
on Debian GNU/Linux 10 (buster)

# 环境设置
apt update
apt install python3 python3-venv libaugeas0

# 安装 certbot 命令
python3 -m venv /srv/certbot/
/srv/certbot/bin/pip install –upgrade pip
/srv/certbot/bin/pip install certbot
ln -s /srv/certbot/bin/certbot /usr/bin/certbot

# 证书申请操作

# 定时任务,以完成证书自动续期
echo “0 0,12 * * * root /srv/certbot/bin/python -c ‘import random; import time; time.sleep(random.random() * 3600)’ && certbot renew -q –post-hook ‘systemctl reload nginx'” \
| sudo tee -a /etc/crontab > /dev/null

on CentOS 7.4 with PIP3.6
经验:这种东西就应该在虚拟环境里搞,但凡与应用有关且与系统管理无关的 Python 应用,都应该在虚拟环境里搞。要是在系统环境里搞,直接 yum install,pip2.7 install,等着吧,早晚有难受的时候。
我们并没有在虚拟环境里,因为系统没有使用 Python 3.6 环境,因此我们可以直接使用:

pip3.6 install certbot certbot-nginx certbot-dns-aliyun

Certbot 1.0.0 on CentOS 7.4

################################################################################
# 安装 Certbot 工具
###############################[……]

READ MORE

「Certbot」- The manual plugin is not working

问题描述
执行 certbot renew 产生如下错误:

# certbot renew
/usr/lib/python2.7/site-packages/pkg_resources/py2_warn.py:22: UserWarning: Setuptools will stop working on Python 2
************************************************************
You are running Setuptools on Python 2, which is no longer
supported and
>>> SETUPTOOLS WILL STOP WORKING <<<
in a subsequent release (no sooner than 2020-04-20).
Please ensure you are installing
Setuptools using pip 9.x or later or pin to `setuptools<45`
in your environment.
If you have done those things and are still encountering
this message, please comment in
https://github.com/pypa/setuptools/issues/1458
about the steps that led to this unsupported combination.
************************************************************
sys.version_info < (3,) and warnings.warn(pre + “*” * 60 + msg + “*” * 60)
Saving debug log to /var/log/letsencrypt/letsencrypt.log

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/harbor.example.com.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert is due for renewal, auto-renewing…
Could not cho[……]

READ MORE

「Certbot」- ImportError: ‘pyOpenSSL’ module missing required functionality

问题描述
执行 certbot renew 产生如下错误:

# certbot renew –renew-hook “docker-compose -f /usr/local/harbor/docker-compose.yml restart”
/usr/lib/python2.7/site-packages/pkg_resources/py2_warn.py:22: UserWarning: Setuptools will stop working on Python 2
************************************************************
You are running Setuptools on Python 2, which is no longer
supported and
>>> SETUPTOOLS WILL STOP WORKING <<<
in a subsequent release (no sooner than 2020-04-20).
Please ensure you are installing
Setuptools using pip 9.x or later or pin to `setuptools<45`
in your environment.
If you have done those things and are still encountering
this message, please comment in
https://github.com/pypa/setuptools/issues/1458
about the steps that led to this unsupported combination.
************************************************************
sys.version_info < (3,) and warnings.warn(pre + “*” * 60 + msg + “*” * 60)
Traceback (most recent call last):
File “/usr/bin/certbot”, line 9, in <module>
load_entry_point(‘certbot==1.0.0’, ‘console_scripts’, ‘certbot’)()
File “/usr/lib/python2.7/site-packages/pkg_resources/__init__.py”, line 490, in load_entry_poi[……]

READ MORE

「Certbot」- SERVFAIL looking up CAA for

问题描述

# certbot certonly -a certbot-dns-aliyun:dns-aliyun –certbot-dns-aliyun:dns-aliyun-credentials /etc/letsencrypt/dns-aliyun-credentials.ini -d harboar.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator certbot-dns-aliyun:dns-aliyun, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for harboar.example.com
Waiting 30 seconds for DNS changes to propagate
Waiting for verification…
Challenge failed for domain harboar.example.com
dns-01 challenge for harboar.example.com
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
– The following errors were reported by the server:

Domain: harboar.example.com
Type: dns
Detail: DNS problem: SERVFAIL looking up CAA for
harboar.example.com – the domain’s nameservers may be
malfunctioning

解决办法
在域名解析服务商添加此域名的 CAA 记录:

主机记录:<<对应域名>>
记录类型:CAA
记录的值:0 issue “letsencrypt.org”

然后保存并等待生效,再重新执行申请证书的命令。
参考文献
更新https报错的解决文案“DNSproblem:SERVFAILlookingupCAAforshop.xxx.com”[……]

READ MORE

「Certbot」- ocsp.int-x3.letsencrypt.org Read timed out

问题描述
执行命令 certbot renew 返回如下错误:

2020-06-23 16:46:12,224:DEBUG:certbot._internal.main:certbot version: 1.5.0
2020-06-23 16:46:12,226:DEBUG:certbot._internal.main:Arguments: []
2020-06-23 16:46:12,227:DEBUG:certbot._internal.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#certbot-dns-aliyun:dns-aliyun,PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2020-06-23 16:46:12,252:DEBUG:certbot._internal.log:Root logging level set at 20
2020-06-23 16:46:12,253:INFO:certbot._internal.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2020-06-23 16:46:12,305:DEBUG:certbot._internal.plugins.selection:Requested authenticator <certbot._internal.cli.cli_utils._Default object at 0x7fd6da256400> and installer <certbot._internal.cli.cli_utils._Default object at 0x7fd6da256400>
2020-06-23 16:46:12,356:DEBUG:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): ocsp.int-x3.letsencrypt.org:80
2020-06-23 16:46:22,369:INFO:certbot.ocsp:OCSP check failed for /etc/letsencrypt/archive/harbor.example.com/cert3.pem (are we offline?)
Traceback (most recent call last):
File “[……]

READ MORE

「P2P」- 加入 PT 站点(过程记录)

解决方案
第一步、加入 PT 站点
我们收到朋友邀请,获取到 m-team 站点访问权限;
清影PT CMCT-PT 葡萄 蝴蝶-HUDBT 皇后opencd TTG HD4FANS HDChina m-team HDU HDSKY hdcity hdtime CCFbits hdhome CHDBits ourbits gztown keepfrds 美盒子PT(影客) 北洋园PT 极视望江 joyhd 南洋PT U2动漫花园 资源简介自动生成工具(豆瓣) 发布种子用图床 新ptgen(发种子用) BYR IPT moecat 52pt TCCF filelist pterclub btschool
第二步、部署下载服务
我们使用 qBittorrent 客户端,以 Web 方式运行:

# https://hub.docker.com/r/linuxserver/qbittorrent

version: “2.1”
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
– PUID=1000
– PGID=1000
– TZ=Etc/UTC
– WEBUI_PORT=8080
volumes:
– /path/to/appdata/config:/config
– /path/to/downloads:/downloads
ports:
– 8080:8080
– 6881:6881
– 6881:6881/udp
restart: unless-stopped

第三步、登录 Web 界面
The webui is at <your-ip>:8080 and the default username/password is admin/adminadmin.
常见问题处理
Port 6881 is blacklisted.
Error (port 6881 is blacklisted) – Peer to peer – On the internet
问题描述:在 Tracker 中,提示 Port 6881 is blacklisted. 错误,并且无法下载;
原因分析:Many trackers disable port 6881 to avoid ISP scans and throttling.
解决方案:[……]

READ MORE

「RAID」- Redundant Array of Independent Disks(磁盘阵列)

问题描述
伯克利大学研究目的是反映当时 CPU 快速的性能。CPU 效能每年大约成长 30~50%,而硬磁机只能成长约 7%。研究小组希望能找出一种新的技术,在短期内,立即提升效能来平衡计算机的运算能力。在当时,柏克莱研究小组的主要研究目的是效能与成本;
解决方案
另外,研究小组也设计出容错、逻辑数据备份,而产生了 RAID 理论。研究初期,便宜(Inexpensive)的磁盘也是主要的重点,但后来发现,大量便宜磁盘组合并不能适用于现实的生产环境,后来 Inexpensive 被改为 independent,许多独立的磁盘组;
原理简述
磁盘阵列是使用多块独立磁盘组合成单块大容量磁盘组的技术。
特性特征
1)多种级别:磁盘阵列具有多种级别。级别不同,功能特性不同。有些级别(RAID0)可以提高读写速度,有些级别(RAID1)可以保护数据; 2)数据冗余:通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护; 3)数据存取速度块:通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度;
应用场景
在 Photoshop 中,渲染缓存数据可以使用 RAID0 级别。只求读写速度,不要求可靠性;
作为云操作系统的承载,可以使用 RAID1 级别。即使任意磁盘损坏,操作系统也能快速度启动;
在移动工作站中,可以使用 RAID5 级别。对数据的读取、写入性能要求高,同时要求一定的可靠性;
参考文献
Wikipedia/RAID 百度百科/磁盘阵列 云计算 RAID 的六种应用场景[……]

READ MORE

「RAID」- 基本概念及工作原理

问题描述
该笔记将记录:与 RAID 工作原理、技术细节相关;
Stripe, Stripe Unit, Stripe Size
Optimal RAID Stripe Size and filesystem Readahead for RAID-10?
写入 RAID 的数据会被分解为较小的数据块,然后再将数据块写入磁盘,这些数据块就是 Stripe Unit,其大小为 Stripe Size,横向的多个 Stripe Unit 组成 Stripe;

以 RAID 0 例:
Stripe Unit
在 RAID 0 中的 stripe unit 是指将数据分成的固定大小的块。每个块称为 stripe unit。在 RAID 0 中,数据被分成几个 stripe unit,并且这些 stripe unit 被分别存储在不同的磁盘上。
A1~A8 皆为 Stripe Unit,图示包含 8 个 Stripe Unit;
Stripe Size
Stripe size 是 RAID 0 中指定的每个 stripe unit 的大小。它是将数据分成 stripe unit 的基本单位,通常是以字节为单位进行度量。
A1~A8 的大小相同,其大小为 Stripe Size;
通常 Stripe Size 取值在 128KB~256KB 之间;
Stripe
多个 Stripe Unit 组成一个 Stripe;
A1+A2 为一个 Stripe,A3+A4 为一个 Stripe,所以图示包含 4 个 Stripe;
实现方式
磁盘阵列有三种实现方式:(1)外接式磁盘阵列柜;(2)内接式磁盘阵列卡;(3)软件模拟(软阵列)
外接式磁盘阵列柜
磁盘阵列柜是装配众多硬盘的外置磁盘阵列,常在大型服务器上使用。该设备具有多个接口,可以物理服务器直接相连,提供存储功能;
在机房中可以见到外接式磁盘阵列柜,它通常是单独的设备;
内接式磁盘阵列卡
在物理服务器(或工作站)中,通常具有内置磁盘阵列卡。它是独立的硬件模块,具有专用的处理单元;
软件模拟(软阵列)
常见于低成本或无法使用硬件的环境中,利用软件模拟,将众多磁盘组成磁盘阵列;
缺点: 1)该方式组成的磁盘阵列,性能会有所损失; 2)同时会消耗系统资源,不适合大数据流量的服务器; 3)支持有限的磁盘阵列级别;
优点: 1)成本低,无需购买额外硬件设备; 2)当然,既然是磁盘阵列,因此它也具备磁盘阵列的优点;
IT mode, HBA mode, RAID mode in (SAS) Controllers
What are IT mo[……]

READ MORE

「RAID」- 级别

内容简介
磁盘阵列通常具有多种界别,而界别也有分列:标准、嵌套(混合)、非标准。
本文将见到介绍这些磁盘阵列级别。
标准磁盘阵列级别
RAID 0
将众多磁盘组成单个大卷集。
优点: (1)提高整盘容量,空间完全利用; (2)提高性能和吞吐量;
RAID 1
数据镜像。
RAID 2
带海明码校验,使用一定的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息。
RAID 3
带奇偶校验码的并行传送,只能查错不能纠错。
RAID 4
带奇偶校验码的独立磁盘结构,它对数据的访问是按数据块进行的。
RAID 5
分布式奇偶校验的独立磁盘结构。
RAID 6
带两种分布存储的奇偶校验码独立磁盘结构
嵌套(混合)级别
结合两种或者多种磁盘阵列级别。比如RAID 10、RAID 01、RAID 30、RAID、50、RAID 60、RAID 100等等。
RAID 10
由于RAID 10是常见混合模式,因为我们简单介绍RAID 10级别: (1)先做“1”,再做“0”:(1)先使用“1”级别组建两个磁盘(攻击四块硬盘),(2)再使用这两块磁盘组件“0”级别阵列; (2)最少需要四块物理磁盘; (3)具有两块物理磁盘空间(浪费百分之五十); (4)存取速度是单块磁盘的两倍;
非标准变体级别
除了标准、混合级别外,还有非标准磁盘阵列级别、非磁盘阵列驱动架构。
由于我们并非磁盘阵列专家,并且磁盘阵列并不是我们的技术方向,因此不再深入展开,有兴趣可以参考维基百科。
非标准磁盘阵列级别
比如RAID 5E、RAID 5EE、RAID 6E、RAID 1E、RAID-Z等等。
非磁盘阵列驱动架构
比如JBOD、SPAN/BIG、MAID等等。
参考文献
Standard RAID levels Nested RAID levels Non-standard RAID levels Non-RAID drive architectures 百度百科/磁盘阵列[……]

READ MORE

「Linux」- 组建软件磁盘阵列(mdraid)

问题描述
通过软阵列技术,可以在没有阵列卡的情况下使用磁盘阵列技术。
该笔记将记录:与 RAID 有关,诸如 搭建磁盘软阵列的方法、配置、管理 等等;
前提条件
关闭磁盘缓存
磁盘通常具有内建缓存(缓冲),用于提高读写速度。如果在缓存中包含文件系统元数据,在断电之前没有写入磁盘,将出现文件系统损坏或数据丢失问题。
对于硬件磁盘阵列,它们附带 BBU 或 ZMCP 模块保护,防止在断电时数据丢失。而软阵列没有断电保护,因此最好关闭磁盘缓存。
但是也有例外,有些磁盘具有断电数据保护功能,比如 Intel 320 Series SSD 磁盘,会在电源故障时将数据写入 FLASH PROM 中,以防止丢失。在这种情况下,就无需关闭磁盘缓存。
软件磁盘阵列级别
LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, FAULTY, and CONTAINER
Superblock
该软件磁盘阵列会将所有与磁盘阵列有关的必要信息写入 superblock 中,该元信息的具体位置与元数据版本有关(可以通过命令 mdadm -E /dev/sdxN | grep “Version: “查看元数据版本)。
创建阵列(RAID 1)
创建阵列
执行命令创建磁盘阵列:

#!/bin/sh

mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sdb /dev/sdc

查看同步进度
查看初始化创建进度(两种方式):

#!/bin/sh

cat /proc/mdstat

mdadm -D /dev/md0

调整同步速度
当阵列创建完成后,可以立即使用,即使它出于同步状态,但是会影响同步速度。
可以使用如下方法调整同步速率:

#!/bin/sh

cat /proc/sys/dev/raid/speed_limit_max

cat /proc/sys/dev/raid/speed_limit_min

echo 100000 > /proc/sys/dev/raid/speed_limit_min

查看对齐信息
元数据保存在superblock中,使用mdadm -E /dev/sdxN命令查看,重点关注其中的Data Offset与Super Offset字段。
删除磁盘阵列

#!/bin/sh

mdadm –stop /dev/md0

# 清除在superblock中[……]

READ MORE

「Linux」- Intel RST RAID in Linux

在 Dell M6800 中,组建 RAID 5 阵列,并安装 Ubuntu 系统
问题描述
在 BIOS 中,我们设置 RAID 之后,我们从 Windows PE 启动(老毛桃),然后可以看到有 RAID 创建的逻辑磁盘。
当我们换成 Linux 发行版的 USB 安装盘 时,问题出现: 1)从启动盘进去系统后,看到的是多个单盘,而不是单个逻辑磁盘; 2)当我再次从 Windows PE 启动后,看到的依旧是单个逻辑磁盘; 3)当我们将发行版直接安装到 USB 中,并从中启动,此时看到的现象与(1) 相同;
原因分析
然后我在 RAID 设置界面,看到 Intel Rapid Storage Technology 标题,这是 仅有的 可用于 Google 搜索的 信息。
Intel Rapid Storage Technology
关于该技术的详细介绍可以参考 Intel® Rapid Storage Technology 页面: 1)该技术会释放固态硬盘的性能; 2)配合 Intel® Smart Response Technology 特性,提高文件和应用的访问速度;(支持 SSHD 磁盘) 3)支持 RAID 技术 4)快速数据恢复(Intel® Rapid Recover Technology)
该技术与磁盘有关,用于提高性能、响应、可靠性,具有以下特性: Intel® Smart Response Technology PCIe* storage support Dynamic storage accelerator Serial ATA RAID 0, 1, 5, and 10 support Power-up in standby (PUIS) support
所以说,我们的 RAID 是 IRST 提供的,我们得搜索 IRST 与 Linux 有关的问题(Google: Intel RST raid linux),于是得到下面这篇文章: Intel® Rapid Storage Technology (Intel® RST) in Linux*
Intel Rapid Storage Technology in Linux(学习笔记)
在阅读 Intel® Rapid Storage Technology (Intel® RST) in Linux* 之后,我们得知以下事实:
根据该文档的描述,他依旧是种软 RAID 技术。
Linux software RAID implementations 支持多种 RAID volume type,这其中就包括 Intel RST RAID volume type 。
使用 Intel RST RAID[……]

READ MORE

「RAID-CONTROLLER」 – 硬件阵列卡

电池模块
Q:阵列卡的电池多久换一次? A:商家说:“电池是自动充电的,只要开机,硬件正常,那么电池将自动充电”。我们觉得还是取决于具体的硬件,获取某些不支持自动充电,按理说应该都是支持的,不然就要关机更换电池,从设计上来说这并不合理;
Q:阵列卡的电池鼓包?是否该更换?是否会爆炸? A:商家说:“不会爆炸,能够正常使用。手里的电池都有不同程度的鼓包”;
阵列卡直通技术
关于华为服务器阵列卡直通的问题_weixin_34348805 的博客-CSDN 博客 Mixed, Passthru, HBA and RAID mode SAS or SATA IO Controller card support (53573)
“直通”就是不做 RAID,系统也能识别到,比如 DELL 服务器的 Non-raid 模式。华为阵列卡 RD130、RD430 都支持直通;
HBA, Host-bus Adapter
Host adapter – Wikipedia What is the relationship between RAID and HBA?
该术语主要用于「指代用于连接 SCSI、Fibre Channel、SATA 设备」的设备。
PERC H750 Adapter
Specification: Category: Dell Controller Sub-Category: RAID Controller Generation: PCI-Express Part Number: HYM6Y Device Type: Storage Controller (RAID) Plug-In Card Bus Type: PCIe x8 Interface: SATA 6Gb/s / SAS 12Gb/s Data Transfer Rate: 1.2GB/s Cache Memory: 8GB Port Qty: 8 Max Storage Device Qty: 50 RAID Level: RAID 0 1 5 6 10 50 60
For Dell: PowerEdge R440 PowerEdge R540 PowerEdge R640 PowerEdge R740 PowerEdge R740XD PowerEdge T440 PowerEdge T640
Slow SSD performance: Dell R530, PERC H730P, dell provided SSDs – Dell Community[……]

READ MORE

「RAID Controllers」- LSI 9260-8i

LSI 9260-8i,512M 缓存,电池,6Gb,SAS 阵列卡

支持RAID级别:0/1/5/6/10/50/60
单盘,4T 6T 8T 10T 12T
SATA 线,一分4连接
x8 lane PCI Express 2.0 Compliant,当然也能够插在 x16 接口上,只是接口带宽只有一半。
问题:配置阵列
megaraid bios_如何使用新磁盘在MegaRAID BIOS中设置RAID0
1)Enter the Physical View; Choose the corresponding disk and press ENTER: 2)Choose the Make Unconf Good status and click Go: 3)Enter Configuration Wizard interface from the Home. If you want to keep the original configuration, choose Add configuration: 4)Choose Manual Configuration: 5)Choose your disk on the left, and click Add to array. 6)It will add the disks into a new group on the right. Then click Accept DG: …
# 03/19/2021 在选择磁盘时,Backplane 会被默认选择,应该取消选择,否则会提示:

You cannot add Enclosures, Backplanes or Online drivers to the driver group. Please select only unconfigured good drivers.

问题:(FOREIGN) Slot: …
Unable to import foreign configuration / Deleted my MegaRAID array Lenovo ThinkSystem RAID management tools article landing page – Lenovo Support TW
针对其他阵列迁移过来的磁盘,其存在先前的配置,所以会被标为 `(FOREIGN) Slot: …`;
需要先清理其配置,然后才能使用,否则不能参与阵列的组建;
在 Controller Properties 中,进行配置的清理;
补充说明: 1)在我们固件版本中,需要通过鼠标才能完成操作,无法通过键盘进行选择;[……]

READ MORE

「RAID」- 杂记

#1 mdadm no arrays found in config file or automatically
今天早上开机报了这么个错误。我笔记本又没做RAID,你报哪们子错误,我直接把mdadm软件卸载了,然后重启测试,好了。 TODO RAID 了解常见的RAID级别。
#2 如何对「RAID 5」阵列扩容
-「RAID 5 – replace discs & expand size?」
TODO 对RAID 5阵列扩容[……]

READ MORE

「Software RAID」- 缓存设置

问题描述
在磁盘中,通常内置缓存模块,用于提高磁盘性能。写入磁盘的数据,可能并没有直接写入磁盘,而是写入该缓存中,以提高性能。
但是在电源故障时,缓存数据将会丢失。如果该缓存中包含为写入文件系统的元数据,在意外断电后,可能会导致文件系统的损坏。
本文将介绍如何配置磁盘缓存,以防止出现在电源故障时出现数据损坏的问题。
影响数据访问的缓存
在计算机中,有以下几种类型的缓存。
操作系统缓存
在现代操作系统中,使用“页缓存”。数据将首先写入该缓存,然后定期写入底层内存系统(可能是RAID控制器,或者直接写入磁盘)。
使用free命令,可以查看页缓存的内存大小(查看“buff/cache”列)。
如果出现电源故障,在页缓存中的数据将会丢失。
控制器(RAID Controller)缓存
这里“控制器”指“RAID控制器”。控制器缓存同样用于提高性能,但是在电源故障时,依旧会导致缓存数据丢失。除非在控制器中具有BBU或ZMCP特性。
BBU(BARTTERY BACKUP UNIT,备用电池单元),用于保护控制器缓存。在电源故障时,电池会持续供电,大约72小时,以防止缓存数据丢失。如果服务器在这期间启动,便可恢复缓存数据。另外,由于电池寿命有限,要注意电池的更换。
ZMCP(ZERO MAINTENANCE CACHE PROTECTION,零维护缓存保护),也用于保护缓存。它会将缓存数据写入闪存,以保护缓存数据。
磁盘缓存
磁盘通常也内置缓存,但是该缓存没有任何保护(某些磁盘可能有保护)。在电源故障时,将会出现数据丢失的情况。
在电源故障时,由缓存数据丢失带来的风险
最坏的情况:控制器电源保护模块故障,在电源故障时,数据将会丢失。
另外,我们组建软件磁盘阵列,没有缓存保护模块,在电源故障时,数据将会丢失。对于我们来说,没有太多选择,只能禁用磁盘缓存,但是这会降低磁盘性能。
下面我们将讨论避免风险的方法。
降低由缓存丢失带来的风险
在使用RAID Controller缓存时
如果使用BBU进行缓存保护,要注意电池的寿命,根据官方建议及时更换电池。并且要留意电池供电时长,如果超过该时长,数据依旧会丢失。
如果使用ZMCP进行缓存保护,缓存会被“永久”存储,通常不需要过度担心。
在使用磁盘缓存时
如果使用磁盘缓存(像我们的软件磁盘阵列),只能禁用磁盘缓存(毕竟缓存没有任何保)。虽然会带来性能损失,但是为了数据安全,这是值得的。
关于磁盘缓存设置,这里不再展开,可以参考 磁盘缓存 相关的内容。
参考文献
RAID Controller and Hard Disk Cache Settings[……]

READ MORE

「CEPH」- 学习指南

研究对象
Ceph
研究目标
1)应用:掌握 Ceph 的部署及运维,并能够使用 Ceph 作为存储的解决方案; 2)调优:熟悉其工作原理(源码级别),实现对 Ceph Cluster 的性能调优;
研究工具
信息采集
培训机构: 1)必然是我们的首选,但是我们正在参加其他培训,空余时间少,所以仅能在空闲时间阅读 Ceph 相关的学习资料;
书籍文章,以下书籍是我们针对网络检索搜索结果(11/09/2022):

Year
Name
Author
ISBN
Publisher
Description

 
 
 
 
 
 

2014
Building Large-Scale Storage Systems with Ceph
Sam Fineberg
 
 
 

2015
Ceph Cookbook
Vikhyat Umrao
 
 
 

2015
Learning Ceph
Anthony D’Atri
9781783985623
 
 

2016
Ceph Cookbook 中文版
芬兰 KaranSingh 卡兰。辛格
9787121290169
电子工业出版社
基于 Ceph Giant 版本 代码附件:https://github.com/ksingh7/ceph-cookbook

2016
(eb) Ceph 源码分析
 
9787111552079
 
 

2017
(eb) Ceph 分布式存储实战
Ceph 中国社区著
9787111553588
 
 

2017
Ceph Cookbook Second Edition
Vikhyat Umrao, Michael Hackett
978178839106[……]

READ MORE

「Ceph」- 概念术语

问题描述
我们将快速阅读官方文档,并摘录的关键信息(至少在我们看来是重要的内容),以形成对 Ceph 的整体认识;
该笔记将记录:与 Ceph 相关的概念术语,以形成对 Ceph 的基本认识,并针对特定概念进行深入地学习;
解决方案
该笔记是根据我们的理解所记录,仅是为了快速理解,详细内容建议阅读官方文档;
原理简述

OSD
类型:物理磁盘;
描述:OSD,Object Storage Device,是进行存储数据的物理磁盘;每个磁盘、分区都可以称为一个 OSD;
Ceph OSD(Ceph OSD, ceph-osd)
类型:守护进程
描述:负责管理 OSD(物理磁盘);与 OSD 为 1:1 关系;进行数据写入与读取;主要功能包括存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给 Ceph Monitor,例如 Ceph OSD 心跳等。一个 Ceph 的存储集群,至少需要两个 Ceph OSD 来实现 active+clean 健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整);
Ceph MON(Ceph Monitor, ceph-mon)
类型:守护进程
描述:Ceph Monitor,其负责维护集群状态,其他组件周期向 MON 汇报自身状态;主要功能是维护整个集群健康状态,提供一致性的决策,包含 Monitor map、OSD map、PG map、CRUSH map;Client 从 MON 得知集群状态;
Ceph MGR(Ceph Manager, ceph-mgr)
类型:守护进程
描述:Ceph Manager 与 Ceph MON 一起运行,为外部监控和管理系统提供额外的监控和接口。Ceph Manager 守护进程 (ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager 守护进程还托管基于 python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的 Ceph Dashboard 和 REST API。如果没有运行 Ceph MGR 进程,集群会给出健康警告,并且 ceph status 输出中的一些其他信息将丢失或过时(在启动 mgr 之前);
数量:高可用性通常至少需要 2 个 Ceph Mgr 进程;
Ceph MDS(Ceph Metadata Server, ceph-mds)
仅供 CephFS 使用,仅用于存储文件的元数据,并不存储实际的数据;Ceph MDS 主要保存的是 CephFS 的元数据(Ceph 的块存储和 Ceph 的对象存储都不需要[……]

READ MORE

「CEPH」- 概念术语:Monitor,ceph-mon,Ceph Monitor,Ceph Mon,Ceph MON

功能作用
提供 Cluster Map 信息
Ceph Mon 既不保存客户端业务数据,也不向客户端提供业务数据。所有集群节点均向 Ceph Mon 报告并共享有关其状态的每个更改信息,然后 Ceph Mon 将其保存在 Cluster Map 中。Ceph Mon 负责向客户端和集群的其他节点提供一直保持更新的 Cluster Map(包括集群拓扑);
Ceph Client 在读写数据(OSD)前,都需要和 Ceph Mon 通信,以获取最新的 Cluster Map 副本;
Ceph Client 只需连接某个 Ceph Mon 节点并检索当前的 Cluster Map,便能确定所有 Monitor 和 OSD 节点的位置;
Ceph Client 和其他节点,周期性地与 Ceph Mon 通信,来获取最新的 Cluster Map 副本,以得知整个集群的当前状态;
Authentication
Auth:Monitors are also responsible for managing authentication between daemons and clients.
高可用性
Ceph Cluster 可以在只有一个 Ceph Mon 的情形下运行,然而这会带来单点故障的风险。也就是说,如果该 Ceph Mon 停止工作,Ceph Client 就再也无法读、写数据;
要克服该风险,典型的 Ceph Cluster 必须组建 Ceph Mon 集群,这些运行 Ceph Mon 服务的节点被称为 Ceph Mon 节点;
节点数量
Monitor使用Paxos算法来保证分布式数据一致。Cluster Map一致性的保证需要集群的大多数Monitor存活,以建立仲裁集。例如3个Monitor中有2个存活,5个Monitor中有3个存活,6个Monitor中有4个存活等,这就是大多数Monitor存活原则。在生产环境中至少要运行3个Monitor,以确保高可用性。当集群规模增大的时候,考虑增加Monitor的存活个数到5个以上。
在 Ceph 集群中有多个 MON 时,MON 的数目必须是奇数,最小的数目是 1,最小的推荐数目是 3。因为 monitor 将运行于仲裁模式中,超过总数一半的 monitor 必须保持运行状态来避免脑裂。所有的 monitor 中,有一个将作为 leader 运行。当 leader 不工作时,其他 Monitor 节点被选举为 Leader 节点。
数据一致
分布式性算法
多个 monitor 使用 Paxos 算法来保证主 Cluster Map 的一致性,对Ceph集群所做的任何更新,都要由Paxos来保证Clus[……]

READ MORE

「Ceph」- 概念术语:Cluster Map

Ceph MON 负责监控整个集群的健康状态,以及维护集群成员关系状态(clustermembership state)、对等节点 (peer nodes) 的状态,集群的配置信息等。诸如:Ceph集群中有哪些进程状态为In。Ceph集群中的哪些进程已启动、正在运行或已关闭。放置组是处于活动状态、非活动状态、清洁状态还是其他某种状态。集群当前状态的其他详细信息,例如总存储空间或已使用的存储量。
Ceph MON 通过维护 Cluster Map 的主副本来实现这些功能;Ceph Cluster Map,Cluster Map:其为多个 map 的组合,是映射统称,其包括 Monitor map, OSD map, PG map, MDS map, CRUSH map;
当集群状态发生重大变化时(比如Ceph OSD掉线、放置组进入降级状态等),Cluster Map会更新,以反映集群的当前状态。
epoch:每种 map 都维护着其历史版本, 每个版本被称为一个 epoch,epoch 是一个单调递增的序列
Monitor Map
它包含 Monitor 节点端到端的信息,包括 1)Ceph Cluster ID、Monitor Node Hostname、IP-ADDR、Port 等; 2)它还保存自 monitor map 被创建以来的最新版本号,以及最后修改时间等;
Monitor间的相互发现是使用Monitor Map,而不是配置文件。Monitor Map存在于集群中,需要的时候可以执行命令导出,这样Ceph集群的管理信息就比存放在配置文件中更安全。例如在配置文件中指定Ceph启动端口时写错,导致Ceph不可用,而有了Monitor Map,即便是端口错误,Ceph集群的各个Monmap依旧在集群中,并不影响多Monitor间的通信。
执行 ceph mon dump 命令来查看其状态;
OSD Map
它保存一些常用的信息,包括: 1)Cluster ID 2)OSD Map 自创建以来的最新版本号(epoch)及其最后修改时间, 3)OSD 的信息,比如数量、状态、权重、最后清理间隔(last clean interval)以及 OSD 节点的信息; 4)存储池(Pool)相关的信息,包括 Pool Name、Pool ID、类型、副本级别(replication level)、PGP;
通过 ceph osd dump 命令,能够查看相关信息;
PG Map
它保存的信息包括: 1)PG 的版本、时间戳、OSD map 的最新版本号(epoch)、每个 PG 的 ID,其为 {pool-num}.{pg-id} 格式、对象数量、状态、状态时间戳; 2)容量已满[……]

READ MORE

「CEPH」- CRUSH Map

概述介绍
CRUSH Map 包含 OSD 列表,用于将设备聚合到物理位置的桶列表中,并告诉 CRUSH 如何在存储池中复制数据的规则列表。通过映射底层物理基础架构信息,CRUSH 可以规避相关硬件设备故障带来的风险。典型的故障来源包括物理上临近的资源,如共享的电源和共享的网络等。此信息可以编码到 Cluster Map;
CRUSH Algorithm 利用这些信息可以指定放置策略,可以在不同故障域之间分离对象副本,同时保证所需的数据均匀分布。这样,即便某个服务器或者某个机架故障也不会影响整个集群的正常使用,还能保证数据的安全。例如,为了解决并发故障,我们可能需要确保数据副本位于使用不同机架、电源组、控制器和 / 或物理位置的设备上;
部署大型数据集群时,我们应充分考虑自定义的 CRUSH Map,因为它将帮助你管理 Ceph 集群,提高性能并确保数据安全。例如,如果 OSD 出现故障,且你需要更换硬件时,CRUSH Map 可以帮助查找 OSD 发生故障的主机的物理数据中心、房间和机架等资源,快速定位坏盘所在位置。同样,CRUSH 可以帮助你更快地识别故障。例如,如果特定机架中的所有 OSD 同时下线,故障可能出在网络交换机 / 机架 / 网络交换机的电源上,而不是 OSD 本身。当与故障主机关联的放置组处于 degraded 状态时,CRUSH Map 还可以帮助识别 Ceph 存储数据的冗余副本的物理位置;
查看 CRUSH Map 的内容结构
它保存的信息包括:集群设备列表、bucket 列表、故障域(failure domain)分层结构、保存数据时用到的为故障域定义的规则(rules)等;
# ceph osd crush dump
其包含很多内容,主要为如下四部分:Device、Bucket Type、Bucket、Rule;
Device(设备)
ceph-osd 守护进程相对应的任何对象存储设备;
通常,Ceph 集群使用多种类型的存储设备,包括 HDD、SSD、NVMe 及其混合。我们将这些不同类型的存储设备称为 Device Class,以避免与 CRUSH Bucket 的 type 属性混淆(例如主机、机架)。由 SSD 支持的 OSD 比由传统机械磁盘支持的 OSD 运行快得多,因此其更适合大的工作负载。Ceph 可以为不同类型的数据集或工作负载创建池,并分配不同的 CRUSH 规则来控制这些池中数据的放置。因此,Device 是区分物理设备属性的,为将来存储具备特定属性的数据提供描述依据;
集群的所有设备列表,其位于 CRUSH Map 的开头部分:

# devices
device 0 osd.0 class ssd
device 1[……]

READ MORE

「CEPH」- 概念术语:OSD

概念区分:OSD vs. Ceph OSD
ceph-osd(Ceph OSD,Object Storage Daemon) OSD,Object Storage Device
Ceph OSD 与 OSD 是两个不同的术语: 2)OSD 表示 Object Storage Device,是物理或逻辑存储单元; 1)Ceph OSD 表示 Ceph Object Storage Daemon;
Ceph OSD 与 OSD 为 1:1 关系,所以在描述中通常将 OSD 与 Ceph OSD 合并称为”OSD“。在叙述时,我们也将使用该说法,除非特殊说明;
功能作用
数据存储
Ceph 如何将对象写入具体的 OSD 呢?这就是 Ceph 的对象存储做的事情。对象存储为 OSD 的原子块设备提供了一个底层接口。当 Client 读写数据时,Client 与对象存储接口进行交互。保存在集群中的对象具有唯一的标识符、对象数据、元数据。对象存储接口通过确保 Ceph 对象语义正确来保证对象一致性。对象存储接口是存储介质的底层接口,提供了性能统计信息;
Ceph OSD 是 Ceph 的对象存储守护进程,负责数据存储(读写)、复制、恢复、平衡。每个存储服务器(存储节点)运行一个或多个 Ceph OSD 进程,通常每个磁盘存储设备对应一个 Ceph OSD 进程。在 Ceph Cluster 中,当启动所有的 Ceph OSD 管理相应的磁盘时,都是在宿主机操作系统中启动一个进程;
任何读写操作请求,当 Client 从 Ceph Mon 获取 Cluster Map 后,Client 将直接与 Ceph OSD 进行 I/O 操作的交互,而不再需要 Ceph Mon 干预。这使得数据读写过程更为迅速(因为这些操作过程不像其他存储系统,它没有其他额外的层级数据处理);
数据存储方式: 1)早期使用 Filestore(其依赖于节点的文件系统,Ext4、XFS、Btrfs),即数据存储在文件系统中; 2)后面改用 Bluestore(直接接管块设备,以提高性能),即数据直接存储在块设备中; 3)其他数据存储方式,诸如 MemStore、K/V Store 等等,较少在生产中使用,所以这里暂不做讨论;
Ceph 使用存储介质有两种方法:OSD 日志盘;OSD 数据盘;
状态汇报
Ceph Mon 是个轻量级进程: 1)当 Ceph OSD 加入集群后,需要周期向 Ceph Mon 报告其状态。如果 Ceph Mon 定期主动检测 OSD 状态,当 Ceph 集群中存在很多 OSD 进程时,将使得 Ceph Mon 负载较高; 2)在 Ceph 的心跳设计中,Ceph OSD 还要检查其他守护进程[……]

READ MORE

「CEPH」- Bluestore

问题描述
Ceph 的数据被写了两次。第一次是将数据写入日志系统,第二次是将数据从日志系统写入文件系统进而落盘。这样就有了写放大,势必会影响性能。这也是 FileStore 的一个致命缺陷;
FileStore 对 SSD 的设计存在局限,尽管做了许多改进来提高 SSD 和 NVMe 存储支持性能,但仍然存在其他限制。例如,增加的 PG 要耗费巨大的计算和数据迁移成本,并且仍然存在双重写入损失;
FileStore 与块设备上的文件系统进行交互,具有性能损失;
解决方案
为了提高写性能,Ceph 解决 FileStore 写放大的问题,Ceph 开发 BlueStore 作为新的对象存储方案;
BlueStore 是 Ceph 的下一代存储实现。现有的存储设备包括固态驱动器 PCI Express 或 NVMe SSD;
BlueStore 的诞生是为了解决 FileStore 同时维护一套日志系统和基于文件系统写放大的问题,实现 FileStore 本身没有的对 SSD 的最优支持;
BlueStore 相比于 FileStore 主要做了两方面工作:(1)而 BlueStore 消除了文件系统层,直接使用原始块设备进行对象存储,操作裸设备,优化日志系统。(2)针对 SSD/NVMe 进行专门优化设计;
原理简述

RocksDB
存储 WAL、对象元数据、OMAP 数据以及分配器的元数据。RocksDB 是一种嵌入式高性能 K/V 存储,在闪存存储方面表现出色;
BlueFS
Bluestore 直接操作块设备(没有文件系统),而 RocksDB 无法直接写入原始磁盘设备,需要文件系统来持久化数据。所以设计 BlueFS 这个简化的文件系统,解决元数据、文件及磁盘的空间分配和管理问题,存储 RocksDB 日志和 sst 文件,主要作用是支持 RocksDB;
Ceph 对象的所有元数据的修改都记录在 BlueFS 的日志中。对于 BlueFS 而言,元数据持久保存在日志中。Ceph 挂载文件系统时,只需回放日志,就可将所有的元数据都加载到内存中。这就保证了内存文件系统数据持久化;
BlueStore 自己管理裸盘,因此需要有元数据来管理对象,对应的是 Onode。Onode 是常驻内存的数据结构,以 K/V 形式存储到 RocksDB 中,进而通过 BlueFS 的日志功能持久化数据;
HDD/SSD
物理块设备,存储实际的数据;
特征特征
数据完整
在使用 BlueStore 的 Ceph 集群中,Ceph 可以通过对 Write 操作进行循环冗余校验来确保数据完整,然后将 CRC 值存储在块数据库 RocksDB[……]

READ MORE