Mercurial > hg > Papers > 2015 > taiki-master
changeset 0:7a299eb01565
add files
author | taiki |
---|---|
date | Fri, 09 Jan 2015 15:20:37 +0900 |
parents | |
children | e117860b3064 |
files | paper/Makefile paper/chapter1.tex paper/chapter2.tex paper/chapter3.tex paper/chapter4.tex paper/introduciton.tex paper/master_paper.tex |
diffstat | 7 files changed, 458 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/Makefile Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,78 @@ +TARGET = master_paper + +SRC = $(wildcard *.tex) + +LATEX = platex -shell-escape +BIBTEX = pbibtex +DVIPS = dvips +DVIPDFM = dvipdfmx +RM = rm -f +EBB = extractbb + +# Option definitions +DVIPDFMOPT = +DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 + +# Suffixes definitions +.SUFFIXES: .tex .dvi + +# Recipes +all: pdf# $(TARGET).ps + open $(TARGET).pdf + +dvi: + @echo "----------- make dvi file ($(TARGET).dvi) ----------" + $(LATEX) $(TARGET) + $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) + $(LATEX) $(TARGET) +pdf: dvi + $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) + +clean: + $(RM) *~ \#* + @if [ -f $(TARGET).aux ];\ + then $(RM) $(TARGET).aux;\ + fi + @if [ -f $(TARGET).log ];\ + then $(RM) $(TARGET).log;\ + fi + @if [ -f $(TARGET).toc ];\ + then $(RM) $(TARGET).toc;\ + fi + @if [ -f $(TARGET).lof ];\ + then $(RM) $(TARGET).lof;\ + fi + @if [ -f $(TARGET).lot ];\ + then $(RM) $(TARGET).lot;\ + fi + @if [ -f $(TARGET).big ];\ + then $(RM) $(TARGET).big;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).ilg ];\ + then $(RM) $(TARGET).ilg;\ + fi + @if [ -f $(TARGET).idx ];\ + then $(RM) $(TARGET).idx;\ + fi + @if [ -f $(TARGET).ind ];\ + then $(RM) $(TARGET).ind;\ + fi + @if [ -f $(TARGET).dvi ];\ + then $(RM) $(TARGET).dvi;\ + fi + @if [ -f $(TARGET).pdf ];\ + then $(RM) $(TARGET).pdf;\ + fi + @if [ -f $(TARGET).out ];\ + then $(RM) $(TARGET).out;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).blg ];\ + then $(RM) $(TARGET).blg;\ + fi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter1.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,87 @@ +\chapter{既存の教育用計算機システム} + 本章では、現在使用されている情報工学科の環境について述べる。また、教育用に使用可能な VM や Container 等の資源の管理機構とその特徴について触れる。 + +\section{情報工学科のシステム} + オンプレミスの blade server で構成されており、VMWare ESXi で動作している VM を VMWare vSphere Client で管理している。図\ref{fig:iesystem} のように、VM の所有者はメールでシステム管理者へ VM 作成依頼を行い、学科の提供する Web サービスで VM の起動・停止などの操作を行う。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.7]{figures/ie_system.pdf} + \caption{情報工学科のシステム} + \label{fig:iesystem} + \end{center} +\end{figure} + +\subsection{Web サービス実装} + VM を操作するインターフェイスとして、Web サービスを使用することが可能である。GUI を操作するためにブラウザを起動する必要があり、また新しい GUI の操作に慣れなければならない。 + +VM の作成はメールなどの連絡手段を使って、管理者を通して行う。既成の VM を blade server へアップロードするにも、管理者と連絡し手続きを取る。 + +\subsection{VMWare vSphere Client} + GUI で VM を操作することができ、豊富な機能と高度な操作が可能となっている。VM などの資源に対する操作の権限を細かく扱うことができるため、利用者に対して権限を配布することが可能である。しかし GUI が複雑なため、操作に習熟する必要がある。 + +\section{Kernel based Virtual Machine (KVM)} + +Linux 自体を VM の実行基盤として機能させるソフトウエアである。無償で利用可能なオープンソースとなっている。CPU の仮想化支援機能を必要とし、完全仮想化により仮想化環境を提供する hypervisor である。 + +KVM は Linux のカーネルモジュールとして実装されており、OS が持つメモリ管理プロセスやスケジューリング機能を利用している。 +アーキテクチャは図\ref{fig:kvmarch}のようになっている。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.7]{figures/kvmarch.pdf} + \caption{KVM architecture} + \label{fig:kvmarch} + \end{center} +\end{figure} + +Intel-VT や AMD-V などの仮想化支援機能を持つプロセッサや BIOS の載っている PC 上で動作する。 + +情報工学科のシステムは、KVM と VMWare ESXi の2つの hypervisor を利用している。情報工学科全体の VM 管理は、主に VMWare ESXi が使われている。 + +\section{Vagrant} +Vagrant は異なる環境に移行可能な開発環境を構築・管理・配布することができる開発環境作成ツールである。手軽にテスト環境を導入・破棄することができ、変更が加わっても開発環境・本番環境に自動的に適用できる。 + +VirtaulBox などのプロバイダを使って、VM を Vagrant 経由で立ち上げる。手軽に起動・停止・ssh ログインできるため、Web サービスの開発や開発環境の配布などに利用される。 + +Vagrant は KVM をプロバイダとするプラグインを持っており、 KVM を VirtualBox のようにプロバイダとして動作させることができる。KVM 上の VM を Vagrant の操作と同じように起動・停止・設定することが可能となっている。 + +\subsection{Vagrant Box} + Vagrant で VM を利用する際に、VM のベースとなるイメージファイルが Vagrant Box である。 Vagrant で Vagrant Box を VM イメージとして起動し、設定し、開発環境を配布することができる。また配布されている Vagrant Box を取得して起動し、使用することができる。 + +\section{libvirt} + VM 管理ツールである virsh を含む、 VM の制御を抽象化したライブラリである。 VM の情報を習得・操作することが可能な API 群である。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.7]{figures/libvirt_arch.pdf} + \caption{libvirt architecture} + \label{fig:libvirtarch} + \end{center} +\end{figure} + +図\ref{fig:libvirtarch}のように、アプリケーションから libvirt API を呼び出すと、API に従って内部の VMM API もしくは資源管理 API を呼び出し、制御を行う。libvirt は VM の管理だけではなく、仮想ネットワーク、仮想ストレージも管理することができる。もともとは Xen に対して API を提供していたが、現在は多くの hypervisor に対応している。 + +\subsection{virsh} +virsh は libvirt に付属する VM 管理コンソールである。libvirt の API で VM を制御する。VM の起動や停止、情報の表示、ゲストが接続しているネットワークやデバイスの管理をすることができる。 + +複数のユーザを管理するためには、ユーザやグループの設定が必要である。またユーザやグループの設定を行ったとしても、ネットワークなどの操作をを制限することができない。 + +\section{Docker} +Docker とは、Docker 社が開発してるオープンソースのコンテナ型仮想化ソフトウエアである。Linux 上で Linux Container (LXC) を活用し、コンテナ型の仮想環境を作成する。 + +Docker は、コンテナでアプリケーションを実行するため、コンピュータリソースの隔離・制限や、他のホスト、他のコンテナとのネットワーク構成や、ファイル・ディレクトリの世代と差分の管理などの機能を持つ。 + +Docker では新しい独自技術をほとんど用いていない。しかし新たなサーバ資源の運用方法として注目されており、学生が学ぶのに必須な技術の一つである。 + +\section{OpenStack} + +OpenStack はオープンソースで開発されているクラウド環境構築用のソフトウエア群である。VM やストレージ、ネットワークといった一番レイヤの低いリソースを提供するクラウド環境を構築することができる。 + +OpenStack は複数のコンポーネントの組み合わせで成り立っている。コンポーネント間を HTTP ベースの REST API か、AMQP (Advanced Message Queuing Protocol) を使った非同期通信で接続し、分散型の協調動作を行っている。 + +中心となるコンポーネントは Nova であり、役割は VM を起動することである。ユーザからの要求に従い必要な VM を起動するための一切を管理する。Nova は各種 hypervisor に対応している。また、LXC や Docker にも対応している。 + +管理する権限はネットワークを切りわけ、その下に VM を作成するという形になる。 + +%\section{docker} 新しく出た container 使うやつ
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter2.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,109 @@ +\chapter{提案する教育用計算機システム} + +本研究で提案するシステムは、学生が計算機資源を学習に活用できるよう補助するシステムである。また開発したアプリケーションのデプロイを行える環境を提供する。 + +学科の資源である blade server 上に提案する計算機システムを作成し、検証を行う。 + +複数の blade server で、GFS2 でフォーマットされた一つの Fibre Channel ストレージを共有し、Fibre Channel ストレージに VM のディスクイメージ、docker のアプリケーションを保存する。 + +\section{Fedora} +RedHat が支援するコミュニティ Fedora Project によって開発されている Linux ディストリビューションである。最新の技術を積極的に取り込んでおり、その成果を Ret Hat Enterprise Linux に取り込まれるといった検証目的の位置づけになっている。 + +最新の Fedora を使用することによって、教育用計算機システムで使われる OS やソフトウエアを予測し、また検証することが可能である。そのため今回のシステムでは Fedora を利用し、次期システムが稼働する際の環境を構築し、検証を行った。 + +\section{Global File System 2 (GFS2)} + +GFS2 は、Linux カーネルファイルシステムインターフェィスに直接的に対応するカーネルファイルシステムである。単独システム内、またはクラスタ設定の一部として使用することができる。GFS2 では、すべてのノードから同じ共有ストレージへアクセスできる。クラスタファイルシステムの一部として使用された場合、GFS2 は分散型メタデータと複数ジャーナルを運用する。 + +また GFS2 は 64-bit アーキテクチャを土台にしており、理論的に 8EB のファイルシステムを収容することができる。 + +\section{Distributed Lock Manager (DLM)} + +Red Hat のクラスタでは DLM が使用される。DLM は GFS2 ファイルシステムへのアクセスなどの、クラスタ内のリソースへのアクセスを制御する。DLM がない場合、共有ストレージへのアクセス制御がなくなり、クラスタ内のノードが相互のデータを破損させる可能性がある。 + +DLM は各クラスタノードで実行され、またロック管理はクラスタ内のすべてのノードを対象として行われる。 + +\section{The corosync Cluster Engine (corosync)} +corosync は、高可用性を実現するクラスタ基盤ソフトウエアである。 OpenAIS プロジェクトの中で作られたソフトウエアが分離されたものとなっている。 + +Extended virtual syncrony と呼ばれる形式で、マルチキャストやブロードキャストを使ったノード間のメッセージング機能を提供する。また、クラスタ全体でプロセスグループを管理するための管理機能や、基礎的なアプリケーションの監視などの機能も提供する。 + +\section{Logical Volume Manager (LVM)} + +LVM とは、複数のハードディスクやパーティションにまたがった記憶領域を一つtの論理的なディスクとして扱うことのできるディスク管理機能である。 + +LVM はハードディスク内に、物理ボリュームと呼ばれる LVM 用のパーティションを用意する。その物理ボリュームを初期化し、物理エクステントと呼ばれる小さな領域に分割する。複数の物理ボリュームをまとめて新たに作られる管理単位が、ボリュームグループになる。そして実際のパーティション同様に利用できるボリューム、論理ボリュームを作成する。 + +\section{Clustered Logical Volume Manager (cLVM)} + +\section{ie-virsh} +ie-virsh は本研究室で開発している、virsh をラップすることで作成された VM 管理用のツールである。ie-virsh を使用することにより、他のアカウントの VM を操作させずに VM 所持者に操作させられる。 + +表\ref{table:ievirshfunc}が ie-virsh の機能である。 + +\begin{tiny} + \begin{table}[ht] + \begin{center} + \caption{ie-virsh のコマンド} + \label{table:ievirshfunc} + \small + \begin{tabular}[t]{c|l} + \hline + define & XML の template を元に domain を作成 \\ + \hline + undefine & define で作成した domain を削除 \\ + \hline + list & define で作成した domain を一覧表示 \\ + \hline + start & 指定した domain 名の VM を起動 \\ + \hline + destroy & 指定した domain 名の VM を停止 \\ + \hline + dumpxml & domain の XML を参照 \\ + \hline + debug & linux kernel のコードを gdb で読む\\ + \hline + \end{tabular} + \end{center} + \end{table} +\end{tiny} + +virsh ではネットワークやストレージの設定を行うことも可能である。しかし ie-virsh では管理者ではない使用者にはネットワークやストレージの設定ができないよう実装している。 + +また ie-virsh には virsh にあるようなネットワークの構成などの、管理者側がするべき操作はなく、管理者でない使用者には操作できないようになっている。 + +\subsection{資源の制限} + +ie-virsh がラップしている virsh は、XMLファイルを使って VM を管理している。XML ファイルには VM のパラメータが記述されている。 + +ie-virsh では学生が使用する VM が使用する資源を制限するために、予めこの XML ファイルのテンプレートを作成し利用している。 + +XML テンプレートにされている設定は、以下のようになる。 + +\begin{itemize} + \item ネットワークの設定 + \item I/O 設定 + \item VM イメージのフォーマット + \item CPU 数 + \item メモリ容量 +\end{itemize} + +これによって学生が使用する背資源を制限し、過剰なメモリや CPU の確保を防ぐ。 +また学生が VM を多く作成するという形で資源を利用してしまうことを防ぐために、作成できる VM の数を4台に制限した。 + +\subsection{ie-virsh debug} + +本研究では、ie-virsh の新しい機能として debug コマンドの実装を行った。Linux Kernel のソースコードを読む方法は2つ挙げられる。Linux kernel をダウンロードし、そのソースコードをそのまま読むという手法と、gdb で逐次ソースコード追って読むという手法である。 + +gdb で Linux kernel のソースコードを追うには、手間がかかってしまう。また授業で Linux kernel を題材に出す際、gdb で追うことができると課題の幅が広がる。そこで本研究のシステムに、gdb で Linux kernel を追う機能を追加する。 + +KVM には gdb で接続するための port を指定し、接続すると gdb から Linux kernel のデバッグへ入ることができる。更に libvirt の XML 設定ファイルに、KVM へ gdb で接続するために開ける VM の port を記述することで、VM の port を開くことができる。 + +今回は port の pool から port 番号を取得し、デバッグ対象の VM を起動し、その VM へ gdb で接続するという方法で実装した。 + + +\section{ie-docker} + +\section{LDAP との連携による権限管理} + +\newpage
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter3.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,47 @@ +\chapter{提案する計算機システムでの管理方法} + +\section{VM アップロード} + +GFS2 でフォーマットを行った Fibre Channel Strage に VM イメージを保存する。この計算機システムでは各 VM 所有者ごとにディレクトリを分けて使う。 + +VM 使用者は手元の PC で VM イメージを作成し、実験・開発環境を作成する。次に VM イメージを Fibre Channel Strage にアップロードする。アップロード先は Fibre Channel Strage 上にある所有者自身のディレクトリである。ie-virsh は VM を設定する XML ファイルをテンプレートから作成するため、VM イメージの形式は固定である。そのため、VM イメージをテンプレートに合わせた形式にしなければならない。 + +アップロードした後は、ie-virsh で XML テンプレートを使用したドメインを作成する。ie-virsh は virsh のドメインを自動的に定義することができる、define コマンドを持っており、そのコマンドを利用する。 + +ドメインの定義は下記のように行う。 + +\begin{verbatim} +% ie-virsh define [01 - 04] +\end{verbatim} + +ドメインは 01 から 04 までの名前をつけることができる。 + +\section{VM の起動} + +ie-virsh を使用して、VM を起動する。 +起動するには、下記の操作を行う。 + +\begin{verbatim} +% ie-virsh start [01 - 04] +\end{verbatim} + +また、VM に適切な設定を行うことによって、console でログインすることができる。 +console を使用するには下記の操作を行う。 + +\begin{verbatim} +% ie-virsh console [01 - 04] +\end{verbatim} + +各 VM 所有者自身で console にアクセスすることができるため、間違った VM の設定を適用したとしても管理者に連絡する必要はない。console でアクセスし、正しい設定に変更することができる。 + +\section{VM のリストの取得} + +\section{VM の停止} + +\section{kernel debug 方法} + +\section{docker の起動} + +\section{docker の停止} + +\section{docker からの Fibre Channel Strage の使用}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter4.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,6 @@ +\chapter{提案する計算機システムの評価} +\section{実験環境} +\section{GFS2 の Fibre Channel ストレージ} + +\section{授業 Operating System での使用} +\subsection{Vagrant Box について}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/introduciton.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,30 @@ +\chapter{序論} + + IT 技術の進歩は目まぐるしく、学習するためのコストや環境も必要になってくる。また学習のための環境を管理することは手間がかかる。 + + そのため、学生が IT 技術を学習するための環境を供したい。また提供した環境を使用させるにあたり、管理者への煩雑な手続きを無くすことで管理者の負担を減らさなければならない。管理者側の負担として、VM の作成やアップロード、また VM のセキュリティ管理が挙げられる。 + + またクラウドサービスと連携し、学生が開発したサービスをオンプレミスの環境から外のサービスへ移行することで、サービスへの高速なアクセスが可能になる。 + +そこで当研究室では、学生に VM を提供し、資源を管理するための ie-virsh を開発している。 ie-virsh は複数の hypervisor に対応した virsh の wrapper となっている。 + +本研究では、IT 技術を教育するための環境を学生に提供するために、教育用計算機システムの構築と評価を行った。本研究では教育用計算機システムに、ie-virsh と、docker で使われる資源を管理するための ie-docker を開発し、学生に使用させる。またその際に Block device の共有に使う Filesystem 、 GFS2 の評価を行った。 +現在のシステムと比較して、本研究で提案する計算機システムが教育用に適正であることを確認した。 + +\pagenumbering{arabic} + + +\newpage + +\section{本論文の構成} +本論文では, 初めに分散データベースについて既存の製品を例に挙げながら述べる. +RDBとNoSQLについて説明し, 既存のNoSQLデータベースの特徴について説明する. +第3章では, Jungleの持つデータ構造, 非破壊的木構造について説明し, Jungleにおけるデータ編集について述べる. +第4章では, 非破壊的木構造による Jungle の基本設計と, 分散バージョン管理システムを参考にした分散設計 +について述べる. +第5章では, 第4章で行った設計を元にJungleへ行った分散実装について述べる. +第6章では, 第5章で実装した分散データベースJungleの評価を行うため, 簡易掲示板プログラムを実装する. +この掲示板プログラムはJungleとCassanraそれぞれのデータベースを使うものを用意した. +学科の並列環境上で開発した掲示板プログラムを複数のノードで実行させ, 負荷をかけることで Jungle と Cassandra の +性能比較を行う. +第6章では, 本研究におけるまとめと今後の課題について述べる.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/master_paper.tex Fri Jan 09 15:20:37 2015 +0900 @@ -0,0 +1,101 @@ +\documentclass[a4j,12pt]{jreport} +\usepackage{master_paper} +\usepackage{ascmac} +\usepackage[dvipdfmx]{graphicx} +\usepackage{here} +\usepackage{listings,jlisting} +\usepackage{comment} +%\input{dummy.tex} %% font + +\jtitle{IT 技術学習のための教育用計算機システムの研究} +\etitle{A Study of \\distributed Database Jungle} +\year{平成26年度} +\affiliation{\center% + \includegraphics[clip,keepaspectratio,width=.15\textwidth] + {images/u-ryukyu-Mark.eps}\\ + \vskip10mm + 琉球大学大学院 \ 理工学研究科\\ 情報工学専攻} + +\author{平良 太貴} + +\marklefthead{% 左上に挿入 + \begin{minipage}[b]{.4\textwidth} + \includegraphics[height=1zw,clip,keepaspectratio]{images/emblem-bitmap.eps} + 琉球大学大学院学位論文(修士) +\end{minipage}} +\markleftfoot{% 左下に挿入 + \begin{minipage}{.8\textwidth} + IT 技術学習のための教育用計算機システムの研究 +\end{minipage}} + +\newcommand\figref[1]{図 \ref{fig:#1}} +\newcommand\tabref[1]{表 \ref{tab:#1}} + +\lstset{% + language={Java}, + basicstyle={\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + frame={tb}, + breaklines=true, + columns=[l]{fullflexible},% + numbers=left,% + xrightmargin=0zw,% + xleftmargin=1zw,% + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex% +} + + +%%% 索引のために以下の2行を追加 +\usepackage{makeidx,multicol} +\makeindex +\begin{document} + +\maketitle +\newpage + +%\input{judge.tex} + +%要旨 +\input{abstract.tex} +\input{abstract_eng.tex} + +%目次 +\tableofcontents + +%図目次 +\listoffigures + +%表目次 +\listoftables + +%chapters +\input{introduciton.tex} +\input{chapter1.tex} +\input{chapter2.tex} +\input{chapter3.tex} +\input{chapter4.tex} +%\input{chapter5.tex} +%\input{conclusion.tex} + +%謝辞 +\input{thanx.tex} + +%参考文献 +\nocite{*} +\bibliographystyle{junsrt} +\bibliography{master_paper} + +%発表文献 +\input{appendix.tex} + +%付録 + +\printindex +\end{document}