自宅サーバーの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)
- eno1, eno2: bond0
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で開いたとき、マウスが役に立たない問題に対する回避
- https://forum.proxmox.com/threads/mouse-not-working-on-console-novnc.32619/
- chrome://flags/#touch-events を開いて Touch Events API を Disabled に