LinuxServer
Proxmox
参考サイト †
最初に †
概要 †
- Proxmox VE という仮想化プラットフォームがある事を知ったので
ちょっと構築してみようかと思いました〜(^^)
- 検証時のVersion -> 7.3
- 古いPCを有効活用できる技術です。
特徴 †
- フリー
- vCenterありのVMWareの機能(複数サーバでのHA, クラスタリング、仮想マシンの移動など)が可能
- VMWareでいうvSANのような機能をcephで実現
- GUIあり
- 対応CPUの幅が広い
(Debianのため)
(Intel VT-x機能があれば大抵動く。Celronでも可能)
(VMWareはほぼXEONでしか動かない)
- 既存システムとの共存可能
Install, Download †
Download †
初回アップデート †
- Sources list を変更
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
- gpg keyのダウンロード
wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
- pve-enterprise.list のコメントアウト
vi /etc/apt/sources.list.d/pve-enterprise.list
- repository の更新とアップグレード
apt update && apt full-upgrade
最低限のソフトのインストール †
apt install vim ethtool tmux clamav iftop iotop qemu-guest-agent sudo
IPV6 の無効化 †
LDAP参加 †
tmux の設定 †
起動後の初期ユーザー名 †
クラスタの作成 †
- 「データセンター」-> 「クラスタ」(上から4つめ)
- 「クラスタの作成」
- クラスタ名を入力してそのまま作成する。
クラスタへの参加(Join) †
既存ホストでの作業 †
- 既存のホストから「データセンター」を選択 -> 「クラスタ」->「Join情報」
- 「Join情報」をコピー
新規ホストでの作業 †
- 「データセンター」を選択 -> 「クラスタ」
- 「クラスタに参加」
- 先程のJoin情報を貼り付け
- rootのパスワードの入力(不要?)
クラスタから削除 †
- ProxMox?ホストのシャットダウン
- 別のホストに ssh でログインして、対象ノードを削除する。
- 以下のディレクトリを削除
- sudo rm -fr /etc/pve/nodes/pve2
ストレージ, 通常(ceph以外) †
新規HDDの追加(thin diskの追加) †
GPT初期化 †
- 左ツリーから個別のホストを選択
- ディスクを選択
- 新規に追加したdisk(sdbとかsdc)を選択
- 「GPTでディスクを初期化」ボタンを押す
LVM-Thinを作成 †
- 「LVM-Thin」を選択
- 「作成: Thinpool」ボタンを押す
- ディスクを選んで名前を適当に付ける。例) prox01SdbThin?
消す場合 †
- 左ツリーから個別のホストを選択
- ディスクを開く
- 「LVM-Thin」の中の消したい名前を選択
- 右上の「More」を開き「破棄」を選択
分散ファイルストレージ(ceph)を構成 †
概要 †
- とりあえず最低限、3台のPCやサーバが必要
- Thin は無い
インストール †
- 「データセンター」-> 「Ceph」(上から5つめ)をクリック
- 「Cephをインストール」をクリック
- 「Quincyのインストールを開始」をクリック
- 「Do you want to continoue」 と聞かれるので「y」 Enterを入力
- インストールが完了したら「次へ」を押す
設定 †
- 「Public Network IP/CIDR」は選べるのを選んでおく
- 「Cluster Network IP/CIDR」もとりあえず選べるのを選んでおく
- 「Number replicas」と「Minimum replicas」はとりあえず標準のままで「次へ」
- 「完了」ボタンを押す
モニタ †
- 新規 ceph サーバを立てたら登録が必要
OBD †
- ディスクの登録が必要
pool †
- 仮想マシンを保存できるcephのストレージ
- これがないとvMotion的な「マイグレート」もストレージ移動が伴うと思う
- サイズ : レプリカ数(最小3)
- minサイズ : 縮退運転のサイズ(最小2)
状況確認, Status,等 †
- まず一杯になる前兆などの指標
- OSD_NEARFULL : もうそろそろリバランスできなくなりますよ、って警告
- OSD_BACKFILLFULL:既にリバランスができないよ、って警告
- OSD_FULL:クラスタの書き込みが実行できなよ、って警告
仮想マシンの中のディスクが[No Such File or Directory]で消せない †
cephをフルに近くしてめちゃくちゃ遅くなった時 †
- とりあえずモニタサーバを順番に再起動
- 容量を見るのはOSD一覧(cephのサマリでは容量逼迫を検知できない)
- HDDの1つがやたらと遅い可能性もある。
- rewaightの調整
- 以下、チラ裏。。。
- 大きいディスクを消す時、めちゃくちゃ重い。
1時間に1% 位しか進まない。。。
そのおかげで、他のサーバに影響が出ていて、DNSやDHCP, Proxyなどインフラ周りのサーバはもちろん、
Webサーバやデータベースサーバにも影響が出ていてしんどい。。。
日記用のプライベートWordpressにもアクセスできないし、SKKのGoogle IMEも利用できないので、
日本語変換もままならん。。。早く解決しないかなぁ。。。
- 次の日には直りました(^^)
ディスクエラーの消し方 †
リカバリ, リバランスのために仮想マシンが重い, 遅い(ceph, チューニング) †
- 一番効果が高い方法(osd_recovery_op_priority, osd_client_op_priority 1)
- 数字が低い方が高優先度
- 自分は一晩放置したら反映されてました
- 値は1〜64
- 例
- sudo ceph config set osd osd_recovery_op_priority 63
- sudo ceph config set osd osd_client_op_priority 1
- どうしても重い時はリカバリ, リバランスを停止
- その他、効きそうな設定
- sudo ceph config set osd osd_max_backfills 1
- sudo ceph config set osd osd_recovery_max_active 1
- sudo ceph config set osd osd_max_pg_log_entries 1
- sudo ceph config set osd osd_memory_target 2000000000
- sudo ceph config set osd osd_backfill_full_ratio 0.3
- ceph tell 'osd.*' injectargs '--osd-max-backfills 1'
- sudo ceph config set osd osd_backfill_scan_max 128
- sudo ceph config set osd osd_op_num_threads_per_shard 0
- これはbackfill, recoveryにあまり影響しないので、デフォルトの0推奨
0以外だとストレージがやたらと重くなる
full ratio †
- sudo ceph osd set-nearfull-ratio <float[0.0-1.0]>
- sudo ceph osd set-full-ratio <float[0.0-1.0]>
- sudo ceph osd set-backfillfull-ratio <float[0.0-1.0]>
その他, コマンドなど †
- 参考サイト
- Red Hat Ceph Storage
- SUSE Enterprise Storage 6とCeph
- Red Hat PG数の増加
- sudo ceph config set mon mon_osd_down_out_interval 600
- OSDがdownしてパフォーマンス低下した場合、outにするまでの時間(デフォルト:600秒)
- osd recovery threads
- デフォルトで 1 つのスレッドでリカバリープロセスのスレッド数が制限されます
- sudo ceph config set osd osd_recovery_max_active 3
- ceph OSD が送信に失敗するのを防ぐために Ceph OSD が同時に実行するリカバリー要求の数を制限します。
- osd_max_backfills
- Ceph OSD から 10 への同時バックフィルの最大数を設定します
- ワークロードによっては、通常のリカバリーを完全に回避し、代わりにバックフィルを使用することが推奨されます。
バックフィルはバックグラウンドで実行されるため、I/O は OSD のオブジェクトで続行できます。
osd_min_pg_log_entries オプションを 1 に設定し、osd_max_pg_log_entries オプションを 2 に設定することで、
リカバリーではなくバックフィルを強制できます。
- PG(Placement Group)の数を変更する(256へ変更)
sudo ceph osd pool set cephPool pg_num 256
- scrub関連
weight, reweight関連 †
- reweight
- 使用状況による OSD の重みの設定(自動, reweight)
- この方法は大量のBackfillを産むので注意!個別調整がお勧め
- 設定
- テスト
sudo ceph osd test-reweight-by-utilization 101 0.1 11
- 手動(reweight)
- weight
- 1つずつ更新(weight)
sudo ceph osd crush reweight name weight
- ceph pool バケット名による一括更新(weight)
ネットワークBonding(Teaming) †
- cephのネットワーク帯域がアップアップで遅いので、Bonding(Teaming)してみます。
(今回はLinuxなので「Bonding」の言葉で統一します)
- 設定手順
- bond0の作成
- 「データセンター」配下からBondingしたいホストを選択
- 「システム」->「ネットワーク」
ネットワークの設定は「設定を適用」ボタンを押すまで反映されないので、
それまで自由にいじれます。戻したい時は「リバート」を選択
- ホストにsshして、以下のファイルをバックアップしておいた方が良いかもしれません。
/etc/network/interfaces
sudo cp /etc/network/interfaces /etc/network/interfaces.bak
- 今の「vmbr0」のIPアドレスをメモしておく
- 今の「vmbr0」を削除
- 「作成」->「Linux Bond」
- 名前:bond0
- IPv4/CIDR : (空白)
- ゲートウェイ : (空白)
- スレーブ:enp0s31f6 enp1s0
- モード : balance-alb
(balance-alb以外を選択する時は、上位スイッチの設定が必要となる時があるので注意すること。
ここの設定を間違えるとホストがネットに繋らなくなる)
- vmbr0の作成
- 「作成」->「Linux Bridge」
- 名前:vmbr0
- IPv4/CIDR : 123.123.123.123/24
- ゲートウェイ : 123.123.123.254
- ブリッジポート : bond0
- 「設定を適用」を押す
このボタンを押す時はサーバの前に居る事を強く推奨。
ネットワークに繋がらなくなるとコンソールでの作業が必要
Cluster network †
パブリック・ネットワークを別セグメントとする †
CephFS †
特徴 †
- ファイルサーバ機能。
- 仮想マシンは作れない
消し方 †
- ストレージのアンマウント(データセンターから)
- 各ノードの「Ceph」->「CephFS」からメタバースを停止 -> 破棄
- 以下のコマンドを実行
pveceph fs destroy NAME --remove-storages --remove-pools
課題と今後 †
課題 †
- とにかく遅い。
- Moose File Systemの方が体感的には圧倒的に早い
- リバランスの負荷が実環境に影響を与える(遅いので)
- 結果、DNS, DHCP, Proxyのようなネットワーク基幹となるシステムも止まる。
- ストレージの使用率がばらける(Weight調整がマニュアル指向)
- ProxMox?用を起動するストレージの一部をcephへ転用できない。
今後 †
- ファイルサーバ機能はMoose File Systemを継続
- 仮想環境の共通ストレージのみcephとする
その他、ストレージ関連 †
ディスク, disk, キャッシュ関連 †
- 参考サイトからの結論
- キャッシュはHDDの場合、Write back
- キャッシュはSSDの場合、Write back(unsafe)
- SSDならSSD エミュレーションはON
- IO ThreadはON
- SCSIコントローラーはVirtio SCSI Single
- Barrier無効化は効果があるがリスク対効果を考えて設定
CentOS6ではエラー †
- ひっかかったのは、SCSIコントローラ
- Virtio SCSI Singleではパニックエラー(panic+0xa7)が起きるため、「LSI 53C895A」とした。
ISOイメージ用のストレージ †
仮想マシンの追加 †
- ProxMox?のWeb管理コンソール、右上「VMを作成」ボタンを押す
(コンテナはceph poolでは作れないので注意)
- 全般
- 「ノード」(ProxMox?のホスト)を選択
- 「VM ID」:適当にダブらない3桁の数字 例) 123
- 「名前」:仮想コンピュータの名前
- 「リソースプール」:空白
- ネットワーク(NIC)の「ファイアウォール」チェックボックスはオフにしといたほうが良いかも
- OS
- ISOイメージの選択(ISOが格納できるファイルシステムは->Proxmox VE#g52994f9)
仮想マシンの初期設定(お好みで) †
- apt install vim tmux clamav iftop iotop qemu-guest-agent ntp
- ntpの設定
sudo vim /etc/ntp.conf
- lxde化
sudo apt install lxde
Windows10 †
仮想マシン †
- HDDはSATAを選択
- HDDが認識されなかった時は、仮想マシンごと作り直す。
Windows Guest Agent, VirtIO †
- Windows10
- ダウンロードサイト(ProxMox)
- ViirtIO serial
- デバイス・マネージャー
- 他のデイバイス
- PCIシンプル通信コントローラー
- ダブルククリック
- 「コンピューターを参照して...」
- d:\vioserial\w10\adm64
- 次へ
- その他
- 種類
- NetKVM
- viostor
- vioscsi
- qxldod
- Balloon
- インストール
- デバイスマネージャ
- 操作
- 「レガシー...追加」
- 「一覧から選択...」
- 「全てのデバイス...」
- 「ディスク使用」
- 「参照」
- DVDから適宜選択
- Windows 2008 Server
- I had a similar problem and I fixed it with old virtio driver version 137.
You can find old version of virtio here:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
- [Control Panel]->[Device Manager]->Add device(Legacy)
バックアップとリストア †
バックアップ †
- 「データセンター」 -> ホスト -> 仮想マシン -> バックアップを選択
- 「今すぐバックアップ」を押す
- バックアップ先やモードを選択
- 「バックアップ」ボタンを押す
cephのバックアップ †
ストレージ・レプリケーション †
リストア †
- 「データセンター」 -> ホスト -> 仮想マシン -> バックアップを選択
- リストアするイメージを選択 -> 「リストア」ボタンを押す
- ターゲットのストレージを選択して「リストア」ボタンを押す
vMotion的な(マイグレート) †
- 仮想マシンを右クリック -> 「マイグレート」
- マイグレート先を選択
WOL(参考) †
- BIOS(UEFI)で設定しておくこと。
- proxmox側での設定
- ProxMox?サーバへrootでログイン
- 以下のコマンドでネットワーク・アダプタを確認
ip addr show
- 自分の場合のNIC名は「enp2s0」
- ethtoolのインストール
apt install ethtool
- 対応状況の確認
ethtool enp2s0
- Wake-on: のあとの文字を確認
- Wake-on: dなら次へ
- Wake-on: gならWOLの設定はできてる
- ethtoolでWOLを設定
ethtool -s enp2s0 wol g
- 元に戻ってしまうので自動で設定
crontab -e
- ProxMox? サーバへWOL用のIPを登録(マックアドレスは例)
pvenode config set -wakeonlan 12:34:56:78:90:ab
ASROCK マザーボードのUEFI設定 †
- 参考サイト
- [アドバンスド] > [ACPI Configurarion(ACPI設定)]
- [PCIE Devices Power On(PCIEデバイス電源オン)]:有効
VMwareからの移行 †
移行手順 †
- VMwareの仮想マシンをシャットダウンする
- 「エクスポート」を選択(イメージは不要)
- 一旦PCへファイルを落とす
- ProxMox? VEのホストへファイル転送(自分はSCPで送りこみました)
- ProxMox? VEのホストで以下のコマンドを実行
CentOS 6 †
- ネットワークカードの追加
- eth0 -> eth1へ変更
- CentOS6(ネットワークマネージャーを使用しない場合)
- cd /etc/sysconfig/network-scripts/
- cp ifcfg-eth0 ifcfg-eth1
- vi ifcfg-eth1
DEVICE=eth1
#HWADDR=00:0C:29:FD:61:33
NAME="System eth1"
- qemu-guest-agent のインストール
apt install qemu-guest-agent
CentOS 7 †
- 起動エラーの回復
- エラー内容
Starting Dracut Emergency Shell...
Warning: /dev/centos/root does not exist
Warning: /dev/centos/swap does not exist
Warning: /dev/mapper/centos-root does not exist
Generating "/run/initramfs/rdsosreport.txt"
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/
- このエラー、本当に調べるのに時間かかった。。。6時間位調べてようやくわかりました。。。
- 結論:HDDをIDEに変更する
- 手順
- import先(proxmox)の対象のバーチャル・マシンを開く
- ハードウェア
- ハードディスクを1回「デタッチ」する
- 再度ハードディスクをダブルクリックしてIDEとして実装する
- 通常通りバーチャル・マシンを起動する
- fstabからネットワークドライブを一時的にコメントアウトする
- Network Manager の設定
nmtui
- 参考:起動エラーの確認コマンド
journalctl -xb
VMWareへの移行 †
ctrl + alt + f1 などの押し方 †
「モニタ」機能を使う方法 †
- ProxMox?のコンソールで対象の仮想マシンを開く
- 「モニタ」を選択(コンソールではない)
- 以下のコマンド(例)を入力、送信
sendkey ctrl-alt-f1
noVNCの左側にある四角の中にAが書いてあるボタン †
- 例) Ctrl + Alt + F1
- Ctrl と Alt を押し反転させる
- 「F1」を押す
USB †
参考サイト †
- https://pve.proxmox.com/wiki/USB_Devices_in_Virtual_Machines
設定 †
- ProxMox? VEへSSH
- USB一覧の取得
lsusb
- 注目するのは以下のID(例)
- Bus 001 Device 037: ID 0511:083f N'Able (DataBook?) Technologies, Inc. PXW3U4
- 追加したい仮想マシンの番号を指定し以下のコマンドを実行して追加
- 追加されたUSBはWeb consoleからも見る事が可能
その他 †
ロックの解除方法 †
- ホストで以下を実行
sudo qm unlock <VM ID>
仮想マシン一覧の表示方法 †
ProxMox? Webタブを複数開いた状態でブラウザを起動した時の認証 †
- どこかのタブで1回認証する
- 隣のタブでももう一度認証する
- 再度、元のタブに戻る
- 上記2つ以外のタブを再読み込みする
クラスター内のホストのIPアドレスを変更しようとして失敗した話 †
前提 †
- IPを変更しようとしたホスト名をAとする。
- その他のホスト名をBとする。
やってしまった事と現象 †
- ホストAのIPを変更したらホストB経由で確認したクラスター内で×が付きクラスターから閉めされてしまった
- ホストAのIPを戻してもホストB経由で確認したクラスター内で復帰しなかった
ホストAをクラスタへ再参画させる †
- 再参画準備
- 上記 Remove a Cluster Node のコマンド
- sudo pvecm nodes
- sudo pvecm delnode (Name)
- 例) sudo pvecm delnode hp4
- sudo systemctl stop pve-cluster
- sudo systemctl stop corosync
- sudo pmxcfs -l
- sudo rm /etc/pve/corosync.conf
- sudo rm -r /etc/corosync/*
- sudo killall pmxcfs
- sudo systemctl start pve-cluster
- sudo pvecm delnode oldnode
- sudo pvecm expected 1
- sudo rm /var/lib/corosync/*
- その他(再参画するホスト上で実行)
- sudo cp -fr /etc/pve/nodes /etc/pve/nodes.bak
- sudo rm -fr /etc/pve/nodes
- あとは普通に再参画
仮想マシンが重たい現象について †
- 自分はMoose File Systemと併用してるので、Moose File SystemとCephの負荷を
合わせたものが重たい時に仮想マシンが重たくなる。
** ファイルサーバ機能(ceph pool) †
どうやってファイルサーバ機能を実現するか †
- LVMだと思ってたら、ext4でも普通にオンラインで容量の追加、削減ができた。
- あとはNFSとSMBのどっちにするか。。。
- 以下で普通に実装できたけど、ファイルサーバ機能としては、Moose File Systemが優れてるので、
cephでは構築しない事にした。
- Linux からはNFS
- Windows からは SMB
swapの使用率がやたらと多い †
- 以下のファイルを編集
sudo vim /etc/sysctl.conf
- 以下を追加
vm.swappiness = 10
- 反映
sudo sysctl -p
調査、設定中 †
Win11(調査中) †
Zabbix(調査中) †
参考サイト †
ProxMox7(Debian 11)へインストール †
wget https://repo.zabbix.com/zabbix/4.0/debian/pool/main/z/zabbix-release/zabbix-release_4.0-4%2Bdebian11_all.deb
sudo dpkg -i zabbix-release_4.0-4+debian11_all.deb
sudo apt update
sudo apt install zabbix-agent
耐障害性 †
ディスクの容量減らし方 †
SPICE(画面共有) †
noVNCで画面が更新されない場合 †
- noVNCを使っても「ハードウェア」の「ディスプレイ」を「SPICE(qxl)」へ変更する。
調査完了 †
Moose File System との共存 †
個人メモ †
VM migration †
- 基本設定
- ホスト
- 仮想マシン
SATA2つ追加 †
backup †
Window managerのlxde化 †
不要となったProxMox?ホストを売る †
LANケーブル、タグ付け †
Windowsの設定, ライセンス認証, バージョンアップ †
録画サーバの向き先変更 †
ディスクに関する今後メモ †
- 録画サーバのディスクを2TB -> 500GBへ
- USBでディスク追加
Zabbix 6.0 †
(おまけ) テスト環境PCについて †
HP ProDesk? 400 G2.5 Small Form Factor Business PC †
BIOS(UEFI) 設定 †
- F10
- 変更箇所
- ストレージ
- 起動順序
- UEFI USB DVD を一番上へ
- F10 で終了
- セキュリティ
- システムのセキュリティ
- 仮想化技術(VTx/Vtd) -> 有効
- F10で終了
- 安全なブートの構成
- 電源
- ハードウェア・パワー・マネージメント
- カスタム
- 電源投入時オプション
- POSTメッセージ -> 有効
- 電源コード抜き差し後 -> オン