阿崔 发表于 2018-2-25 03:42

编辑中 把折腾进行到底——我的高性能家用NAS搭建之二:软...

本帖最后由 阿崔 于 2018-3-27 16:16 编辑

上篇

4 软件
4.1 前言
这篇文章作为硬件篇的后续,本来应该在去年完成,但是由于作者懒癌晚期,就算看到之前有坛友从自组服务器变成给群晖做贡献,依然怀着内疚之情拖到今年春节才算完成。当然了这期间系统也有了不少升级,性能和易用性都得到了不小的提升。


4.2 设计
这个在前文中已经介绍过了,在新系统中随着后续应用,一个是因为网络性能,使用proxmox替换掉了ESXi,iSCSI的4k性能提升了大约30%。另一个是发现了可以和OnlyOffice整合的Nextcloud。整体系统架构如下。



4.3 网络
从安全和易用性的角度,把家中的网络分为几大部分:

[*]台式机
[*]智能家居
[*]网络设备管理
[*]无线设备
[*]访客网络
[*]打印机
[*]iSCSI存储网络
结构如下:




4.4 虚拟机系统
4.4.1 简介
使用基于KVM的Proxmox VE。相比同样免费的VMWare的ESXi,尽管在易用性上有所缺失,但是在网络性能和功能上都要好于ESXi。


4.4.2 安装
从 https://www.proxmox.com/en/downloads/category/iso-images-pve 下载PVE的ISO,当前最新版本为5.1。
如果使用服务器主板,可以用管理界面自带的虚拟光驱远程安装。

首先选择第一项安装Proxmox VE。


然后选择系统安装位置。默认会把对应设备按ext4+LVM进行分区,如果需要其他选项(比如ZFS的Raid 1),请点击options按钮进行设置。


之后会让你选择所在地区、系统时区和键盘设置。


再下面是设置root密码和邮件地址。配置正确之后系统会向对应邮箱发送一些重要的事件提醒。


最后是管理网络设置,这里是未来Proxmox VE Web管理界面的地址,推荐和常用网络分开。



全部完成后等待安装完成重启。


然后前往之前配置的地址所在的Web管理界面进行后续配置(端口8006)


登录后会提示没有订阅,不用管



4.4.3 网络配置
根据我使用的主板和交换机,我使用LACP聚合NAS上的两个千兆端口来同时提供Web管理界面和FreeNAS上的存储以及Ubuntu Server提供的其他服务。万兆端口将直接把PCI设备Passthrough给FreeNAS,用于提供iSCSI服务。Ubuntu Server通过本地桥接访问FreeNAS。网络结构如下。Proxmox VE提供了Linux桥接和Open vSwitch两种方式配置网络。考虑到配置的方便性和扩展性,这里我使用Open vSwitch方式配置网络。


[*]安装Open vSwitch
Debian自带的Open vSwitch据说基本不可用,所以我们需要使用Proxmox提供的版本。点击Shell(JS)进入Proxmox VE的命令行。依次执行如下命令:

[*]wget -q -O- 'http://download.proxmox.com/debian/pve/dists/stretch/proxmox-ve-release-5.x.gpg' | apt-key add -
[*]echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
[*]apt update
[*]apt install -y openvswitch-switch
[*]创建网络

首先删除默认的 vmbr0


建立两个OVS Bridge,一个 vmbr0 用于聚合的千兆端口,另外一个 vmbr1 用于同一物理节点下不同系统间的通信。除了名字的所有选项均先设为空。


然后建立一个OVS IntPort,用于管理端口的vlan tag为50的 vlan50 ,对应OVS Bridge为 vmbr0 ,地址为管理端口所需地址。


之后再建立一个OVS IntPort,名字为 internal ,对应OVS Bridge为 vmbr1 ,用于该物理节点下不同系统间通信,地址和其他网络不重复即可。


最后建立一个OVS Bond,名字为 bond0 ,聚合模式为 LACP(balance-slb) ,slaves一项填两个千兆网口对应的名字,中间用空格分开,这里为 ens18 ens19 ,对应OVS Bridge为 vmbr0 。


然后修改DNS设置,把DNS服务器的IP地址填对。重启物理机之后使用刚才配置的管理地址访问Web管理界面。



4.4.4 开启PCI Passthrough

[*]修改GRUB设置
先执行
nano /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 一行,改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
如果是AMD CPU,改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" 然后根据下方提示按 Ctrl+x 再按 y 键和回车键存盘并退出。


之后执行
update-grub


[*]增加需要的内核模块

执行
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules然后重启即可

4.4.5 添加磁盘



[*]通过节点的磁盘一项找到对应的设备名称,这里是 /dev/sdb 如果是NVMe设备,那么就是类似 /dev/nvme0n1 这种名字;

[*]打开节点的命令行窗口;
[*]执行 sgdisk -N 1 /dev/sdb
或者 sgdisk -N 1 /dev/nvme0n1
在新磁盘中创建分区;
[*]执行 pvcreate -y -ff /dev/sdb1
或者
pvcreate -y -ff /dev/nvme0n1p1
创建LVM物理卷;
[*]执行 vgcreate vmcache /dev/sdb1
或者 vgcreate vmcache /dev/nvme0n1p1
创建名为 vmcache 的LVM卷分组;
[*]执行
lvcreate -L 400G -T -n cachepool vmcache
创建名为 cachepool 的大小为 400G 的LVM-thin存储池;
[*]执行 pvesm add lvmthin cache-lvm --thinpool cachepool --vgname vmcache --content images,rootdir
创建名为 cache-lvm 的,用于存放虚拟机镜像和LXC容器的存储空间。





4.4.6 UPS配置
这里以APC支持USB通信的UPS为例,其他型号配置请参考NUT的文档。

[*]执行 lsusb
确认UPS已经通过USB连接上;
[*]执行 apt install -y nut
安装NUT;
[*]执行nano /etc/nut/ups.conf在最后添加:
driver = usbhid-ups
port = auto


之后按下方提示退出并保存。执行
upsdrvctl start
,如果 ups.conf 没有问题的话,会显示驱动版本号并回到命令提示符。如果反复显示 Driver failed to start 那么就是配置有问题或者UPS不支持,按 Ctrl+c 终止执行。

[*]执行 nano /etc/nut/upsd.conf
找到 # LISTEN 127.0.0.1 3493 这样一行,去掉前面的 # ,然后按下方提示退出并保存;
[*]执行
nano /etc/nut/upsd.users
在最后添加:

password = blahblah
upsmon master

之后按下方提示退出并保存;
[*]执行 nano /etc/nut/upsmon.conf
找到 # RUN_AS_USER nut 删除前面的 # 。找到 # MONITOR myups@localhost 1 upsmon pass master(or slave) 在下面一行添加MONITOR mainups@localhost 1 upsmon blahblah master 。然后按下方提示退出并保存。




[*]执行 nano /etc/nut/nut.conf

把 MODE=none 替换为 MODE=standalone 。然后按下方提示退出并保存。
[*]执行
systemctl start nut-server ;
[*]执行 upsc mainups@localhost
测试

如果 ups.conf 和 upsd.conf 都没问题就会显示相应的UPS信息,否则请修改配置文件。



4.5 操作系统
4.5.1 FreeNAS

[*]安装
首先从 http://www.freenas.org/download 下载最新版的FreeNAS,目前最新版是11.1-U2。
然后在虚拟机环境的Web管理界面找到名为 local 的存储,点击上传按钮,上传内容选择 ISO image,文件选中刚才下载好的文件,开始上传。


然后开始创建FreeNAS的虚拟机,名字填freenas。


这里ISO 映像选刚才上传好ISO文件,类型选 Other 。


硬盘设置里面总线/设备选 SCSI ,存储选 local-lvm ,磁盘大小16G就够了。


然后CPU核心数根据实际情况选填,一般4就可以了,我这里填成8。


内存大小填65536,也就是64G。


网络设置使用桥接模式,网桥选之前建立的 vmbr0 。网卡型号更换成 VirtIO 以达到最高性能。


确定全部配置正确之后就可以创建虚拟机了。


之后进入虚拟机的硬件设置,先把显示从默认改为 SPICE 。


然后添加用于节点内部通信的基于vmbr1 的网卡,网卡型号仍然使用 VirtIO 。


然后进入选项设置,把BIOS从 默认(SeaBIOS) 改为 OVMF(UEFI) 。


然后回到硬件设置,添加一个 EFI Disk ,存储位置 local-lvm 。


之后回到节点的Shell界面,在里面执行
lspci
找到需要由FreeNAS直接控制的设备,我这里是一个NVMe的SSD,一个万兆网卡,和LSI的9211-8i接口卡。记下他们的所在行最前面的数字ID,这里分别是 01:00.0 、 03:00.1 和 05:00.0 ( 03:00.0 准备用在提供上层服务的ubuntu server上面)。


然后在节点的Shell里面执行
nano /etc/pve/qem-server/100.conf
编辑FreeNAS虚拟机的配置文件。在里面添加如下内容:
hostpci0: 05:00.0
hostpci1: 03:00.1
hostpci2: 01:00.0
这样这些设备就会在启动后由FreeNAS直接控制。


最后检查一下硬件设置


选项设置


然后点击 启动 就可以开始安装FreeNAS了,点击控制台进入操作界面。安装过程非常简单,这个大家可以在网上搜索教程,我就不特意写了。
[*]网络配置
登录之后默认会开启向导,直接退出即可。


先进入系统->常规里面更改语言选项。


然后在网络->网络接口->添加网络接口里面给各个网卡添加对应的IP地址,推荐写成固定的,避免DHCP服务器重启或者宕机时候影响整个系统。


推荐WebUI跑在独立VLAN上,减少安全风险。
使用网络->VLAN->添加VLAN给对应网卡添加VLAN。


然后使用网络->网络接口->添加网络接口给新添加的VLAN指定IP地址。


最后在系统->常规里面,把WebGUI使用的IP地址修改成VLAN所在地址。
[*]ZFS配置
使用存储器->卷->卷管理器创建新的存储池,对于小规模的NAS,推荐使用RaidZx形式。尤其是桌面/NAS硬盘,出于对数据安全的考虑y,超过4盘之后推荐使用RaidZ2以上的阵列形式。可以把额外的SSD作为读缓存(L2ARC)使用,以此做到对常用数据的快速访问。
注意,由于ZFS的工作原理,对于家庭应用,不推荐给阵列使用写缓存(ZIL)。


我的NAS最后的结构是一个使用6盘的RaidZ2+500G NVMe SSD的读缓存的主阵列 base。

一个使用双盘互为镜像的备份阵列 backup。

[*]SMB共享
SMB共享也就是Windows共享,由于不管是Linux、OSX、Windows还是手机,都对它有很好支持,
所以一般在家庭中作为主要共享方式使用。

使用存储器->卷->/mnt/base->创建数据集来创建共享所用的数据集,我这里有一个用于存放软件、游戏、文档之类的Public,一个用于存放多媒体文件的Multimedia,和一个用于存放用户数据的users。共享类型全部为windows。
   
然后使用共享->Windows(SMB)共享列表->添加Windows(SMB)共享来给每个数据集创建对应的SMB共享。

注意users要勾选用作主目录共享。这样会给每个用户在访问SMB的时候都会有一个专属于自己的共享目录。
   
然后使用账户->所有用户->添加用户来添加可以登陆的用户。

之后就可以使用任意一个地址和用户名/密码访问SMB共享目录了。
[*]NFS共享
NFS主要用于Unix主机访问,性能要好于SMB,但是兼容性较差。我这里主要用于存储docker、sage和一个Linux桌面系统的数据。

还是先用存储器->卷->/mnt/base->创建数据集来创建NFS所用的数据集,注意这里共享类型要选成UNIX。

使用共享->Unix(NFS)共享列表->添加Unix(NFS)对象来创建NFS共享。

注意,对于需要支持root用户的NFS共享来说,由于FreeNAS和Linux的root不太一样,需要把高级模式里的Maproot用户设为root,Maproot组设为wheel。另外NFS是根据uid和gid来分配权限的,所以使用同一个NFS的不同主机,相同的用户需要有相同uid和gid。
[*]iSCSI共享
和其他共享方式不一样,iSCSI是把存储作为块设备共享出去的。在使用iSCSI的系统中,iSCSI是作为一个类似硬盘的设备来使用的。所以iSCSI有着最高的性能,但是跨系统的兼容性也最差。比较适合给各种设备提供中心化的硬盘,比如家里的游戏电脑和HTPC,完全可以就装一个用来启动系统的小容量ssd,然后使用万兆网和iSCSI共享来为这些设备提供大容量存储,这样每个设备都有相当于有了一个大容量/高可靠性/高性能的ZFS阵列,减少了很多维护上的复杂性,设备也不用再考虑硬盘位的问题。

为了达到最高性能,iSCSI需要的在存储中建立zvol,使用存储器->卷->/mnt/base->创建zvol来完成。如果不是对性能有特别极端的需求,可以勾选松散卷一项,这样会根据实际使用情况来分配占用的存储空间。可以更有效的利用存储。


iSCSI中有几个特别的名词,Initiator就相当于其他共享协议中的客户端,Target相当于一个共享对象,Portal是用来进行用户授权和列出所有可用Target的服务。所以一个简单的iSCSI共享需要至少一个Portal和至少一个Target,以及一个Initiator组用来确定可连接的设备。

使用共享->阻止(iSCSI)->Initiator->添加Initiator,来添加新的基于IP地址和名称的对iSCSI客户端的认证。


然后使用共享->阻止(iSCSI)->Portals->添加Portal,来创建新的Portal。

之后使用共享->阻止(iSCSI)->Target->添加Target,来创建新的Target,Portal组ID和Initiator组ID分别使用刚才创建的两个。


然后使用共享->阻止(iSCSI)->Extent->添加Extent,来创建新的Extent,Extent类型选设备,设备选刚才创建好的zvol共享。


最后用共享->阻止(iSCSI)->Target/Extent->添加Target/Extent来把Target和刚刚创建的Extent关联起来。


需要更灵活权限控制的情况下,可以使用共享->授权访问->添加授权访问来创建新的认证规则,然后把Portal的发现认证组以及Target的认证组编号设为对应的认证规则,Target的认证方式根据实际情况选择。

[*]维护任务
待完善

4.5.2 Ubuntu Server

[*]安装
[*]网络配置
[*]挂载FreeNAS共享


4.6 应用
4.6.1 Docker

[*]安装
[*]Aria2
[*]NextCloud

[*]Onlyoffice整合
[*]Draw.io整合
[*]Plex
[*]Ubnt Network Manage System
[*]Home Assistance

4.6.2 Sage
4.6.3 Ubnt UniFi Contoller



阿崔 发表于 2018-2-25 04:03

二楼用于答疑

wenzon 发表于 2018-2-25 08:13

很高级,英文的完全看不懂![雷人]

owsr 发表于 2018-2-25 12:28

前排支持

陶妈陶爸 发表于 2018-2-26 07:51

前排收藏了,今年准备跳进NAS的坑[偷笑]

namder 发表于 2018-2-26 08:23

收藏收藏!大神,orz一个。看看自己家里的nas,简直low到底了。

iciness 发表于 2018-2-26 09:04


收藏收藏   细细的看

vnov 发表于 2018-2-26 10:05

期待后面的教程,对后面Docker的内容非常期待,大神加油!

MuGuYu 发表于 2018-2-26 10:25

等看,学习

家里的4盘位已经满了,升级无头绪中

NaG24 发表于 2018-2-26 10:39

[偷笑]我的6800k可以用起来了。

tasagapro 发表于 2018-2-26 10:43

拓扑图要是能把图标再美化一下的话。。。

nineapple 发表于 2018-2-26 12:32

那么多VLAN ? 楼主用三层交换,还是单臂路由器?

多哈 发表于 2018-2-26 14:21

完全看不懂,但很高大上。

chgj 发表于 2018-2-26 14:25

虽然我看不懂,仍然感觉到很厉害的样子

az6338890 发表于 2018-2-26 14:25

trmalive 发表于 2018-2-26 15:12

阿崔 发表于 2018-2-25 04:03
二楼用于答疑

这是干嘛的?好复杂,我以为是群辉啥的

yahochina 发表于 2018-2-26 15:28

我家用一个PC做了个SERVER,现在除了做NAS和HTPC外,我想不出还能做点什么。。。。。。。。。。

wo05914007 发表于 2018-2-26 15:43

硬件篇呢   我咋没找到啊 楼主

错庞末班车 发表于 2018-2-26 15:58

不错,感谢提供新思路
虽然我用esxi,还是支持一下!

nApoleon 发表于 2018-2-26 16:43

编辑完了和我说~

ccb_tang 发表于 2018-2-26 17:23

原来nas这么复杂啊,还是发点硬件照片让我先有个直观认识吧,毕竟我是交换机和路由器都没分清楚的人

iamyyc 发表于 2018-2-26 17:58

很佩服楼主的精神,去年我也想自己搭一台 最后还是屈服买了个屏蔽牌

ksjssj 发表于 2018-2-26 20:22

az6338890 发表于 2018-2-26 14:25
看不懂看不懂。。。。只会用services2012开smb

和你一样,最近纠结要不要干掉2012,干脆弄成WIN10算了

caibb23 发表于 2018-2-26 20:31

太高端了,单一个英文界面就让易用性大打折扣,我还是老实用群晖。

az6338890 发表于 2018-2-26 21:37

刘备的小跟班 发表于 2018-2-26 22:19

我觉得这应该是门户啊,完全看不懂,但是感觉好厉害~

zuohan9 发表于 2018-2-26 22:30

[困惑]好高端啊,完全看不懂,装了个SERVER 2016,弄了两天NFS共享搞不定,客户机连接一直显示网络错误53,用iscsi又不是一般的卡,第一次搞给搞懵了。

pilgrim_kevin 发表于 2018-2-27 08:25

太复杂了。。。楼主都主要有些什么应用?我觉得家庭的使用需求群晖足够了[狂笑]

天一凡 发表于 2018-2-27 11:42

技术贴!

fly8008 发表于 2018-2-27 14:03

高端技术贴。。。厉害!
页: [1] 2 3 4
查看完整版本: 编辑中 把折腾进行到底——我的高性能家用NAS搭建之二:软...