自宅サーバーのProxmox VE 5.1 - 3 nodes cluster環境の構築

Posted on 2018/02/11(Sun) 17:05 in technical

さまり

我が家の自宅サーバーたちは、最近までProxmox VE 4.4で動作させていました。

今回、PRIMERGY TX1320 M2が3台揃ったので、Proxmox VE 5.1のリリースに合わせて移行しました。

多少のダウンタイムはあるものの、特段問題なく移行できたので、構築手順のメモを残しておきます。

構成

簡単な移行前後の構成メモ

移行前の構成

  • C2550D4Iによる自作機
  • Proxmox VE 4.4
  • 2 node cluster
  • NFS storage(別ノード上のOpenIndiana)
  • 移行時、既に片肺(C2000シリーズのM/B突然死によるもの)
  • Network
    • eth0, eth1: bond0
    • eth2, eth3: bond1
      • bond0(Untagged): Admin and VM network
      • bond1(Untagged): WAN network (for BBR)

移行後の構成

  • TX1320 M2
  • Proxmox VE 5.1
  • 3 node cluster
  • Ceph bluestore storage
  • Network
    • eno1, eno2: bond0
      • bond0(Untagged): Admin and VM network
      • bond0(VLAN 200): WAN network (for BBR)

Proxmox VE 5.1 - 3 nodes cluster 構築

PVE install parameters

isoからインストールするときの話

  • 基本全部そのまま
  • ext4をXFSに変更
  • ホストは以下の3台
    • pve01.ainoniwa.internal: 192.168.1.26
    • pve02.ainoniwa.internal: 192.168.1.27
    • pve03.ainoniwa.internal: 192.168.1.28

OS Update

とりあえず全台でアップデート実施。

# mv /etc/apt/sources.list.d/pve-enterprise.list ~/pve-enterprise.list.bak
# echo "deb http://download.proxmox.com/debian stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# apt update && apt upgrade -y
# reboot

Remove AD

WebUIにアクセスしたときの広告を飛ばす。

sed -i.bk "s/data.status !== 'Active'/false/g" /usr/share/pve-manager/js/pvemanagerlib.js

警告

書き換える必要のあるファイルは、バージョンによって微妙にファイル名が異なることがあるので、それらしいところを毎回探すこと。

Install openvswitch

BondingインターフェースをOpen vSwtichで作るので、インストールして設定します。

# apt install -y openvswitch-switch
# vi /etc/network/interfaces

/etc/network/interfaces

警告

アドレスはそれぞれのホストのIPに合わせること

# PVE cluster network
#   bond0: eno1, eno2
#   intport0: 192.168.1.26 (admin)

auto lo
iface lo inet loopback

iface eno1 inet manual
iface eno2 inet manual

allow-vmbr0 intport0
iface intport0 inet static
        address 192.168.1.26
        netmask 255.255.255.0
        gateway 192.168.1.1
        ovs_type OVSIntPort
        ovs_bridge vmbr0
        mtu 9000
        post-up ( iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8006 )

allow-vmbr0 bond0
iface bond0 inet manual
        ovs_bonds eno1 eno2
        ovs_type OVSBond
        ovs_bridge vmbr0
        pre-up ( ip link set mtu 9000 eno1 && ip link set mtu 9000 eno2 )
        ovs_options bond_mode=balance-slb
        mtu 9000

auto vmbr0
iface vmbr0 inet manual
        ovs_type OVSBridge
        ovs_ports bond0 intport0

備考

WebUIにアクセスするときに、いちいち :8006 と打ちたくないので、 post-up ポートフォワードを設定。

一時的にやりたい場合は後述の「その他利用上のメモ」参照

設定したら、再起動します。

# reboot

設定内容を確認して、問題なさそうなことを確認。

# ovs-appctl bond/list
bond    type    recircID        slaves
bond0   balance-slb     1       eno1, eno2
# ovs-appctl bond/show bond0
---- bond0 ----
bond_mode: balance-slb
bond may use recirculation: no, Recirc-ID : -1
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
next rebalance: 3650 ms
lacp_status: off
active slave mac: 90:1b:0e:9b:c4:2b(eno1)

slave eno1: enabled
        active slave
        may_enable: true
        hash 123: 3 kB load

slave eno2: enabled
        may_enable: true

KVM nested

Proxmox VEでVMwareを入れたくなるかもしれないので、とりあえずNestedの設定をしておく。

# cat /sys/module/kvm_intel/parameters/nested
N
# echo 'options kvm_intel nested=1' > /etc/modprobe.d/kvm-nested.conf
# modprobe -r kvm_intel
# modprobe kvm_intel
# cat /sys/module/kvm_intel/parameters/nested
Y
# reboot

Ref: https://pve.proxmox.com/wiki/Nested_Virtualization#Enable_Nested_Hardware-assisted_Virtualization

PVE cluster setup

Proxmox VEのクラスタを構築する

クラスタでは、rootユーザーがそれぞれパスワードなしのsshができる必要があるので、お互いに全台登録する。

grep "pve01" /etc/hosts || echo "192.168.1.26 pve01 pve01.ainoniwa.internal" >> /etc/hosts
grep "pve02" /etc/hosts || echo "192.168.1.27 pve02 pve02.ainoniwa.internal" >> /etc/hosts
grep "pve03" /etc/hosts || echo "192.168.1.28 pve03 pve03.ainoniwa.internal" >> /etc/hosts
for host in pve01 pve02 pve03; do ssh-copy-id -o StrictHostKeyChecking=no root@${host}; ssh-copy-id -o StrictHostKeyChecking=no root@${host}.ainoniwa.internal; done

クラスタの開始となる1台目でクラスタリソースを作成する。

pve01:

root@pve01:~# pvecm create pve-cluster
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.
root@pve01:~# pvecm nodes

Membership information
----------------------
    Nodeid      Votes Name
        1          1 pve01 (local)

残りの2台で、作成したクラスタに参加する。

pve02:

root@pve02:~# pvecm add pve01
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'pve02' to cluster.

pve03:

root@pve03:~# pvecm add pve01
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'pve03' to cluster.

警告

一斉にクラスタに追加していると、たまにタイミングが悪くて失敗して、以下のようなエラーとなることがある。

root@pve03:~# pvecm add pve01
trying to aquire cfs lock 'file-corosync_conf' ...got lock request timeout
unable to add node: command failed (ssh pve01 -o BatchMode=yes pvecm addnode pve03 --force 1)

その時は、もう一度実行すれば大体うまくいく。

そして、クラスタに参加できていることを確認して完了。

root@pve01:~# pvecm status
Quorum information
------------------
Date:             Tue Nov 21 01:09:27 2017
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          1/12
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 192.168.1.26 (local)
0x00000002          1 192.168.1.27
0x00000003          1 192.168.1.28

Ceph cluster setup

Proxmox VE 4系と同様にCephのセットアップをする。

警告

ただし、このCeph storageにはVM imageしか置けないことに注意する(ファイルストレージではないので、ISO等は配置できない)

全台で pveceph をインストールする。

pve01, pve02, pve03:

pveceph install

最初の1台でCephを初期化する。

pve01:

pveceph init --network 192.168.1.0/24

そして、全台でCeph monitorを作成する。

pve01, pve02, pve03:

pveceph createmon

全台でCephのOSDを作成する。(こちらはWeb UIから)

  • pve01, pve02, pve03で実施
  • GUIから Ceph -> OSD -> Create: OSD -> Disk: /dev/sda で作成
  • Journal/DB Disk: use OSD disk * デフォルト。あと、予算の都合上Diskは打ち止め。
  • [X] Bluestore * デフォルト

Web UI操作時に出力されるログの例:

create OSD on /dev/sda (bluestore)
Creating new GPT entries.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Creating new GPT entries.
The operation has completed successfully.
Setting name!
partNum is 0
REALLY setting name!
The operation has completed successfully.
Setting name!
partNum is 1
REALLY setting name!
The operation has completed successfully.
The operation has completed successfully.
meta-data=/dev/sda1              isize=2048   agcount=4, agsize=6400 blks
        =                       sectsz=512   attr=2, projid32bit=1
        =                       crc=1        finobt=1, sparse=0, rmapbt=0, reflink=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
        =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=864, version=2
        =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
TASK OK

以下の手順でWeb UIからCeph poolを作成する。これは全ノードで実施。

  • GUIから Ceph -> Pools -> Create
    • Name: rbd
    • Size: 3
    • Min Size: 2
    • Crush Rule: replicated_rule
    • pg_num: 64
    • Add Storages: [X]
      • チェックを入れると、勝手にStorageとして登録される

以下の手順でWeb UIからCeph storageをクラスタに登録する。これはクラスタ内のどれか1ノードで実施したら全体に適用される。

  • GUIからDatacenter -> Storage -> Add -> RBD

VM用(Monitor(s)の区切りは ;

  • ID: vm (任意)
  • Monitor(s): pve01;pve02;pve03
  • KRBD: [ ]

Linux container用(Monitor(s)の区切りは ;

  • ID: lxc-ceph (任意)
  • Monitor(s): pve01;pve02;pve03
  • KRBD: [X]

pve01でCeph用の鍵のコピーを実施:

cp /etc/pve/priv/ceph.client.admin.keyring /etc/pve/priv/ceph/rbd_ct.keyring
cp /etc/pve/priv/ceph.client.admin.keyring /etc/pve/priv/ceph/rbd_vm.keyring

警告

確か1台でコピーを実施したら、残りの2台にも適用されたはず。

これにて完了。

その他利用上のメモ

WebUIにアクセスするときに、いちいち :8006 と打ちたくない。

# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8006

備考

ただし、これは構築の際に、起動時に設定されるように仕込み済み。

VivaldiとnoVNCの相性が悪い

PVEで仮想マシンのコンソールをnoVNCで開いたとき、マウスが役に立たない問題に対する回避