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

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

さまり

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

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

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

Proxmox VE 5.1 – 3 nodes cluster 構築

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  

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 eth0 && ip link set mtu 9000 eth1 )          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: http://www.server-world.info/query?os=CentOS_7&p=kvm&f=7

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  

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