找回密码
 加入我们
搜索
      
查看: 87775|回复: 102

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

 火.. [复制链接]
发表于 2018-2-25 03:42 | 显示全部楼层 |阅读模式
本帖最后由 阿崔 于 2018-3-27 16:16 编辑

上篇

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


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


4.3 网络
从安全和易用性的角度,把家中的网络分为几大部分:
  • 台式机
  • 智能家居
  • 网络设备管理
  • 无线设备
  • 访客网络
  • 打印机
  • iSCSI存储网络
结构如下:

HomeNetwork.png


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。
pve_install.png

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

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

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

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


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

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

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


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的命令行。依次执行如下命令: pve_setup_shell.png
      1. wget -q -O- 'http://download.proxmox.com/debian/pve/dists/stretch/proxmox-ve-release-5.x.gpg' | apt-key add -
      复制代码

      1. echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
      复制代码

      1. apt update
      复制代码

      1. apt install -y openvswitch-switch
      复制代码
      pve_setup_add_source.png
  • 创建网络

    首先删除默认的 vmbr0
    pve_setup_network.png

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

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

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

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

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


4.4.4 开启PCI Passthrough
  • 修改GRUB设置
    先执行
    1. 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 键和回车键存盘并退出。
    pve_setup_grub.png

    之后执行
    1. update-grub
    复制代码

    pve_setup_update_grub.png
  • 增加需要的内核模块

    执行
    1. echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules
    复制代码
    然后重启即可

4.4.5 添加磁盘


  • 通过节点的磁盘一项找到对应的设备名称,这里是 /dev/sdb 如果是NVMe设备,那么就是类似 /dev/nvme0n1 这种名字;
    pve_setup_disks.png
  • 打开节点的命令行窗口;
  • 执行
    1. sgdisk -N 1 /dev/sdb
    复制代码

    或者
    1. sgdisk -N 1 /dev/nvme0n1
    复制代码

    在新磁盘中创建分区;
  • 执行
    1. pvcreate -y -ff /dev/sdb1
    复制代码

    或者
    1. pvcreate -y -ff /dev/nvme0n1p1
    复制代码

    创建LVM物理卷;
  • 执行
    1. vgcreate vmcache /dev/sdb1
    复制代码

    或者
    1. vgcreate vmcache /dev/nvme0n1p1
    复制代码

    创建名为 vmcache 的LVM卷分组;
  • 执行
    1. lvcreate -L 400G -T -n cachepool vmcache
    复制代码

    创建名为 cachepool 的大小为 400G 的LVM-thin存储池;
  • 执行
    1. pvesm add lvmthin cache-lvm --thinpool cachepool --vgname vmcache --content images,rootdir
    复制代码

    创建名为 cache-lvm 的,用于存放虚拟机镜像和LXC容器的存储空间。
    pve_setup_lvm.png




4.4.6 UPS配置
这里以APC支持USB通信的UPS为例,其他型号配置请参考NUT的文档。
  • 执行
    1. lsusb
    复制代码

    确认UPS已经通过USB连接上;
  • 执行
    1. apt install -y nut
    复制代码
    pve_setup_apt_nut.png
    安装NUT;
  • 执行
    1. nano /etc/nut/ups.conf
    复制代码
    在最后添加:
    1. driver = usbhid-ups
    2. port = auto
    复制代码
    pve_setup_nut_ups_conf.png

    之后按下方提示退出并保存。执行
    1. upsdrvctl start
    复制代码

    ,如果 ups.conf 没有问题的话,会显示驱动版本号并回到命令提示符。如果反复显示 Driver failed to start 那么就是配置有问题或者UPS不支持,按 Ctrl+c 终止执行。
    pve_nut_ups_test.png
  • 执行
    1. nano /etc/nut/upsd.conf
    复制代码
    pve_setup_nut_upsd_conf.png
    找到 # LISTEN 127.0.0.1 3493 这样一行,去掉前面的 # ,然后按下方提示退出并保存;
  • 执行
    1. nano /etc/nut/upsd.users
    复制代码

    在最后添加:
    1. [upsmon]
    2.   password = blahblah
    3.   upsmon master
    复制代码
    pve_setup_nut_upsd_users.png

    之后按下方提示退出并保存;
  • 执行
    1. 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 。然后按下方提示退出并保存。
    pve_setup_nut_upsmon_conf.png
    pve_setup_nut_upsmon_conf_1.png

  • 执行
    1. nano /etc/nut/nut.conf
    复制代码
    pve_setup_nut_nut_conf.png

    MODE=none 替换为 MODE=standalone 。然后按下方提示退出并保存。
  • 执行
    1. systemctl start nut-server
    复制代码
  • 执行
    1. upsc mainups@localhost
    复制代码

    测试

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


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

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

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

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

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

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

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

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

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

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

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

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

    之后回到节点的Shell界面,在里面执行
    1. lspci
    复制代码

    找到需要由FreeNAS直接控制的设备,我这里是一个NVMe的SSD,一个万兆网卡,和LSI的9211-8i接口卡。记下他们的所在行最前面的数字ID,这里分别是 01:00.003:00.105:00.0 ( 03:00.0 准备用在提供上层服务的ubuntu server上面)。
    pve_vm_lspci.png

    然后在节点的Shell里面执行
    1. nano /etc/pve/qem-server/100.conf
    复制代码

    编辑FreeNAS虚拟机的配置文件。在里面添加如下内容:
    1. hostpci0: 05:00.0
    2. hostpci1: 03:00.1
    3. hostpci2: 01:00.0
    复制代码

    这样这些设备就会在启动后由FreeNAS直接控制。
    pve_vm_freenas_conf.png

    最后检查一下硬件设置
    pve_vm_freenas_hw.png

    选项设置
    pve_vm_freenas_options.png

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

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

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

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

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

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

    我的NAS最后的结构是一个使用6盘的RaidZ2+500G NVMe SSD的读缓存的主阵列 base。
    freenas_setup_base_zpool.png
    一个使用双盘互为镜像的备份阵列 backup。
    freenas_setup_backup_zpool.png
  • 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来完成。如果不是对性能有特别极端的需求,可以勾选松散卷一项,这样会根据实际使用情况来分配占用的存储空间。可以更有效的利用存储。
    freenas_setup_iscsi_zvol.png

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

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

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

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

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

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

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

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



pve_setup_console.png
pve_setup_network_final.png
pve_setup_update.png
pve_setup_update_proc.png

评分

参与人数 7邪恶指数 +130 收起 理由
vin7cen + 10
dexterchen + 10
kmb101 + 10
hudizhoutube + 50
strongtan + 20
ccb_tang + 10
owsr + 20

查看全部评分

 楼主| 发表于 2018-2-25 04:03 | 显示全部楼层
二楼用于答疑
发表于 2018-2-25 08:13 | 显示全部楼层
很高级,英文的完全看不懂!
发表于 2018-2-25 12:28 | 显示全部楼层
前排支持
发表于 2018-2-26 07:51 | 显示全部楼层
前排收藏了,今年准备跳进NAS的坑
发表于 2018-2-26 08:23 | 显示全部楼层
收藏收藏!大神,orz一个。看看自己家里的nas,简直low到底了。
发表于 2018-2-26 09:04 | 显示全部楼层

收藏收藏   细细的看
发表于 2018-2-26 10:05 | 显示全部楼层
期待后面的教程,对后面Docker的内容非常期待,大神加油!
发表于 2018-2-26 10:25 | 显示全部楼层
等看,学习

家里的4盘位已经满了,升级无头绪中
发表于 2018-2-26 10:39 | 显示全部楼层
我的6800k可以用起来了。
发表于 2018-2-26 10:43 | 显示全部楼层
拓扑图要是能把图标再美化一下的话。。。
发表于 2018-2-26 12:32 | 显示全部楼层
那么多VLAN ? 楼主用三层交换,还是单臂路由器?
发表于 2018-2-26 14:21 | 显示全部楼层
完全看不懂,但很高大上。
发表于 2018-2-26 14:25 | 显示全部楼层
虽然我看不懂,仍然感觉到很厉害的样子
发表于 2018-2-26 14:25 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-2-26 15:12 | 显示全部楼层

这是干嘛的?好复杂,我以为是群辉啥的
发表于 2018-2-26 15:28 | 显示全部楼层
我家用一个PC做了个SERVER,现在除了做NAS和HTPC外,我想不出还能做点什么。。。。。。。。。。
发表于 2018-2-26 15:43 | 显示全部楼层
硬件篇呢   我咋没找到啊 楼主
发表于 2018-2-26 15:58 | 显示全部楼层
不错,感谢提供新思路
虽然我用esxi,还是支持一下!
发表于 2018-2-26 16:43 | 显示全部楼层
编辑完了和我说~
发表于 2018-2-26 17:23 | 显示全部楼层
原来nas这么复杂啊,还是发点硬件照片让我先有个直观认识吧,毕竟我是交换机和路由器都没分清楚的人
发表于 2018-2-26 17:58 来自手机 | 显示全部楼层
很佩服楼主的精神,去年我也想自己搭一台 最后还是屈服买了个屏蔽牌
发表于 2018-2-26 20:22 | 显示全部楼层
az6338890 发表于 2018-2-26 14:25
看不懂看不懂。。。。只会用services2012开smb

和你一样,最近纠结要不要干掉2012,干脆弄成WIN10算了
发表于 2018-2-26 20:31 | 显示全部楼层
太高端了,单一个英文界面就让易用性大打折扣,我还是老实用群晖。
发表于 2018-2-26 21:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-2-26 22:19 | 显示全部楼层
我觉得这应该是门户啊,完全看不懂,但是感觉好厉害~
发表于 2018-2-26 22:30 | 显示全部楼层
好高端啊,完全看不懂,装了个SERVER 2016,弄了两天NFS共享搞不定,客户机连接一直显示网络错误53,用iscsi又不是一般的卡,第一次搞给搞懵了。
发表于 2018-2-27 08:25 | 显示全部楼层
太复杂了。。。楼主都主要有些什么应用?我觉得家庭的使用需求群晖足够了
发表于 2018-2-27 11:42 | 显示全部楼层
技术贴!
发表于 2018-2-27 14:03 | 显示全部楼层
高端技术贴。。。厉害!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-11-21 20:07 , Processed in 0.031468 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表