次元屋

技术 | 折腾 | 生活 | 日记


Explore Me
mhycy
次元屋
技术 | 折腾 | 生活 | 日记
9
7
8

原贴发布于V2EX, 讨论热烈...
/t/477885

前言

源公告贴地址在此: 关于客户“前沿数控”数据完整性受损的技术复盘

昨日在 "腾讯云的事,是不是很多人以为三副本就是备份,不应该丢数据,很靠谱...." #28 帖子中做出了一些个人的推断

甚至有点怀疑是不是有人手动的“ rm -rf ”然后后续业务直接写花了集群

今天的这份公告的信息算是印证了部分的猜测

正文

公告中提到的部分细节因经验不足产生疑问,希望各位大佬可拍砖指教


疑问 1

在14:05时,运维人员从仓库Ⅰ选择了一批云盘搬迁至新仓库Ⅱ,为了加速搬迁,手动关闭了迁移过程中的数据校验;

一个按照高可用、高可靠、数据可信的原则构建的存储架构
显然读取过程中的块级校验是必不可少的,否则数据的可信性无从谈起
(因为根本不知道读取出来的数据是否为异常数据)

校验过程必然需要消耗一定的资源
类似于ZFS, 需要大量的CPU资源进行读取过程中的校验
所以一般的实现方案会把存储与计算分离开来, 降低互相之间的影响

在公告中提到的一点 "为了加速搬迁"
为了实现读取过程中的校验,必然需要消耗一定的资源
独立的存储平台,自然也需要为了这个消耗的资源配备足量的运算资源
读取校验理应默认开启, 且对性能影响近乎无感 (增加了运算延迟)
而在这个公告中提到的"为了加速搬迁"...
那么....

  • 什么情况下关闭校验可以加速搬迁?

疑问 2

在20:27 搬迁完成之后,运维人员将客户的云盘访问切至仓库Ⅱ,同时为了释放空间,对仓库Ⅰ中的源数据发起了回收操作;

  • 什么情况下才能让运维人员那么着急回收空间释放资源?

疑问 3

在20:27 搬迁完成之后,运维人员将客户的云盘访问切至仓库Ⅱ
到20:30 监控发现仓库Ⅱ部分云盘出现IO异常。

  • 在线迁移为什么14:05分开始的数据迁移要到20:30分才发现IO异常?

(不了解腾讯云底层的实现架构, 学艺不精没想通, 望各位大佬回帖指教)

原贴发布于V2EX, 详细讨论见以下两个地址:
/t/477408 #28
/t/477439

前言

这本是帖子「腾讯云的事,是不是很多人以为三副本就是备份,不应该丢数据,很靠谱....」的一个回复
回复发出后自我感觉良好,遂稍作优化作为个人看法独立发帖,望各位大佬拍砖指正

正文

个人看法高可用的存储底层节点架构应符合以下准则
1、应为非同批次、非同固件的等容量、等架构磁盘组建硬件 /软件 RAID
2、应配合巡检定期校验数据是否可用,并尽早踢出异常磁盘
3、存储节点自身应具有完善的警告预警机制
4、三备份的集群架构应是基于此磁盘架构的冗余备份架构,无论是实时互备还是定时冷备

一般云 VPS 服务的自动迁移依赖独立的磁盘柜与计算集群实现
那么在腾讯的这个案例上,可能存在三台阵列柜、一套磁盘阵列网关与若干计算节点组成的计算机群
丢失数据的范围为一个集群(假定整个集群都出现静默错误,且真的存在三备份架构)

那么问题来了
1、为什么现在只有一家公司发声?
2、如果真的是三备份架构,为什么会三套存储设备同时故障?
3、为何阵列损坏后没有任何警告、通知直接就是静默错误?

假设现在的信息都为真实信息,没有人为修饰掩盖
有以下推断:
1、不存在三套设备互备的磁盘架构
2、这个软件 BUG 不在硬盘而在软件分布式上面
3、假设 2 推断为假,软件 BUG 位于磁盘,则阵列架设没有严格遵守高可用原则进行设计
4、假设 2 推断为真,那么更有可能的情况是 BUG 位于阵列卡,数据位于单一母机,丢失范围为一台母机
5、假设 2 推断为真,数据存在集群上面,且 BUG 位于自研的分布式存储平台上,那么...不多说了

说实在,怎么想都想不出来为什么一个成熟的云平台能搞到数据全丢
单个磁盘的静默损坏对于磁盘阵列的构建是必然需要考虑的问题
ZFS 的设计就是为了抵御这类事情的发生
甚至有点怀疑是不是有人手动 /某个自动化 BUG 的 "rm -rf" 了特定的虚拟机磁盘文件然后后续业务直接写花了集群
这应该是可能性更高的情况

补充看法

也许很多人认为云服务就应该是绝对可靠,毕竟有许多业界大佬进行维护与开发。
这想法没错,但是考虑到可能存在的风险,以及云服务商并不会提供底层架构的具体细节
理应对云服务的安全性、可靠性有所保留,自行备份 /同步各项业务数据
这是对业务的负责,也是一个技术人员专业性的表现。

在现有的商用家用宽带环境下,在众多开源隧道方案的加持下(重点推荐 ZeroTier )
实时同步数据库数据到本地进行持续热备应不是难事(二进制日志远程写入)
而业务数据,定期同步到别的地方所需要的磁盘空间以及带宽消耗也是可以接受的
对公司的投入也仅仅是一个本地的磁盘柜以及相应的带宽投入而已。
而下行带宽,显然是相当的便宜

作为商业数据,数万元的本地硬件投入,采购二手平台甚至可以做到万元级投入
这应该是可以接受的吧?

前言

记录让 Win10 能好好使用而设置的安装后优化项目,不定期更新

安装过程中注意事项

  • 安装完毕后的用户密码留空,并通过计算机管理首先打开 Administrator 用户权限
  • 关闭 Cortana 的菜单栏图标,以及人脉图标
  • Cortana的搜索功能可通过 StartIsBac 找回

系统选项

  • 此电脑 -> 属性

    • 重配虚拟内存
    • 关闭系统保护
    • 开启远程桌面

控制面板

  • 关闭防火墙 控制面板\系统和安全\Windows Defender 防火墙\
  • 调整休眠选项 控制面板\系统和安全\电源选项
  • 调整网卡参数 控制面板\网络和 Internet\网络和共享中心
  • 调整安全维护通知信息 控制面板\系统和安全\安全和维护
  • 启用部分 Windows 功能 控制面板\程序

    • .Net Framework 3.5
    • SMB 1.0/CIFS 文件共享支持

设置

  • 系统

    • 通知和操作

      • 关闭 “获取来自应用和其他发送者的通知”
    • 多任务处理

      • 虚拟桌面按需调整
  • 设备

    • 蓝牙和其他设备

      • 通过按流量计费的连接下载
    • 自动播放

      • 在所有媒体设备上使用自动播放
  • 网络和Internet

    • “更改连接属性” 所有更新结束后改成付费模式
  • 个性化

    • 主题

      • 桌面图标设置” 添加桌面图标
    • 字体

      • 下载所有语言的字体
    • 任务栏

      • 使用小任务栏按钮
      • 通知区域

        • 打开或关闭系统图标
  • 应用和功能

    • 卸载无用软件
    • “管理可选功能” 添加部分必须软件包
    • “默认应用” 修改默认应用
  • 时间和语言

    • 区域和语言

      • 安装日语输入法后在此更新支持支持并重排输入法顺序
  • 更新和安全

    • 安装完毕后择期检查 Windows 更新,并安装,以更新驱动以及安全更新
    • 通过开发者选项安装开发者软件包

组策略

  • 计算机配置

    • 管理模板

      • Windows 组件

        • Windows Defender 防病毒程序

          • 关闭 Windows Defender 防病毒程序
        • Windows 更新

          • 不要在“关闭Windows”对话框显示“安装更新并关机”
          • 配置自动更新 (禁用)
        • 推送安装

          • 关闭推送安装服务
        • 应用程序兼容性

          • 关闭程序兼容性助理
        • 应用商店

          • 关闭 Win8 计算机上的自动下载更新
          • 关闭自动下载和安装更新
        • 云内容

          • 不显示 Windows 使用技巧
          • 关闭 Microsoft 用户体验
      • 网络

        • Lanman 工作站

          • 启用不安全的来宾登录
      • 系统

        • Device Guard

          • 打开基于虚拟化安全 (禁用)
        • 凭据分配

          • 加密 Oracle 修正 (已启用, 易受攻击)
  • 用户配置

    • 管理模板

      • Windows 组件

        • 应用程序兼容性

          • 关闭程序兼容性助理
      • 系统

        • Windows 自动更新 (禁用)

注册表

  • 修复传统图片浏览器文件关联
  • Windows Photo Viewer 支持查看设备直出的Raw文件, 需要 MicrosoftCameraCodecPack 支持, 并手动修复关联(大概)

    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USER\Software\Classes\.jpg]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.jpeg]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.gif]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.png]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.bmp]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.tiff]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.ico]
    @="PhotoViewer.FileAssoc.Tiff"
    [HKEY_CURRENT_USER\Software\Classes\.arw]
    @="PhotoViewer.FileAssoc.Tiff"
  • 优化系统选项

    Windows Registry Editor Version 5.00
    
    ; 关闭 Windows 应用推送
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CloudContent]
    "DisableWindowsConsumerFeatures"=dword:00000001
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager]
    "SilentInstalledAppsEnabled"=dword:00000000
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]
    "EnableActivityFeed"=dword:00000000
    
    ; 修复共享文件夹来宾权限问题
    [HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
    "AllowInsecureGuestAuth"=dword:00000001

PowerShell

  • Win10垃圾应用批量卸载 (复制粘贴到 PowerShell 运行, 注意权限)

    Get-AppxPackage *OneNote* | Remove-AppxPackage
    Get-AppxPackage *camera* | Remove-AppxPackage
    Get-AppxPackage *communi* | Remove-AppxPackage
    Get-AppxPackage *bing* | Remove-AppxPackage
    Get-AppxPackage *zune* | Remove-AppxPackage
    Get-AppxPackage *people* | Remove-AppxPackage
    Get-AppxPackage *phone* | Remove-AppxPackage
    Get-AppxPackage *photo* | Remove-AppxPackage
    Get-AppxPackage *solit* | Remove-AppxPackage
    Get-AppxPackage *soundrec* | Remove-AppxPackage
    Get-AppxPackage *xbox* | Remove-AppxPackage
    Get-AppxPackage *sticky* | Remove-AppxPackage
    Get-AppxPackage *skype* | Remove-AppxPackage
    Get-AppxPackage *3DViewer* | Remove-AppxPackage
    Get-AppxPackage *Print3D* | Remove-AppxPackage
    
    Get-AppxPackage *PowerBIforWindows* | Remove-AppxPackage
    Get-AppxPackage *Actipro* | Remove-AppxPackage
    Get-AppxPackage *Eclipse* | Remove-AppxPackage
    Get-AppxPackage *Pandora* | Remove-AppxPackage
    Get-AppxPackage *AdobePhotoshop* | Remove-AppxPackage
    Get-AppxPackage *Duolingo* | Remove-AppxPackage
    Get-AppxPackage *NetworkSpeedTest* | Remove-AppxPackage
    
    Get-AppxPackage *3DBuilder* | Remove-AppxPackage
    Get-AppxPackage *WindowsAlarms* | Remove-AppxPackage
    Get-AppxPackage *DesktopAppInstaller* | Remove-AppxPackage
    Get-AppxPackage *WindowsCalculator* | Remove-AppxPackage
    Get-AppxPackage *WindowsCamera* | Remove-AppxPackage
    Get-AppxPackage *WindowsFeedbackHub* | Remove-AppxPackage
    Get-AppxPackage *GetHelp* | Remove-AppxPackage
    Get-AppxPackage *OfficeHub* | Remove-AppxPackage
    Get-AppxPackage *SkypeApp* | Remove-AppxPackage
    Get-AppxPackage *Getstarted* | Remove-AppxPackage
    Get-AppxPackage *ZuneMusic* | Remove-AppxPackage
    Get-AppxPackage *communicationsapps* | Remove-AppxPackage
    Get-AppxPackage *WindowsMaps* | Remove-AppxPackage
    Get-AppxPackage *Messaging* | Remove-AppxPackage
    Get-AppxPackage *Microsoft3DViewer* | Remove-AppxPackage
    Get-AppxPackage *ZuneVideo* | Remove-AppxPackage
    Get-AppxPackage *BingNews* | Remove-AppxPackage
    Get-AppxPackage *OneNote* | Remove-AppxPackage
    Get-AppxPackage *MSPaint* | Remove-AppxPackage
    Get-AppxPackage *People* | Remove-AppxPackage
    Get-AppxPackage *Photos* | Remove-AppxPackage
    Get-AppxPackage *Print3D* | Remove-AppxPackage
    Get-AppxPackage *SolitaireCollection* | Remove-AppxPackage
    Get-AppxPackage *MicrosoftStickyNotes* | Remove-AppxPackage
    Get-AppxPackage *WindowsStore* | Remove-AppxPackage
    Get-AppxPackage *Sway* | Remove-AppxPackage
    Get-AppxPackage *SoundRecorder* | Remove-AppxPackage
    Get-AppxPackage *Wallet* | Remove-AppxPackage
    Get-AppxPackage *BingWeather* | Remove-AppxPackage
    Get-AppxPackage *XboxApp* | Remove-AppxPackage
    Get-AppxPackage *OneConnect* | Remove-AppxPackage
    Get-AppxPackage *StorePurchaseApp* | Remove-AppxPackage

Github 地址: hardware-gen8-pwm-convert

前言

HP MicroServer Gen8 虽好, 但风扇略吵
网络上的各路大神给出了一堆方案, 有屏蔽上温控器的, 有加电阻的
还有看起来最靠谱的直接替换
就像这个贴 无需外部电路,将HP Gen8替换为普通PWM风扇,并保持自动调速

电源供电, PWM 引脚作为地线, 这样就能控制风扇转速了~
看起来很美好对吧?能把风扇控制在一个极低的转速, 但是...错了...

开始实验的时候就会发现, 这个接线方式会使得风扇维持在一个不可思议的低转速状态
风扇的实际转速和面板的转速百分比完全不在一个等级上面
同时测量电源对PWM信号引脚的等效电压会发现等效电压的增减与面板一致....

研究过相关文档以及详细的测量对比后会发现这其实是利用了GEN8特殊的PWM信号定义
以及其漏极开路输出的特性所达到的控制效果

把PWM信号当成地线使用, 随着PWM占空比增加, 等效电压降低, 风扇转速降低

为什么说这是 Gen8 特殊的PWM定义呢?
网络上找到的4-pin风扇PWM信号定义文档可以给出答案
(点击下载)源地址(4_wire_pwm_spec.pdf)
(点击下载)本站镜像(4_wire_pwm_spec.pdf)

按照标准的定义, CPU风扇的PWM信号理应随着PWM等效电压的增加而加速, 随着等效电压的降低而减速
Gen8 的PWM信号刚好相反而行, 随着等效电压的增加而减速, 显然是个反相定义的信号

这也是为什么论坛上没有直接替换案例的缘由
仅仅屏蔽RD引脚, 把风扇接入, 会发现开机过程中风扇会在不可思议的低速, 然后不断增加

那有没有完美的方案呢?
既可以使用系统的PWM信源, 又可以替换成自己的风扇, 还不需要改动 Gen8 的风扇接口 (Gen8的风扇端口非常特殊)

造个驱动板就好了~

这就是本文的来历

需求

  • 无损的引出 Gen8 的风扇端口不造成任何破坏
  • 把 Gen8 的 PWM 变成正常的信号, 且合规
  • 欺骗 RD(Rotation Detect) 引脚
  • 自带多电压输出[12V, 5V]以支持芯片组散热用的迷你风扇 (目标改成水冷风压不够被动散热的)

坑点与实现

  • 需要找到 Gen8 风扇所使用的插针标准, 最终找到这个: PHD2.0-2*3
  • 需要符合漏极开路输出的信号反相器, 寻找一个需要电平兼容以及漏极开路输出的与非门, 74系列走起~ CD74HCT03M
  • 多电压输出, 原本的输入是12V, 那么只需要实现 5V的输出即可...考虑到电流, DC-DC电路实现

原理图-电源
忘记从哪里抄回来的DC-DC电路, 是个很经典的设计
感谢 V2EX 大佬 @zhujinliang 提醒 源DC-DC设计是 kis3r33s
原理图-电源.png

原理图-逻辑与输出
原理图-逻辑与输出.png

PCB走线
圆润可靠的走线~
PCB走线.png

PCB渲染图
真的好看!!!
PCB渲染图.png

实际成品
这嘉立创又把字刷歪了!!!!还断线!!!!说好的数字化印刷呢?
成品图.JPG

Github 地址: hardware-gen8-sas-convert

前言

HP MicroServer Gen8 是个非常强大的微型服务器
在充分改造/升级之后可以体积、噪声、性能、价格均可兼顾
是个性价比极高的家用、办公室服务器选择 ( 商用不能上架 )

只是....这个服务器的引导配置不太人性化
Gen8 只有USB接口、内部SD接口、以及SAS-1接口具有系统引导能力
因为按照原始的设计, Gen8 的硬盘笼是用于整体组阵后提供服务的
所以, 无论是 SD 引导还是 USB 引导都符合最初的设计,所以并没有系统引导方面的烦恼

然而现在是家用....
希望系统性能最大化追求性价比的家用~
而且, Gen8 的 SAS-1、SAS-2 是可以跑到 6g 带宽的, SATA-5 并没有这个能力

于是乎问题就这么来了~

如何给这个服务器增加一个SSD作为系统盘
不但能跑在最高带宽下还能让硬盘笼满配HDD呢?

网络上的大神们有各种办法~
但...大多数都选择插一个U盘进行引导 ( 然而可用带宽是 3g )
( 家里的 HP ML10v2 选用了这个方案 )
显然...不够优雅~

一个偶然的机会在淘宝上看到了一个产品~

HP/惠普 MicroServer Gen8 SAS1外置系统启动Diy MiniSAS转4Sata
把所有端口顺序往前挪一位, SAS-1 移出来作为外部的 SATA-5 使用
并且利用硬盘笼背板的螺丝进行固定

这真的是个创意极好的产品~
然而...到手后装上才发现, 和预想中的水冷散热排有所冲突....

于是本文的项目就这么来了....
按照自己的需求重新造一个转接板

工程目标

  • 把所有端口顺序往前挪一位, SAS-1 移出来作为外部的 SATA-5 使用
  • 不与水冷冲突, 尽可能的扁平化布线, 给水冷留出足够的空间
  • 固定方式依旧使用硬盘背板的螺丝位
  • 尽可能少的走线

工程坑点

  • SAS 线缆全部都是交叉线 ( 于是乎需要好好判断输入输出线序 )
  • MiniSAS 母座是贴片座且有一部分引脚位于母座正下方, 风枪难以焊接
  • 阻抗合规、射频合规的布线会非常拥挤 (至少看上去合规)

参考文档

(点击下载)sas1r10.pdf [ Serial Attached SCSI - 1.1 (SAS-1.1) ] 重点
(点击下载)sas3r06.pdf [ Serial Attached SCSI - 3 (SAS-3) ] (这份工程中用不上)

工程图片

原理图
原理图.png

PCB走线
线路完全阻抗匹配, 蛇形走线, 差分线长合规, 线路没有绕圈, 没有信号没走过孔, 算是满意了
PCB走线.png

渲染图
右上角B格满满的产品说明, 估计做成黑色更好~
渲染图.png

最终成品
PS. 然而~嘉立创那垃圾刷字字体没刷全!!!!
5片, 返工多次, 换了一次低温锡膏, 成功两片...
以后干这活肯定要找个贴片炉, BGA拆焊台也成....
成本...各种原料买了200+
成品一批.JPG