我在日本的存算分离方案(二)彻底摆脱 NFS,用 iSCSI + Multipath 打造 Debian 13 计算节点
我在日本的存算分离方案(二)彻底摆脱 NFS,用 iSCSI + Multipath 打造 Debian 13 计算节点

我在日本的存算分离方案(二)彻底摆脱 NFS,用 iSCSI + Multipath 打造 Debian 13 计算节点

  在去年秋冬天的时候我基本确定了我所有的硬件设施,时间来到今年上半年,由于电子设备的大幅上涨,再进行硬件级别的调整对我来说已经几乎是不可能的了,因此我当下主要的任务是最大程度利用好我现在有的所有硬件,尽可能通过系统级别的调优,优化我的工作流程。

  对于wrt的n100软路由和720+的nas存储 其实我基本上整体是比较满意的,问题主要出在计算端的12500T上面。在此之前,我尝试采用NFS挂在的方式去处理存算分离,但是时间一长就发现NFS在大量IO交换的情况下会出现频繁断联的局限性,痛定思痛,我决定彻底放弃群晖的一切服务,转而将其变为一个LUN服务器,通过iscsi挂载的方式,让12500T全权接管主机的存储。

  要彻底摆脱群晖的各项服务,首先就需要整理一下我当前使用了群晖的哪些服务 一年时间用下来 觉得使用频率比较高的服务仅有三个:群晖的DDNS域名解析服务;群晖的driveapp服务以及群晖的download station远程下载功能。曾经我也是份依赖于群晖的photostation不过自从使用了immich之后对于photo station的需求是逐步降低了。还有一个很重要的功能,他不是通过应用来实现的:群晖提供了一个很不错的web界面,通过这个web界面,我可以很快访问我的所有应用app。

  此外 我还整理了一下我所有的付费订阅app,因此新增了几个开源服务器端的docker需求 以减少我订阅的需求。

把他们列成表格的话 就是这样:

用名称解决方案
DSM桌面群晖自带Homarr导航页(docker)
Drive群晖自带nextcloud(docker)
Download station群晖自带未定
DDNS群晖自带duckDNS+NPM(docker)
openwebuidockerdocker
kiwixdockerdocker
wordpressdockerdocker
immichdockerdocker
alistdockerdocker
记账iNote(3600JPY/年)firefly(docker)
Mindnode(3500JPY/年)triliumnotes(docker)
homeassitant12500T虚拟机docker
windows虚12500T虚拟机天选+rust远程

  确定了这些东西以后,我们就可以进一步针对性的解决他们了

  系统的选择上面,我还是采用没有桌面环境的debian13作为服务器的系统,在稳定性上面无可挑剔。此外,因为我最开始学习的linux系统就是ubuntu系统,debian相比于arch系,对我来说认知负担也是更小的。

初始化debian

  首先是安装sudo 因为debian系统是没有sudo的,很不方便:

切换到 root 用户

  在终端直接输入以下命令并回车,然后输入你安装系统时设置的 root 密码

su 

2. 安装 sudo

  切换成功后(你会发现命令提示符从 $ 变成了 #),执行:

apt update
apt install -y sudo

3. 将你的用户添加到 sudo 组

  将常用用户名添加到 sudo 管理员组:

# 将 <your_username> 替换为你实际的登录用户名
/usr/sbin/usermod -aG sudo <your_username>

4. 使权限生效

  你需要 注销并重新登录,或者直接重启一下小主机,权限才会生效:

systemctl reboot

先验证一下 sudo 是否正常:

sudo -v

  如果上面没有报错,就可以进行下一步了

安装软件

  初始化完系统以后,更新源,更新软件完毕,就需要开始进行初始设置。debian相比于ubuntu,他给的预装软件比较少,所以有一些工具需要自己安装,因为我的iscsi硬盘用10TB那么大,所以需要一个能够在后台持续运转的指令工具screen

sudo apt install screen -y

  同时,还需要安装iscsi相关组件,由于我的720+是双1G网口,iscsi支持聚合,所以我为12500T的小主机配备了2.5G网卡

sudo apt install open-iscsi multipath-tools -y

配置 iSCSI 节点

修改 Initiator Name

  确保 Initiator 名称是唯一的(如果存储端已配置 ACL,请保持一致):

cat /etc/iscsi/initiatorname.iscsi

发现并登录目标

# 发现目标(通过任意一条链路即可)
sudo iscsiadm -m discovery -t sendtargets -p 192.168.X.X

# 登录所有发现的节点
sudo iscsiadm -m node --login

  登录成功后,使用 lsblk 应该会看到多个同样大小的磁盘设备,它们实际上是同一个逻辑卷的不同路径。

配置 Multipath

  多路径工具负责将这些重复的路径聚合成一个虚拟设备。

生成配置文件(/etc/multipath.conf)

  建议开启基本的负载均衡配置:

defaults {
    user_friendly_names yes
    find_multipaths yes
}

devices {
    device {
        vendor                   "SYNOLOGY"  # 根据你的存储品牌修改
        product                  "LUN"
        path_grouping_policy     multibus
        path_selector            "service-time 0"
        failback                 immediate
    }
}

重启服务

sudo systemctl restart multipath
sudo systemctl enable multipath

验证多路径状态

  使用以下命令查看路径聚合情况:

sudo multipath -ll

  看到下面的代码的话 就是成功了

mpatha (3600...) dm-0 SYNOLOGY,LUN size=1T features='0' hwhandler='0' wp=rw -+- policy='service-time 0' prio=1 status=active |- 1:0:0:0 sdb 8:16 active ready running - 2:0:0:0 sdc 8:32 active ready running

挂载与持久化

格式化设备

sudo mkfs.ext4 /dev/mapper/mpatha

持久化挂载 (/etc/fstab)

  由于 iSCSI 是网络设备,必须在挂载选项中添加 _netdev,防止系统在网络启动前尝试挂载导致卡死:

/dev/mapper/mpatha  /mnt/iscsi_data  ext4  defaults,_netdev  0  0

  10TB在2Gb的网络下格式化需要约16个小时左右,所以后面的内容之后再更新。