view paper/chapter/technology_overview.tex @ 39:a967cf51ba92

fix typo
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Tue, 09 Feb 2021 14:55:10 +0900
parents 697579cf6cf8
children 130918274b4f
line wrap: on
line source

\chapter{技術概要}

本章では,本研究で使われる技術,本コースで利用しているサービスについて概要を説明する.

\section{仮想化}
仮想化はコンピュータのCPUやメモリ,ディスクなどハードウェアのリソースを分割又は統合して,
仮想的なコンピュータやネットワーク環境を生成し提供する技術である.
仮想化技術にはホストのどの部分から仮想化するかによってホスト型,ハイパーバイザー型,コンテナ型に分けることができる.

\subsection{ホスト型}
ホスト型の仮想化は,ホストとなるOS上(以下,ホストOS)に仮想化ソフトウェアをインストールし,仮想化ソフトウェア上で別のOS(以下,ゲストOS)を稼働させる手法である(図\ref{fig:host}).
仮想化ソフトウェアをホストOSのアプリケーションの1つとして導入及び管理できるため,手軽に仮想化を実現することができる.
しかし,ゲストOSの処理はホストOSを経由しなければならないため,オーバーヘッドが大きくなる.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=120mm]{fig/host.pdf}
    \end{center}
    \caption{ホスト型}
    \label{fig:host}
\end{figure}

\subsection{ハイパーバイザー型}
ハイパーバイザー型の仮想化は,仮想化システムを直接ハードウェアにインストールし,ハイパーバイザー上で複数のゲストOSを稼働させる手法である(図\ref{fig:hyper}).
ハイパーバイザーが直接ハードウェアを管理するため,仮想化によるオーバーヘッドを小さくすることで,リソースを効率的に利用することができる.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=120mm]{fig/hyper.pdf}
    \end{center}
    \caption{ハイパーバイザー型}
    \label{fig:hyper}
\end{figure}

\subsection{コンテナ型}
コンテナ型の仮想化は,OSレベルの仮想化技術を利用して複数のコンテナと呼ばれる独立空間を形成し,独立空間でアプリケーションをそれぞれ構築することができる手法である(図\ref{fig:container}).
各コンテンはKernelによって独立したプロセスとして実行される.
前述のホスト型やハイパーバイザー型と比べ,コンテナはゲストOSを起動することなくアプリケーションを実行することができるため,リソース効率が良く処理が軽量である.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=120mm]{fig/container.pdf}
    \end{center}
    \caption{コンテナ型}
    \label{fig:container}
\end{figure}

\section{KVM}
KVM(Kernel-based Virtual Machine)\cite{kvm}はLinux Kernel2.6.20以降に標準搭載されているハイパーバイザーである.
KVMはIntel VT及びAMD-Vを含むx86ハードウェア上の完全仮想化をサポートしている.
KVMはハイパーバイザーと各仮想マシン間のレイヤーとしてVirtio APIを使用する.
Virtio APIにより,仮想マシンに準仮想化デバイスを提供する.
これにより,仮想化によるオーバーヘッドを少なくできる.

\section{Docker}
Docker\cite{docker}はDocker社が開発,提供するLinux上で動作する隔離されたLinuxコンテナをデプロイ,実行するアプリケーションである.
Dockerはコンテナを実行するだけでなく,コンテナイメージの作成や共有する仕組みも提供している.
Dockerコマンドを処理するにはDocker daemonと呼ばれるデーモンプロセスを実行する必要がある.
このDocker deamonはDockerで行う処理を一箇所で実施する(図\ref{fig:docker}).
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=150mm]{fig/docker.pdf}
    \end{center}
    \caption{Docker}
    \label{fig:docker}
\end{figure}

\subsection{Docker Registry}
Docker RegistryはDcokerイメージを保存,配布できるサーバサイドアプリケーションである\cite{registry}.
以下の場合に利用される.
\begin{itemize}
  \item イメージの保存場所を厳密に管理する
  \item イメージを配布するパイプラインを全て所有する
  \item イメージの保存と配布を社内や学内の開発ワークフローに密に統合する
\end{itemize}

\section{Podman}
PodmanはRedHat社が開発,提供するLinux上でOCIコンテナを開発,管理,実行するためのデーモンレスコンテナエンジンである\cite{podman}.
PodmanはOCI準拠のコンテナランタイムに依存するため,前述したDockerなど他のコンテナエンジンと互換性を持つ.
また,Podman CLIはDocker CLIと同じ機能を提供する.
Podmanはコンテナとイメージストレージ,コンテナランタイムを介してLinxuカーネルと直接対話することで,デーモンレスで実行される(図\ref{fig:podman}).
Podmanの制御下にあるコンテナは,特権ユーザ又は非特権ユーザのいずれかによって実行することができる.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=120mm]{fig/podman.pdf}
    \end{center}
    \caption{Podman}
    \label{fig:podman}
\end{figure}

\section{Singularity}
Singularity\cite{singularity} とは,HPC環境向けに設計されたコンテナプラットフォームである.
Singularityはマルチユーザに対応しており,コンテナ内での権限は実行ユーザの権限を引き継ぐため,ユーザに特別な権限の設定が必要ない.
またデフォルトで,\$HOME,/tmp,/proc,/sys,/dev がコンテナにマウントされ,サーバ上のGPUを簡単に利用できる.
コンテナイメージはSingularity Image Format(以下,sif)と呼ばれる単一ファイルベースのため,アーカイブや共有が容易である.

\section{Ceph}
Cephは,RedHat社が開発,提供する分散ファイルシステムである.
Cephは分散オブジェクトストレージであるRADOS(Reliable Autonomic Distributred Object Storage)がベースとなっている(図\ref{fig:ceph}).
オブジェクトストレージはデータをオブジェクトという単位でやり取りをするストレージシステムである.
複数のストレージを束ねて利用できるオブジェクトストレージが分散オブジェクトストレージである.
RAODSでは,Object Storage Daemonにデータ格納する.
オブジェクトの配置には,クラスタマップを元にControlled Replication Under Scalable Hashing(以下,CRUSH)アルゴリズムによりオブジェクトの格納先を選択する.
配置の計算に必要とする情報はごくわずかであるため,Cephクラスタ内のすべてのノードは保存されている位置を計算できる.
そのため,データの読み書きが効率化される.また,CRUSHはデータをクラスタ内のすべてのノードに均等に分散しようとする.
\par
RODOSはクラスタに保存されるデータの管理を待ち受け,保存オブジェクトへのアクセス方法としてObject Gateway,RADOS Block Device(以下,RBD),CephFS がある.
Object GatewayはHTTP REST経由でクラスタに保存されるオブジェクトへ直接アクセスが可能である.
RBD はブロックデバイスとしてアクセスが可能で,libvirt を組み合わせてVMのディスクとして使用できる.
また,RBDドライバを搭載したOSにマップし ext4 や XFS などでフォーマットして利用できる.
CephFS は POSIX互換のファイルシステムである.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=120mm]{fig/ceph.pdf}
    \end{center}
    \caption{Cephのアーキテクチャ}
    \label{fig:ceph}
\end{figure}

\par
Cephクラスタのノードとはクラスタを構成するサーバであり,ノードは以下の4つのデーモンが実行できる.
\begin{itemize}
  \item Ceph Monitor
  \item Ceph OSD
  \item Ceph Manager
  \item Ceph Metadata Server
\end{itemize}

\subsection{Ceph Monitor}
Ceph Monitor(以下,MON)ノードはクラスタのヘルス状態に関する情報,データ分散ルールを維持する.
障害が発生した場合,クラスタ内のMONノードでPaxosという合意アルゴリズムを使用して,どの情報が正しいかを多数決で決定する.
そのため,奇数個のMONノードを設定する必要がある.

\subsection{Ceph OSD}
Ceph OSD(以下,OSD)は物理ストレージになる.このデーモンは1台のHDDなどの物理ストレージに対して,1つのデーモンが動作する.
OSDはMONと通信し,OSDデーモンの状態を提供する.

\subsection{Ceph Manager}
Ceph Manager(以下,MGR)ノードはクラスタ全体から状態情報を収集する.
MGRはMONと共に動作し,外部のモニタリングシステムや管理システムのインターフェースとして機能する.

\subsection{Ceph Metadata Server}
Ceph Metadata Server(以下,MDS)ノードはCephFSのメタデータを保存する.

\section{Ansible}
Ansible\cite{ansible}はRedHat社が開発,提供するシステム構成,ソフトウェアの展開などを行う自動化ツールである.
あらかじめ用意した設定ファイルに従ってソフトウェアのインストールや設定を自動的に実行できるため,コンピュータクラスタを構築する際に時間の短縮やミスの削減に有用である.
Ansibleの特徴としてエージェントレスがある.構成管理を行う機器がPythonの使用が可能,SSHで疎通することが可能であれば対象とすることができる.
Ansibleの一連の処理はPlaybookという単位にまとめられ,YAML形式で記述される.YAML形式で記述されていることで,可読性が高く学習が容易である.
また,インフラストラクチャをコードとして残すことができる.

\section{Slurm}
Slurm\cite{slurm}はLinuxクラスタ向けのフォールトトレラント設計のジョブスケジューリングシステムである.
Slurmには以下の3つの主要機能を提供する.
\begin{itemize}
  \item 計算を実行するユーザに対してリソースへの排他的,非排他的なアクセスを割り当てる
  \item 割り当てられたノード上のジョブの開始,実行,モニタリングを行う
  \item 待機中のジョブキューを管理することにより,リソースの競合を解決する
\end{itemize}
\par
Slurmでは主にslurmctldとslurmdで構成される(図\ref{fig:slurm}).
また,slurmdbdを有効にすることで,データベースへアカウンティング情報を記録することができる.
アカウンティング情報を記録することで,ジョブの優先度を調整することが可能となる.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=150mm]{fig/slurm.pdf}
    \end{center}
    \caption{Slurmのアーキテクチャ}
    \label{fig:slurm}
\end{figure}

\section{rsnapshot}
rsnapshot\cite{rsnapshot} はrsycnに基づく増分バックアップユーティリティである.
ローカルマシンやリモートマシンのスナップショットを取ることができる.
リモートマシンとはSSH経由で通信を行う.
rsnapshotは設定された数のスナップショットを保持するため,使用されるディスク領域は継続的に増加することはない.
データの復元にはバックアップの保存先からrsyncなどを用いてコピーを行うことで,特定のファイルの復旧などにも迅速に対応できる.
バックアップを自動化するにはcronなどと併用する必要がある.

\section{Akatsuki}
Akatsukiは本コースで利用しているVM貸出システム,有線LAN接続サービス,内部DNSの機能を提供するWebコントロールパネルである.
Rubyで記述されており,フレームワークとしRuby on Railsを採用している.
本コースの学生は学科のアカウントでログインしVMの作成などを行う.現在はシステム管理チームが管理,保守を行っている.

\section{ie-virsh}
ie-virsh\cite{ie-virsh}は本コースで利用しているvirshをラップしたVM管理ツールである.
ユーザのUID及びGID情報を使用し,他のユーザVMを操作させない仕組みを持つ.
ie-virshはVM管理だけでなく,Linux Kernelのデバッグを行うことができる.
そのため,本コースのOperating Systemという授業で,OSについて学ぶ一環として課題で利用されている.
現在はシステム管理チームが管理,保守を行っている.