配置802.3ad link aggregation

802.3ad是实现网络负载均衡的方法之一,Ubuntu服务器版在安装时提供配置向导,如下图:

802.3ad要求网卡拥有相同的参数,而且要求有交换机端的支持,在我安装Ubuntu的时候这两个条件都不满足,所以在初次尝试的时候我选择了balance-alb,更多配置选项参见UbuntuBonding

后来我又增加了一块基于RTL8169的网卡,于是直接修改配置文件,如下:

liang@dell5150:~$ cat /etc/netplan/50-cloud-init.yaml 
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
bonds:
bond0:
addresses: [192.168.2.3/24]
gateway4: 192.168.2.1
nameservers:
addresses: [192.168.2.1,8.8.8.8]
interfaces:
- enp3s2
- enp3s3
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
ethernets:
enp3s2:
addresses: []
dhcp4: false
dhcp6: false
enp3s3:
addresses: []
dhcp4: false
dhcp6: false
enp3s8:
addresses: [192.168.2.5/24]
gateway4: 192.168.2.1
nameservers:
addresses: [192.168.2.1,8.8.8.8]
version: 2

我这里将enp3s2和enp3s3合并为802.3ad,两块网卡共用一个IP地址。配置好服务器后,配置交换机,我使用的是Ubiquiti US-8-US。

都配置好后需要分别重启。然后检查服务器段配置是否生效。

liang@dell5150:~$ cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable

Slave Interface: enp3s3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: 00:0a:cd:35:b8:b0
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0

Slave Interface: enp3s2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: 00:0a:cd:35:34:58
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0

其实这台电脑是非常老的DELL Dimension 5150,奔4双核,带一块百兆网卡,即前面看到的enp3s8。使用sudo lshw -c network可以查看网卡硬件信息,板载网卡配置如下:

*-network:2
description: Ethernet interface
product: NM10/ICH7 Family LAN Controller
vendor: Intel Corporation
physical id: 8
bus info: pci@0000:03:08.0
logical name: enp3s8
version: 01
serial: 00:12:3f:cd:e3:6b
size: 100Mbit/s
capacity: 100Mbit/s
width: 32 bits
clock: 33MHz

我的打算是在上面装ZoneMinder管理家里的四个网络摄像头,给主板上仅有的一个PCIe x1端口安装了一块两口SATA3转接卡,分别连接一块SSD(安装操作系统)和一块2TB西数紫盘(用于存储录像)。两块盘共存于一个5寸转接盒里,最多可以容纳一块3.5寸HDD和两块2.5寸SSD。

另外为了提升网络吞吐量,先后买了两块PCI(不带e)千兆网卡,然而PCI本身达不到千兆速度,实测约为700Mbps上下。

上面为两PCIe x1转双SATA3转接卡,下面为PCI网卡

因此有了配置802.3ad的兴致。

基于ownCloud的家庭备份解决方案

在公有云存储如此普及的今天,为什么还要自己搭建备份服务呢?首先,免费空间有限,通常在5GB上下;更重要的是,一些涉及隐私的文件,如银行账单和证件复印件等等,不适合直接存放在公有云存储服务上。而在自己家里部署ownCloud服务器,配合手机客户端(我使用Cirrus for ownCloud,可以设置应用密码)、Linux客户端、Mac客户端,以及Windows客户端,构成了一个类似Dropbox的家庭备份方案,只要把文件放在ownCloud文件夹里面,就会自动同步到服务器。既不用担心空间限制,也无需顾虑泄漏隐私。在此基础上,可以在服务器端做进一步远程备份到公有云存储,并适当加密,既实现了安全备份,又做到了自动化。

搭建ownCloud其实很简单,有现成的docker容器可以用,不嫌麻烦也可以直接安装配置。

我的定制稍微复杂一些。去年黑色星期五花费$150买了QNAP TS-231+文件服务器,装上两块西数3TB红盘,配置成RAID 1。QNAP系统内置ownCloud服务器,但是版本稍旧,为了使用最新版本,只好自己安装docker容器。QNAP系统内置Container Station,可以直接下载安装DockerHub里面的容器,问题是TS-231+是ARM平台,没有现成的容器可用,于是自己做了一个armhf-owncloud

armhf-owncloud默认安装了自签名的SSL证书,支持HTTPS访问,所以在配置端口映射时除了默认的80端口,不要忘记映射更重要的443加密端口,以便在公网通过myQNAPcloud安全访问隐私文件。

配置data volume可以将备份到ownCloud容器里的文件暴露给QNAP系统,以便实现远程备份。QNAP有内置Hybrid Backup,可以备份文件到各种云存储,包括Amazon Cloud Drive,Dropbox,OneDrive和Google Drive等等,而且支持加密备份。我的QNAP Hybrid Backup有两个任务,一个加密备份ownCloud里涉及隐私的文件夹,另一个明文备份剩余文件夹。

Hybrid Backup的加密设置不够直观,我录制了一段视频演示其过程,仅供参考。

有了这个方案,备份变得很简单,只要把文件存放在适当的文件夹即可,ownCloud客户端就会自动同步文件到家里的ownCloud服务器,然后,QNAP Hybrid Backup又会把文件备份到公有云存储。另外日历上创建一个每月一次的文件清理任务,以便抓住漏网之鱼。

这个方案也有一些小问题,首先,加密文件的文件名还是明文的。其次,使用非标准端口可能会被防火墙拦截。家里的宽带猫上开通了端口转发,公司里就没有办法,好几次以为是配置出了问题,文件怎么找不到,后来才想明白是端口被屏蔽了,只好使用移动网络。

尽管有着这样那些的瑕疵,在踏入IT行业的第十四个年头,我终于有了一套备份方案。