第2回 東京SoftLayer勉強会に参加してきました
第2回 東京SoftLayer勉強会に参加してきました
第2回 東京SoftLayer勉強会に参加してきました。前回は5月だったので、2ヵ月ぶりの開催ですね。
前回の勉強会メモと同様に、今回も勉強会メモをまとめてみました。
サムライスタートアップアイランドご紹介
はじめに勉強会の会場であるサムライスタートアップアイランドの紹介がありました。
2011年11月1日にオープンしたサムライスタートアップアイランド(SSI=Samurai Startup Island)は、スタートアップ企業とその支援者が集まる場所を提供しているとのことです。
(SSIの紹介ページからの受け売りです……)
会計士さんも常駐しており、スタートアップ企業におけるファイナンス関係のお悩みごともフォローできますとのことです。
現在50社ほど入居しており、コワーキングスペースとしても活用されています。羽田空港が近いことから、外国からの訪問者への対応も考えられており、海外展開を考える企業にもオススメのようです。
SoftLayerのストレージと使い分けについて
発表者は日本IBMの新島さん。SoftLayerのビギナーズガイドを書いておられるとのことです。
SoftLayerはサーバに組み込まれたストレージだけでも複数種類あり、ストレージの観点から利用可能なサービスの一望と目的別の使い分け方の解説という内容での発表でした。
SoftLayerのストレージ
- BM(Mare Metal Server)とVS(Virtual Server)で構成が異なる
BMのディスク
VSのディスク
- ローカルドライブとSAN storageのを選んで指定できる
ローカルドライブは2台で400Gまで
SAN storage(iSCSI)は以下の構成から選択できる
- 5台まで、25,100Gまで、2台以降は100-2000GBまで)の2つ
仮装サーバのローカルドライブ→故障すると少し時間かかる
- (SoftLayerの中の人が故障ドライブをせっせと交換する)
- SANストレージの場合はバックアップ構成がくめる
- ただしネットワークも障害点となる可能性が出てくる
portable diskとしての利用
- virtual serverの2nd diskを切り離し、portable diskとして利用できる
- 切り離したportable diskは、別のvirtual serverに取り付けることもできる
SoftLayerで利用できるストレージ
iSCSIのスナップショット
- 30分毎にレプリケーションが実行される
- 切り戻しは時間がかかる
- レプリカのカスケードはできないので、マスター復帰時には必ず切り戻しが行われる
- 切り戻しは時間がかかる!とのこと
各ストレージの使い分け
サーバのストレージとして
データ用、バックアップ用として
その他
- 近日中にiSCSIの弱点を克服したソリューションが出てくるかも?
Why Riak & Why SoftLayer?
発表者はBashoジャパンの上西さん。Riakの紹介とSoftLayer上でRiakを動かすと何が嬉しいかについての発表でした。
スライドはWhy Riak? Why SoftLayer?にて公開されています。
スライドが公開されているので、自分のメモは不要かとも思ったのですが、前回のSoftLayer勉強会でのRiakのLTはただ聞くだけになっていたので、今一度自分なりにRiakについてがーっとまとめてみました。
Riakについて
- システムの運用において可用性は大事
- しかし、可用性に対する脅威は数多く存在する
- ハードウェア故障
- ネットワーク故障
- スプリットブレインシンドロームによるデータ破壊
- ソフトウェアのアップデートやメンテナンス
- システムの過負荷
Riak
- RiakはErlangで記述されたNoSQLデータベース
- QuorumレプリケーションによりN個のノードにデータを複製することでノードがひとりくらい壊れていてもデータの書き込みが可能
- 各ノードが管理するパーティションはConsistent Hashingと呼ばれる160bitのキー空間を等分したリング状のハッシュテーブルになっている
- レプリカはN個(=3)のノードにコピーされる
ノードが一時故障した場合
- リング上の次のパーティションに書き込むことで、レプリカがN個ある状態を担保しておく
- 一時故障ノードが復旧した時にレプリカを返す
ネットワーク故障の場合
- Riakでは分断された各ノードでの書き込みを許容する
- 復旧したら書き戻す
- そのため、復旧時にデータの不整合(暗黙的な上書き)が発生する場合がある
- 以下の手法で不整合を回避する
- 不整合のパターンはいくつか存在する
- write-write conflick →比較的対応しやすい
- write-delete conflick →少しややこしい対応手順になる
Riakのバックアップ機能
なぜクラウドでRiakか
- DBなどのミドルウェアが優れていてもHWがこけたら意味がない
- なので、SoftlayerのBM上でRiakを使えると嬉しい
- なぜBMか?VSではダメなのか?
- 分散システムで大事なことは「故障の単位」
- VSが動いているBMがこけると、Riakからは多重故障にみえてしまう
- するとRiakの分散ノードがまるごと落ちるという事態が発生する
- そのため、RiakはBMでの運用を推奨している
その他
- SoftLayerのRiakならエンタープライズ版Riakが使用できる!
参考リンク
QuantaStor概説/QuantaStor使ってみた
発表者はアファーム・ビジネスパートナーズ株式会社の西脇さんと日本情報通信の常田さん。
QuantaStoreのアーキテクチャ、ユースケース、使ってみた感想についての発表でした。
OSNEXUSについて
- QuantaStore(QS)の開発元
- クラウドコンピューティング、BigData、ハイパフォーマンスのアプリケーションに対応可能なSDS(Software Defined Storage製品の製造を行っている企業
QuantaStor
来月のSoftwareDedisnからSoftLayerの記事が連載されるとのこと
参考リンク
Object Storageを使ってみた
発表者は日本IBMの高良さん。SoftLayer探検隊の隊長さんとのことです。
Raspberry PiとSoftLayerのObjectStorageの連携に関する発表でした。
発表スライドは第二回SoftLayerユーザ会 ラズベリーパイとオブジェクトストレージを繋いでみたにて公開されています。詳細な手順はSoftLayer探検隊 第16回 Raspberry Pi で撮影した画像をSoftLayerのオブジェクト・ストレージに保存するにて公開されています。
発表の中で「組み込み機器とクラウドがつながる時代になった」という説明が印象的でした。最近IoT(Internet of Things:モノのインターネット)という言葉(バズワード?)をよく聞きますが、Raspberry PiとSoftLayerの組み合わせによる具体的な事例を見るのは初めてだったので、とても感銘をうけました。
SoftLayerでDockerを使ってみた
発表者はCUPA(一般社団法人クラウド利用促進機構)の荒井さん。
Dockerを利用したシステムポータビリティとDR(Disaster Recovery)対応について、SoftLayerを使用しての解説でした。
Dockerは個人的に試してみたいと常々思っていたので、SoftLayerの話は一旦どっかに置いておき(Dockerだけに)、別途ブログ記事を分けてみました。
まとめ
第2回東京SoftLayer勉強会に参加してみました。何となくSoftLayerがどんなものが見えてきた気がします。とはいえ、実はまだSoftLayerを使ってみたことが無いので、そろそろ触ってみようかなと思います。
CentOS 7.0でDockerを動かしてみた
CentOS 7.0でDockerを動かしてみた
先日開催された第2回東京SoftLayer勉強会で『SoftLayerでDockerを使ってみた』という発表があり、Dockerのインストールから使い方までの手順が解説されていました。
個人的にDockerを試してみたいということもあり、さっそく解説されていた手順を参考にDockerを動かしてみました。勉強会ではCentOS 6系向けの手順となっていましたが、私の方ではCentOS 7系で試してみました。
CentOS 7.0のセットアップ
GUI等は使用しないので、minimalインストールの状態からDocker環境を構築していきます。以下はインストール後にsshログインが行えるようになるまでの手順です。
SELinuxの無効化
/etc/selinux/configを以下のように修正し、SELinuxを無効化します。
--- config.orig 2014-07-29 11:24:02.949653548 +0900 +++ config 2014-07-29 11:24:09.957653412 +0900 @@ -4,7 +4,7 @@ # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. -SELINUX=enforcing +SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected.
grub.cfgの設定
起動時のコンソールログを見えるようにしておきたいので、/boot/grub2/grub.cfgを以下のように修正します。ついでにLANGもen_US.UTF-8に変更しておきます。
--- grub.cfg.orig 2014-07-29 11:24:18.721653243 +0900 +++ grub.cfg 2014-07-29 11:24:38.572652858 +0900 @@ -81,7 +81,7 @@ else search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61 fi - linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=ja_JP.UTF-8 + linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8 initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img } menuentry 'CentOS Linux, with Linux 0-rescue-6764668114ff4741a8994286ae140fdd' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-6764668114ff4741a8994286ae140fdd-advanced-dd4521d9-ca1c-462b-b353-2ba57bf4fc61' { @@ -95,7 +95,7 @@ else search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61 fi - linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet + linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 initrd16 /boot/initramfs-0-rescue-6764668114ff4741a8994286ae140fdd.img } if [ "x$default" = 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' ]; then default='Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64'; fi;
ホスト名の設定
以下の手順でホスト名を設定します。
# echo dockertest.furandon.net > /etc/hostname
固定IPアドレスの設定
DHCPよりも固定IPアドレスの方が作業しやすいため、Arch Wikiの『固定IPアドレス』を参考にしながら設定します。
/etc/conf.d/network@enp0s3にIPアドレス等を記述します。/etc/conf.dディレクトリは存在しないので予め作成しておきます。
# mkdir /etc/conf.d # touch /etc/conf.d/enp0s3
/etc/conf.d/network@enp0s3の中身は以下の通りです。
address=192.168.0.232 netmask=24 broadcast=192.168.0.255 gateway=192.168.0.1
/etc/systemd/system/network@.serviceにsystemdのユニットファイルを作成します。
(Arch Wikiの内容を参考に作成しています)
Arch Wikiの/etc/systemd/system/network@.service中でipコマンドが/usr/bin/ipでフルパス指定されていますが、CentOS-7では/sbin/ipとパスが異なるので注意してください。
[Unit] Description=Network connectivity (%i) Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/conf.d/network@%i ExecStart=/sbin/ip link set dev %i up ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i ExecStart=/bin/sh -c 'test -n ${gateway} && /sbin/ip route add default via ${gateway}' ExecStop=/sbin/ip addr flush dev %i ExecStop=/sbin/ip link set dev %i down [Install] WantedBy=multi-user.target
サービスを有効化します。
# systemctl enable network@enp0s3.service
/etc/resolv.confの設定
インストール時にrpmパッケージのインストール等でネットワーク設定が行われており、/etc/resolv.confには(DHCPでのIPアドレス取得による)nameserver設定が入っています。固定IPアドレスでも同じnameserver設定を利用するため、この段階での設定変更は不要です。
LANGの設定
/etc/locale.confでLANGをen_US.UTF-8に設定します。
(日本語のままでいいよ、という場合はこの手順をスキップしてください)
--- locale.conf.orig 2014-07-29 11:24:55.014652540 +0900 +++ locale.conf 2014-07-29 11:25:01.258652419 +0900 @@ -1 +1 @@ -LANG="ja_JP.UTF-8" +LANG="en_US.UTF-8"
不要なサービスの停止
Dockerを試す用途では不要と思われるサービスを停止します。
$ sudo systemctl disable avahi-daemon.service $ sudo systemctl disable dbus-org.fedoraproject.FirewallD1.service $ sudo systemctl disable dbus-org.freedesktop.Avahi.service $ sudo systemctl disable dbus-org.freedesktop.NetworkManager.service $ sudo systemctl disable dbus-org.freedesktop.nm-dispatcher.service $ sudo systemctl disable NetworkManager-dispatcher.service $ sudo systemctl disable NetworkManager.service $ sudo systemctl disable postfix.service $ sudo systemctl disable tuned.service $ sudo systemctl disable avahi-daemon.socket
ユーザの追加
作業用のユーザを追加します。
$ sudo useradd -g users -G wheel -m -s /bin/bash fpig $ sudo passwd fpig
再起動
ここで一旦再起動します。再起動後、固定IPアドレスが付与されているか等の確認をおこないます。
$ sudo shutdown -r now
ここまでで最低限の設定は完了し、sshでログインできる状態になっています。
以降はsshログインした状態での作業となります。
Dockerを試してみる
dockerのインストール
docker.x86_64というパッケージが提供されているので、これをインストールします。
$ yum search docker ... docker-registry.noarch : Registry server for Docker docker.x86_64 : Automates deployment of containerized applications $ sudo yum install docker
勉強会で例示されていたCentOS 6系の環境では、EPELからDockerをインストールしていましたが、CentOS 7系の環境ではベースリポジトリにDockerパッケージが含まれていました。
$ rpm -qa | grep docker docker-0.11.1-22.el7.centos.x86_64 $ yum provides docker ... docker-0.11.1-19.el7.centos.x86_64 : Automates deployment of containerized : applications Repo : extras $ grep -A5 '^\[extras' /etc/yum.repos.d/CentOS-Base.repo [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Dockerサービスを有効化します。DockerパッケージにSystemdのユニットファイルが同梱されているので、これを利用します。
$ rpm -ql docker-0.11.1-22.el7.centos.x86_64 | grep systemd /usr/lib/systemd/system/docker.service $ sudo systemctl enable docker.service ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service' $ systemctl list-unit-files | grep docker docker.service enabled
上記設定は再起動してから有効になるので、ここでは手動でdocker.serviceを起動します。
$ sudo systemctl start docker.service
さっそくdockerコマンドを使ってみます。
$ sudo docker version Client version: 0.11.1-dev Client API version: 1.12 Go version (client): go1.2 Git commit (client): 02d20af/0.11.1 Server version: 0.11.1-dev Server API version: 1.12 Go version (server): go1.2 Git commit (server): 02d20af/0.11.1
Dockerイメージのダウンロード
手元でDockerイメージを作るところまで試してみたかったのですが、まだ使い始めたばかりということもあり、既存のDockerイメージファイルを使ってみることにしました。
$ sudo docker pull ubuntu
しばらく待つとUbuntuのイメージファイルが手元にダウンロードされます。使用可能なイメージはdocker imageで確認できます。
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ba5877dc9bec 7 days ago 192.7 MB ubuntu trusty ba5877dc9bec 7 days ago 192.7 MB ubuntu latest ba5877dc9bec 7 days ago 192.7 MB ubuntu precise b9e56c8f2cf5 7 days ago 103.8 MB ubuntu 12.04 b9e56c8f2cf5 7 days ago 103.8 MB ubuntu 14.10 6ef6f1a66de1 7 days ago 194.1 MB ubuntu utopic 6ef6f1a66de1 7 days ago 194.1 MB ubuntu 12.10 c5881f11ded9 5 weeks ago 172.1 MB ubuntu quantal c5881f11ded9 5 weeks ago 172.1 MB ubuntu 13.04 463ff6be4238 5 weeks ago 169.4 MB ubuntu raring 463ff6be4238 5 weeks ago 169.4 MB ubuntu 13.10 195eb90b5349 5 weeks ago 184.6 MB ubuntu saucy 195eb90b5349 5 weeks ago 184.6 MB ubuntu 10.04 3db9c44f4520 3 months ago 183 MB ubuntu lucid 3db9c44f4520 3 months ago 183 MB
Dockerコンテナの起動
さっそくDockerでUbuntuを起動してみます。
$ sudo docker run -i -t ubuntu:14.10 /bin/bash
サクッとUbuntuが起動しました!
/etc/lsb-releaseを見ると、確かにUbuntuです。
root@9cf71dd83894:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.10 DISTRIB_CODENAME=utopic DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (development branch)"
Dockerコンテナのデタッチ・アタッチ
起動したDockerコンテナ上でexitするとコンテナは停止してしまいます。練習もかねてDockerコンテナのデタッチ→アタッチ→exitによるコンテナ停止という手順を試してみます。
Dockerコンテナを終了せずに抜ける(デタッチする)には、Ctrl+p Ctrl+qを入力します。
root@9cf71dd83894:/# (ここでCtrl+p Ctrl+qを入力)$ $
docker psコマンドで稼働しているコンテナを確認できます。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cf71dd83894 ubuntu:14.10 /bin/bash 9 minutes ago Up 9 minutes backstabbing_rosalind0
コンテナにアタッチしてみます。
$ sudo docker attach 9cf71dd83894 root@9cf71dd83894:/#
無事にアタッチでできました。後はexitでコンテナを終了します。
root@9cf71dd83894:/# exit exit $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $
export/import
私の手元ではまだ試していませんが、イメージファイルのexport/importも可能です。
以下の手順でexport/importを行います。
$ docker export <コンテナID> $ docker export 14773ff9e93c > myweb.tar # コマンド例
$ docker import [リポジトリTAG] $ docker import < - myweb:rel1 < myweb.tar # コマンド例
ローカルストレージのアタッチ
こちらも私の手元では試していませんが、Runコマンドの"-v"オプションでホストのディレクトリをアタッチ可能です。
$ docker run -t -i -v <local_dir>:<container dir>:<rw|ro> centos /bin/bash $ docker run -d -p 5000:5000 -v /home/hoge/data:/tmp/data centos # コマンド例
/home/data/dataは、共有ストレージ(NFS)やディスクミラー(DRBD)、分散ストレージ(Ceph-fs)等を利用して自分でミラーリングします。
まとめ
参加した勉強会でDockerの一連の使用手順が解説されていました。Dockerを覚えてみたいと思っていたので、さっそく覚えた手順を自分の環境で試してみました。
思っていたよりも簡単にコンテナの実行が行え、ついに我が家にもDockerの技術が伝来したという感じです。
(種子島に火縄銃が伝来した……という気分です)
まだ試してはいないものの、イメージのexport/importやプライベートリポジトリといった機能もあるようなので、勉強会用のイメージ提供に活用できればと思います。