完全性を失うことなく、1秒で50Gbベースの製品から製品へのクローンを作成



ツールリスト





まえがき



私の名前はEvgeny Savelovです。ネットワーク、仮想化、WindowsおよびLinuxサーバーで働いており、プログラマーと小さな会社の顧客の仕事を調整しています。



多くの人がProxmoxなどの仮想化システムを使用しているようですが、LXCとZFSを活用する方法がわかりません。 多くは、Ext4などの従来のファイルシステム、およびコンテナのクローン作成とバックアップのための従来の方法を単純に使用します。 これにより、大きなコンテナのクローン作成中にダウンタイムが発生し、サーバーの負荷が高くなります。



私の経験を共有しようとします。



また、6分間のスクリーンキャスト形式で資料を準備しました。 音声の伴奏がないので、ヘッドフォンを探すことはできません:)。 ただし、以下に注釈があります。



ビデオを開く




初期設定



Proxmox

ZFSに直接インストールされます

ZFS

Proxmoxのサポートはデフォルトで有効になっています。 デフォルト設定は悪くありません。 疑問が生じます:ZFS上のスワップパーティションとKVM仮想マシンのzvolブロックサイズ。

Lxc

Proxmoxのサポートはデフォルトで有効になっています。 デフォルト設定は素晴らしいです。

モンゴッド

Proxmox Webコンソールを使用して作成されたLXCコンテナー内の50Gbテストベース



クローニングとテスト



1.ソースコンテナーを知る



コンテナのルートファイルシステムは、スナップショットを含むディスク上の56.5GiB、およびスナップショットを除くディスク上の30Gibを占有します。



zfs list rpool/data/containers/subvol-105-disk-1 NAME USED AVAIL REFER MOUNTPOINT rpool/data/containers/subvol-105-disk-1 56.5G 98.3G 30.0G /rpool/data/containers/subvol-105-disk-1
      
      





以下の図から、コンテナーが44.4GiBの論理スペースを占有していることがわかります(スナップショットとLZ4圧縮を除く)。



 zfs get logicalreferenced rpool/data/containers/subvol-105-disk-1 NAME PROPERTY VALUE SOURCE rpool/data/containers/subvol-105-disk-1 logicalreferenced 44.4G -
      
      





MongoDB 3.4データベースを使用したUbuntu 14.04コンテナー内



2. Proxmoxで新しいコンテナを作成します。元のコンテナをそこに複製します



新しいコンテナを作成するときは、メインコンテナで使用されるテンプレートをテンプレートとして指定する必要があることに注意してください。



つまり、メインコンテナーがUbuntu 14.04である場合、新しいコンテナーもUbuntu 14.04である必要があります。



これが行われない場合、おそらく元のコンテナからファイルシステムを複製した後、新しいコンテナは起動しません。 実際には、ファイルシステムに加えて、コンテナは、コンテナ内のOSに応じて特定の起動属性を持っています。



3.新しいコンテナのファイルシステムを破棄します。



角括弧内の番号は、新しいコンテナの番号に置き換えます。 注意 :この操作は元に戻せません!



 zfs destroy rpool/data/images/vm-[111]-disk-1
      
      





4.元のコンテナーのスナップショットを作成します



スナップショットは1つのアトミック操作です。



ZFSは、ファイルシステムのサイズに関係なく、スナップショットが即座に取得されるようにします。 また、スナップショットを取得する操作の「内部」で、ファイルシステムデータ(一貫性)が変更されないことも確認できます。



 zfs snapshot rpool/data/images/vm-[105]-disk-1@demo #demo -  
      
      





5.ソースコンテナのファイルシステムのクローンを作成します。



ファイルシステムのクローン作成は、常に別のファイルシステムのスナップショットを使用して行われます。 クローンの名前は、新しいコンテナの名前を考慮して指定する必要があり、ファイルシステムを作成した後、コンテナを起動するためにマウントポイントを変更する必要はありません。



 zfs clone rpool/data/images/vm-[105]-disk-1@demo rpool/data/images/vm-[111]-disk-1
      
      





6. zfs listの出力を実行し、クローンが追加のスペースを消費しないことを示します。



以下では、コンテナがディスク上で112KiBを取得し、30.0Gibを参照していることがわかります。



  zfs list rpool/data/containers/subvol-111-disk-1 NAME USED AVAIL REFER MOUNTPOINT rpool/data/containers/subvol-111-disk-1 112K 98.2G 30.0G /rpool/data/containers/subvol-111-disk-1
      
      





7.クローンコンテナを実行し、すべてが機能することを示します。 データベース部分を変更します。



コンテナは、Proxmox Webインターフェースから起動するか、次のコマンドを使用して起動できます。



 pct start 111
      
      





新しいコンテナのIPアドレスを調べるには、それにアクセスできます。



 lxc-attach -n 111 ifconfig exit
      
      





たとえば、MongoBoosterを使用してクローン化されたデータベースに接続し、一部のデータを変更する必要があります。 複雑なインデックスを課します。



スクリーンショット




8. zfs listの出力を実行して、クローンがデータベースの一部を変更するために必要なスペースを消費することを示します。



場所は変更されたブロックにのみ費やされます。



通常、ブロックサイズが大きいほど、より多くのスペースが消費されますが、zfsは透過的なlz4圧縮を使用するため、効率的な128KiBブロックを使用するオーバーヘッドが削減されます。



コンテナがディスク上の144MiBを占有し、30.1Gibを参照していることを以下に見ることができます



 zfs list rpool/data/containers/subvol-111-disk-1 NAME USED AVAIL REFER MOUNTPOINT rpool/data/containers/subvol-111-disk-1 144M 98.2G 30.1G /rpool/data/containers/subvol-111-disk-1
      
      





9.結果



将来的には、Proxmoxでコンテナを削除または作成する必要はありません。 クローンファイルシステムを破棄し、再度クローンを実稼働ベースから削除します。



これは即座に行われます。 クローンのネットワーク設定は変更されません。Macアドレスが変更されないためです。



結論の代わりに



あなたのコメントに依存しています。 私はすべての興味深い質問に答え、これらの質問とそれらへの回答で記事を補足しようとします。



All Articles