自分用と家族用のファイルサーバーを統合した
我が家ではストレージとして、 自分用にはアプライアンスのNAS(Synology DiskStation DS218play)を、 家族用にはヤフオクで落札したスリムタワーPCにUbuntu Server 18.04を入れてSambaを動かしていた。
物理的にサーバーを分けていたのは同時アクセス時の帯域を確保したかったからだが、とても無駄だなぁ…と思っていた。 そこで、今回は両方を1台のサーバーに収めて、リンクアグリゲーションを利用して家族と自分が同時にアクセスしてもギガビットの帯域をそれぞれ使えるようにした。
今までの構成
だいたいこんな感じになっていた。
ルーターのスイッチポートに直接自分のパソコンとNASを接続し、サーバー類とAPも同じ段に設置することで家族が家族用のストレージへ、自分が自分用のストレージに同時にアクセスしても帯域が確保できるようにしていた。
新しい構成
ルーターのスイッチポートに接続していたデバイスと、サーバー置き場にあるスイッチングハブに接続していたデバイスを1台のスイッチに収容して、サーバーとスイッチ間のリンクを負荷分散させる
購入品
TP-Link TL-SG108E
TP-Link 8ポート 10/100/1000Mbps ギガビット イージー スマート スイッチ TL-SG108E
- 出版社/メーカー: TP-LINK
- 発売日: 2016/06/25
- メディア: Personal Computers
- この商品を含むブログを見る
- Amazonで3500円で購入。この値段でリンクアグリゲーション(スタティックのみ、LACPは無理)できて、VLANも切れる。
ELECOM EDC-GUA3-B
エレコム 有線LANアダプタ Nintendo Switch 動作確認済 USB3.0 ギガビット対応 ブラック EDC-GUA3-B
- 出版社/メーカー: エレコム
- 発売日: 2017/08/20
- メディア: Personal Computers
- この商品を含むブログを見る
サーバー
サーバー側 bondingの設定
2019/04/30 06:40 内容を編集
- Ubuntu 17.10から設定がnetplanになったので、こちらで設定する。
USB NICを挿してNIC名の確認
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 (略) 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether d8:cb:8a:c3:4c:0d brd ff:ff:ff:ff:ff:ff inet 10.0.0.237/24 brd 10.0.0.255 scope global enp2s0 valid_lft forever preferred_lft forever (略) 3: enxbc5c4ce124f3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether bc:5c:4c:e1:24:f3 brd ff:ff:ff:ff:ff:ff
netplan 設定ファイルの編集
$ sudo cp -p /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.org
- 設定ファイルのバックアップ
$ sudo vi /etc/netplan50-cloud-init.yaml
- netplan設定ファイルの編集
# 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: ethernets: enp2s0: match: macaddress: d8:cb:8a:c3:4c:0d set-name: eth1 enxbc5c4ce124f3: match: macaddress: bc:5c:4c:e1:24:f3 set-name: eth2 eth1: addresses: [] eth2: addresses: [] bonds: bond0: addresses: [10.0.0.237/24] gateway4: 10.0.0.254 nameservers: addresses: [10.0.0.254] interfaces: - eth1 - eth2 parameters: mode: balance-xor mii-monitor-interval: 1 version: 2
- USB NIC(
enx…
)は再起動の拍子にNIC名がenp…
に変わってしまうことがあるので、set-name
でeth2
に設定している。 - せっかくなのでオンボードのNIC(
enp2s0
)に対しても名前の設定を行い、eth1
とeth2
にしておく set-name
した結果のインタフェースをeth1
とeth2
として定義しておく。ここを省略すると、束ねる時にインタフェースが定義されていないと言われエラーになってしまうbond0
で、eth1
とeth2
を束ね、束ねたこのインタフェースに対してIP等の設定を行う- 対向スイッチはスタティックの設定になっているので、bondingのモードは
balance-xor
。 mii-monitor-interval
はNICの故障検知の間隔を設定するらしい。(要調査)
dhcp4: false dhcp6: false
- DHCPはデフォルトでオフになっているので、これは必要ナシ。(あってもOK)
設定の適用
$ sudo reboot
sudo netplan apply
だと、USB NICに対してeth2
の設定のみがされ、オンボード NICには設定されない。- この状態で再起動すると、USB NICは(
enp…
)の名前になってしまうので、NG。
- この状態で再起動すると、USB NICは(
状態の確認
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: load balancing (xor) Transmit Hash Policy: layer2 (0) MII Status: up MII Polling Interval (ms): 1 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth2 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: bc:5c:4c:e1:24:f3 Slave queue ID: 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: d8:cb:8a:c3:4c:0d Slave queue ID: 0
- 3行目
Bonding Mode
の記述より、ロードバランシングが設定されている。 - ちゃんと
Slave Interface
に2つ表示されている。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 (略) 2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000 link/ether c6:ed:90:c2:76:a7 brd ff:ff:ff:ff:ff:ff 3: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000 link/ether c6:ed:90:c2:76:a7 brd ff:ff:ff:ff:ff:ff 4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether c6:ed:90:c2:76:a7 brd ff:ff:ff:ff:ff:ff inet 10.0.0.237/24 brd 10.0.0.255 scope global bond0 valid_lft forever preferred_lft forever (略)
- 2つのインタフェースがどちらも
master bond0 state UP
となっている
スイッチ側 LAGの設定
- TP-LinkはリンクアグリゲーションをLAGと呼んでいるらしい。
- WebUIで簡単に設定できる。
- 左側のメニューでSwitchingを選択し、その下にある
LAG
を選択
- LAG 1にPort1とPort2を割り当ててApply
確認
- My PCがコピーを始めると、Port1のランプが点滅してアクセスしている。Port2は点滅していない。
- Test PCがコピーを始めると、Port2も点滅する。
- どちらも110MB/sくらいのコピー速度が出ているので、無事負荷分散出来ている。