自宅サーバーのProxmox VE 5.1 - 3 nodes cluster環境の構築
構成
移行前の構成
- 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
とりあえず全台でアップデート実施。
1
2
3
4
|
# 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にアクセスしたときの広告を飛ばす。
1
|
sed -i.bk "s/data.status !== 'Active'/false/g" /usr/share/pve-manager/js/pvemanagerlib.js
|
- 書き換える必要のあるファイルは、バージョンによって微妙にファイル名が異なることがあるので、それらしいところを毎回探すこと。
Install openvswitch
BondingインターフェースをOpen vSwtichで作るので、インストールして設定します。
1
2
|
# apt install -y openvswitch-switch
# vi /etc/network/interfaces
|
/etc/network/interfaces
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 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
にポートフォワードを設定。
一時的に設定したい場合は後述の「その他利用上のメモ」を参照。
設定したら、再起動します。
設定内容を確認して、問題なさそうなことを確認。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 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の設定をしておく。
1
2
3
4
5
6
7
8
|
# 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ができる必要があるので、お互いに全台登録する。
1
2
3
4
|
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:
1
2
3
4
5
6
7
8
9
10
|
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:
1
2
3
4
5
6
7
8
9
|
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:
1
2
3
4
5
6
7
8
9
|
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.
|
一斉にクラスタに追加していると、たまにタイミングが悪くて失敗して、以下のようなエラーとなることがある。
1
2
3
|
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)
|
その時は、もう一度実行すれば大体うまくいく。
そして、クラスタに参加できていることを確認して完了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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のセットアップをする。
Ref: https://memo-linux.com/proxmox-4-x-mise-en-place-dun-cluster-ha-avec-ceph/
- ただし、このCeph storageにはVM imageしか置けないことに注意する(ファイルストレージではないので、ISO等は配置できない)
全台で pveceph
をインストールする。
pve01, pve02, pve03:
最初の1台でCephを初期化する。
pve01:
1
|
pveceph init --network 192.168.1.0/24
|
そして、全台でCeph monitorを作成する。
pve01, pve02, pve03:
全台でCephのOSDを作成する。(こちらはWeb UIから)
Web UI操作時に出力されるログの例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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
以下の手順でWeb UIからCeph storageをクラスタに登録する。これはクラスタ内のどれか1ノードで実施したら全体に適用される。
- GUIからDatacenter -> Storage -> Add -> RBD
VM用(Monitor(s)の区切りは `;)
Linux container用(Monitor(s)の区切りは `;)
pve01でCeph用の鍵のコピーを実施:
1
2
|
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
と打ちたくない。
1
|
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8006
|
- ただし、これは構築の際に、起動時に設定されるように仕込み済み。
VivaldiとnoVNCの相性が悪い
PVEで仮想マシンのコンソールをnoVNCで開いたとき、マウスが役に立たない問題に対する回避