2014年12月31日水曜日

ORACLE 公開の Oracle Linux 6.x Docker イメージを使う。

ORACLE から Docker イメージが公開されています。
Oracle Linux 6.x / 7.x があります。
http://public-yum.oracle.com/docker-images/OracleLinux/

前回は、ORACLE の Docker RPM をインストールしてみました。
今回は、引き続き、
Oracle Linux 6.6 にインストールした Docker で
Oracle Linux 6.6 のイメージを起動してみます。

イメージのダウンロード

ホスト側の OS にて、wget コマンドでイメージをダウンロードします。
今回のイメージはこれです。
http://public-yum.oracle.com/docker-images/OracleLinux/OL6/oraclelinux-6.6.tar.xz
[root@docker01 ~]# wget http://public-yum.oracle.com/docker-images/OracleLinux/OL6/oraclelinux-6.6.tar.xz
--2014-12-29 05:19:01--  http://public-yum.oracle.com/docker-images/OracleLinux/OL6/oraclelinux-6.6.tar.xz
public-yum.oracle.com をDNSに問いあわせています... 184.51.198.32, 184.51.198.8
public-yum.oracle.com|184.51.198.32|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 73544076 (70M) [application/x-tar]
`oraclelinux-6.6.tar.xz' に保存中

100%[=================================================>] 73,544,076   480K/s 時間 2m 30s

2014-12-29 05:21:32 (477 KB/s) - `oraclelinux-6.6.tar.xz' へ保存完了 [73544076/73544076]

Docker へのイメージの登録

イメージを解凍して、Docker に登録します。
[root@docker01 ~]# ls -lh oraclelinux-6.6.tar.xz
-rw-r--r--. 1 root root 71M 11月 11 05:34 2014 oraclelinux-6.6.tar.xz
[root@docker01 ~]# xz -d oraclelinux-6.6.tar.xz ★解凍
[root@docker01 ~]# ls -lh oraclelinux-6.6.tar
-rw-r--r-- 1 root root 312M 11月 11 05:34 2014 oraclelinux-6.6.tar
[root@docker01 ~]# docker load -i oraclelinux-6.6.tar ★登録

イメージが登録されました。
[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
oraclelinux         6.6                 d56e767abb61        6 weeks ago         319.4 MB

コンテナの起動

登録したイメージから、コンテナを起動してみます。
「docker run」コマンド実行の直後から、起動されたコンテナに接続されています。
[root@docker01 ~]# docker run -i -t --name cont01 oraclelinux:6.6 /bin/bash
[root@4296678bec11 /]# uname -n ★ここからコンテナ
4296678bec11
[root@4296678bec11 /]# cat /etc/oracle-release
Oracle Linux Server release 6.6
[root@4296678bec11 /]# uname -r
3.8.13-44.1.1.el6uek.x86_64
サービスの自動起動設定は下記のような感じです。
[root@4296678bec11 /]# chkconfig --list
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rdisc           0:off   1:off   2:off   3:off   4:off   5:off   6:off
restorecond     0:off   1:off   2:off   3:off   4:off   5:off   6:off
rhnsd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off

YUM リポジトリも参照するように設定されています。
[root@4296678bec11 /]# yum repolist
public_ol6_UEKR3_latest               | 1.2 kB     00:00
public_ol6_UEKR3_latest/primary       |  11 MB     00:17
public_ol6_UEKR3_latest                              288/288
public_ol6_latest                     | 1.4 kB     00:00
public_ol6_latest/primary             |  45 MB     01:14
public_ol6_latest                                29075/29075
repo id                 repo name                                                   status
public_ol6_UEKR3_latest Unbreakable Enterprise Kernel Release 3 for Oracle Linux 6Se   288
public_ol6_latest       Oracle Linux 6Server Latest (x86_64)                         29075
repolist: 29363

public-yum-ol6.repo ファイルには、
ひととおりの Yum リポジトリが記載されています。
※有効にされているのは、public_ol6_latest と public_ol6_UEKR3_latest だけです。
[root@4296678bec11 /]# cat /etc/yum.repos.d/public-yum-ol6.repo | grep -E "\[.*\]|name|baseurl|enable"
[public_ol6_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/latest/$basearch/
enabled=1
[public_ol6_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/addons/$basearch/
enabled=0
[public_ol6_ga_base]
name=Oracle Linux $releasever GA installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/0/base/$basearch/
enabled=0
[public_ol6_u1_base]
name=Oracle Linux $releasever Update 1 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/1/base/$basearch/
enabled=0
[public_ol6_u2_base]
name=Oracle Linux $releasever Update 2 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/2/base/$basearch/
enabled=0
[public_ol6_u3_base]
name=Oracle Linux $releasever Update 3 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/3/base/$basearch/
enabled=0
[public_ol6_u4_base]
name=Oracle Linux $releasever Update 4 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/4/base/$basearch/
enabled=0
[public_ol6_u5_base]
name=Oracle Linux $releasever Update 5 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/5/base/$basearch/
enabled=0
[public_ol6_u6_base]
name=Oracle Linux $releasever Update 6 installation media copy ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/6/base/$basearch/
enabled=0
[public_ol6_UEK_latest]
name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/UEK/latest/$basearch/
enabled=$uek
[public_ol6_UEKR3_latest]
name=Unbreakable Enterprise Kernel Release 3 for Oracle Linux $releasever ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/UEKR3/latest/$basearch/
enabled=$uekr3
[public_ol6_UEK_base]
name=Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/UEK/base/$basearch/
enabled=0
[public_ol6_MySQL]
name=MySQL 5.5 for Oracle Linux 6 ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/MySQL/$basearch/
enabled=0
[public_ol6_gdm_multiseat]
name=Oracle Linux 6 GDM Multiseat ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/gdm_multiseat/$basearch/
enabled=0
[public_ol6_MySQL56]
name=MySQL 5.6 for Oracle Linux 6 ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/MySQL56/$basearch/
enabled=0
[public_ol6_spacewalk20_server]
name=Spacewalk Server 2.0 for Oracle Linux 6 ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/spacewalk20/server/$basearch/
enabled=0
[public_ol6_spacewalk20_client]
name=Spacewalk Client 2.0 for Oracle Linux 6 ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/spacewalk20/client/$basearch/
enabled=0
[public_ol6_ofed_UEK]
name=OFED supporting tool packages for Unbreakable Enterprise Kernel on Oracle Linux 6 ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/ofed_UEK/$basearch/
enabled=0
[public_ol6_playground_latest]
name=Latest mainline stable kernel for Oracle Linux 6 ($basearch) - Unsupported
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/playground/latest/$basearch/
enabled=0

コンテナからデタッチ

「Ctrl + p + q」キーで、コンテナから抜けます。
キーを押すと、すぐにホスト側の OS に戻ります。
「docker ps」コマンドで、コンテナが起動したままということがわかります。
[root@4296678bec11 /]# [root@docker01 ~]# ★キー入力で抜けた
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4296678bec11        oraclelinux:6.6     "/bin/bash"         17 minutes ago      Up 17 minutes                           cont01

コンテナの停止

コンテナを、「docker stop」コマンドで停止してみます。
停止中のコンテナは、「docker ps」だけだと表示されなくなりますが、
「-a」オプションで表示することができます。
[root@docker01 ~]# docker stop cont01
cont01
[root@docker01 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
4296678bec11        oraclelinux:6.6     "/bin/bash"         19 minutes ago      Exited (-1) 7 seconds ago                       cont01

コンテナの起動

「docker start」コマンドで停止中のコンテナを起動してみます。
「docker run」とは違い、新規作成ではなく以前に作成したコンテナが起動されます。
コンテナ ID も、停止前のままです。
[root@docker01 ~]# docker start cont01
cont01
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4296678bec11
       oraclelinux:6.6     "/bin/bash"         19 minutes ago      Up 5 seconds                            cont01

コンテナに再接続

起動したコンテナに再接続してみます。
[root@docker01 ~]# docker attach cont01

[root@4296678bec11 /]# ★接続した

イメージ登録からコンテナ起動/停止まで、ひととおり試してみました。
Docker サイトからバイナリを DL~インストールする場合とは違い、
デフォルトでも、余分な標準出力がなくなります。

以上、ORACLE 製 Docker イメージを使ってみる話でした。

2014年12月30日火曜日

Oracle Linux 6.x への Docker RPM インストール。

以前、Oracle Linux 6.5 に Doker のサイトから
docker バイナリを DL して使用してみました。
今回は、ORACLE のパブリック YUM サイトにある RPM で
Docker をインストールしてみます。
http://public-yum.oracle.com/repo/OracleLinux/OL6/addons/x86_64/

手順は、Oracle Linux のマニュアル、Docker の Web サイト
どちらにもあります。
Oracle Linux
Administrator's Solutions Guide for Release 6
https://docs.oracle.com/cd/E37670_01/E37355/html/index.html

Docker
Oracle Linux 6 and 7
https://docs.docker.com/installation/oracle/

今回の環境

今回は、Oracle Linux 6.6 にインストールします。
[root@docker01 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.6
[root@docker01 ~]# uname -r
3.8.13-44.1.1.el6uek.x86_64

Yum リポジトリの参照設定

Docker の RPM がある public_ol6_addons リポジトリを有効にします。
enabled=0 を enabled=1 に変更しておきます。
[root@docker01 ~]# vi /etc/yum.repos.d/public-yum-ol6.repo
[root@docker01 ~]# grep public_ol6_addons -A6 /etc/yum.repos.d/public-yum-ol6.repo
[public_ol6_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

Docker の RPM

Docker パッケージが
public_ol6_addons リポジトリにあることがわかります。
[root@docker01 ~]# yum list docker
読み込んだプラグイン:security
利用可能なパッケージ
docker.x86_64                       1.3.2-1.0.1.el6                       public_ol6_addons

この RPM をインストールします。
[root@docker01 ~]# yum info docker
読み込んだプラグイン:security
利用可能なパッケージ
名前                : docker
アーキテクチャ      : x86_64
バージョン          : 1.3.2
リリース            : 1.0.1.el6
容量                : 4.3 M
リポジトリー        : public_ol6_addons
要約                : Automates deployment of containerized applications
URL                 : http://www.docker.com
ライセンス          : ASL 2.0
説明                : Docker is an open-source engine that automates the deployment of any
                    : application as a lightweight, portable, self-sufficient container
                    : that will run virtually anywhere.
                    :
                    : Docker containers can encapsulate any payload, and will run
                    : consistently on and between virtually any server. The same container
                    : that a developer builds and tests on a laptop will run at scale, in
                    : production*, on VMs, bare-metal servers, OpenStack clusters, public
                    : instances, or combinations of the above.

Docker のインストール

Docker の RPM を yum コマンドでインストールします。
[root@docker01 ~]# yum install docker
(省略)
インストール:
  docker.x86_64 0:1.3.2-1.0.1.el6

依存性関連をインストールしました:
  augeas-libs.x86_64 0:1.0.0-7.el6
  cyrus-sasl-md5.x86_64 0:2.1.23-15.el6_6.1
  dnsmasq.x86_64 0:2.48-14.el6
  ebtables.x86_64 0:2.0.9-6.el6
  glusterfs.x86_64 0:3.6.0.28-2.el6
  glusterfs-api.x86_64 0:3.6.0.28-2.el6
  glusterfs-libs.x86_64 0:3.6.0.28-2.el6
  gnutls-utils.x86_64 0:2.8.5-14.el6_5
  iscsi-initiator-utils.x86_64 0:6.2.0.873-13.0.1.el6
  libvirt.x86_64 0:0.10.2-46.0.1.el6_6.2
  libvirt-client.x86_64 0:0.10.2-46.0.1.el6_6.2
  lxc.x86_64 0:1.0.6-2.0.1.el6
  lxc-libs.x86_64 0:1.0.6-2.0.1.el6
  lzop.x86_64 0:1.02-0.9.rc1.el6
  nc.x86_64 0:1.84-22.el6
  netcf-libs.x86_64 0:0.2.4-1.el6
  qemu-img.x86_64 2:0.12.1.2-2.448.el6_6
  radvd.x86_64 0:1.6-1.el6
  usbredir.x86_64 0:0.5.1-1.el6
  yajl.x86_64 0:1.0.7-3.el6

依存性を更新しました:
  cyrus-sasl.x86_64 0:2.1.23-15.el6_6.1      cyrus-sasl-gssapi.x86_64 0:2.1.23-15.el6_6.1
  cyrus-sasl-lib.x86_64 0:2.1.23-15.el6_6.1  cyrus-sasl-plain.x86_64 0:2.1.23-15.el6_6.1

完了しました!

Docker がインストールされました。
[root@docker01 ~]# which docker
/usr/bin/docker
[root@docker01 ~]# docker -v
Docker version 1.3.2, build c78088f/1.3.2

Docker の RPM に含まれるファイルです。
「/usr/bin/docker」も含まれています。
[root@docker01 ~]# rpm -ql docker
/etc/rc.d/init.d/docker
/etc/sysconfig/docker
/etc/sysconfig/docker-storage
/etc/udev/rules.d/80-docker.rules
/usr/bin/docker
/usr/libexec/docker
/usr/libexec/docker/dockerinit
/usr/share/bash-completion/completions/docker
/usr/share/doc/docker-1.3.2
/usr/share/doc/docker-1.3.2/AUTHORS
/usr/share/doc/docker-1.3.2/CHANGELOG.md
/usr/share/doc/docker-1.3.2/CONTRIBUTING.md
/usr/share/doc/docker-1.3.2/LICENSE
/usr/share/doc/docker-1.3.2/LICENSE-vim-syntax
/usr/share/doc/docker-1.3.2/MAINTAINERS
/usr/share/doc/docker-1.3.2/NOTICE
/usr/share/doc/docker-1.3.2/README-vim-syntax.md
/usr/share/doc/docker-1.3.2/README.md
/usr/share/man/man1/docker-attach.1.gz
/usr/share/man/man1/docker-build.1.gz
/usr/share/man/man1/docker-commit.1.gz
/usr/share/man/man1/docker-cp.1.gz
/usr/share/man/man1/docker-create.1.gz
/usr/share/man/man1/docker-diff.1.gz
/usr/share/man/man1/docker-events.1.gz
/usr/share/man/man1/docker-exec.1.gz
/usr/share/man/man1/docker-export.1.gz
/usr/share/man/man1/docker-history.1.gz
/usr/share/man/man1/docker-images.1.gz
/usr/share/man/man1/docker-import.1.gz
/usr/share/man/man1/docker-info.1.gz
/usr/share/man/man1/docker-inspect.1.gz
/usr/share/man/man1/docker-kill.1.gz
/usr/share/man/man1/docker-load.1.gz
/usr/share/man/man1/docker-login.1.gz
/usr/share/man/man1/docker-logout.1.gz
/usr/share/man/man1/docker-logs.1.gz
/usr/share/man/man1/docker-pause.1.gz
/usr/share/man/man1/docker-port.1.gz
/usr/share/man/man1/docker-ps.1.gz
/usr/share/man/man1/docker-pull.1.gz
/usr/share/man/man1/docker-push.1.gz
/usr/share/man/man1/docker-restart.1.gz
/usr/share/man/man1/docker-rm.1.gz
/usr/share/man/man1/docker-rmi.1.gz
/usr/share/man/man1/docker-run.1.gz
/usr/share/man/man1/docker-save.1.gz
/usr/share/man/man1/docker-search.1.gz
/usr/share/man/man1/docker-start.1.gz
/usr/share/man/man1/docker-stop.1.gz
/usr/share/man/man1/docker-tag.1.gz
/usr/share/man/man1/docker-top.1.gz
/usr/share/man/man1/docker-unpause.1.gz
/usr/share/man/man1/docker-version.1.gz
/usr/share/man/man1/docker-wait.1.gz
/usr/share/man/man1/docker.1.gz
/usr/share/man/man5/Dockerfile.5.gz
/usr/share/vim/vimfiles/doc/dockerfile.txt
/usr/share/vim/vimfiles/ftdetect/dockerfile.vim
/usr/share/vim/vimfiles/syntax/dockerfile.vim
/usr/share/zsh/site-functions/_docker
/var/lib/docker

デフォルトで docker デーモンは自動起動するようになっていますが、
インストール直後は停止しているので起動します。
[root@docker01 ~]# chkconfig --list docker
docker          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@docker01 ~]# service docker status
docker は停止しています
[root@docker01 ~]# service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:                                           [  OK  ]

docker が起動されています。
[root@docker01 ~]# docker info
Containers: 1
Images: 1
Storage Driver: devicemapper
 Pool Name: docker-252:0-270430-pool
 Pool Blocksize: 65.54 kB
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 661 MB
 Data Space Total: 107.4 GB
 Metadata Space Used: 970.8 kB
 Metadata Space Total: 2.147 GB
 Library Version: 1.02.89-RHEL6 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 3.8.13-44.1.1.el6uek.x86_64
Operating System: <unknown>

以上、Oracle Linux への Docker RPM インストールでした。

2014年12月29日月曜日

最近の OTN 掲示板(日本語)について。

もともと私は、OTN の掲示板に積極的に参加してませんでしたが、
以前はこの掲示板が、大変、栄えていました。
Oracle Technology Network (OTN) Japan - 掲示板
こちらは旧OTN掲示板です。

http://otn.oracle.co.jp/forum/index.jspa?categoryID=2
懐かしい OTN 掲示板。



2014年12月21日日曜日

Oracle VM Server と Docker。


JPOUG Advent Calendar 2014 の16日目のエントリです。2回目でちゃいました。
前日は 佐々木潤 さんの 泥箱的なメモ - モデルをスケッチする でした。

今回は、Docker の話です。
最近流行の Docker ですが、当然ながら Oracle Linux でも使用できます。



そして、Oracle VM Server 上の Linux でも使用できます。
Oracle VM Server の Dom-0 でコンテナを起動したりするわけではなく、
Dom-U の Linux でコンテナを起動します。




結構前ですが、
Oracle Linux での Docker を紹介するブログポストがあったので
Oracle VM Server 上の Oracle Linux でためしてみました。

Wim Coekaerts Blog
Oracle Linux 6.5 and Docker
https://blogs.oracle.com/wim/entry/oracle_linux_6_5_and


今回の環境

Oracle Linux 6.5 64bit 版です。
※一応、Oracle VM Server 3.3.1 の Dom-U です。
[root@dksv01 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.5

カーネルは UEK R3(Oracle Linux 6.5 のデフォルトのまま) です。
[root@dksv01 ~]# uname -r
3.8.13-16.2.1.el6uek.x86_64

Dockerの準備

まず、LXC をインストールしておきます。
※ちなみに、結構依存パッケージが多いです。
[root@dksv01 ~]# yum install lxc

cgroup ファイルシステムをマウントしておきます。
[root@dksv01 ~]# mkdir -p /cgroup
[root@dksv01 ~]# mount none -t cgroup /cgroup
[root@dksv01 ~]# mount | grep cgroup
none on /cgroup type cgroup (rw)

Dockerの最新バイナリを DL します。
最新の docker-1.4.1 だとエラーでコンテナ起動が出来なかったので、
今回は、ちょっと古めのバージョンを使用しています。
URL にある「docker-1.1.1」の数値を変更すると、そのバージョンの Docker が DL できます。
[root@dksv01 ~]# mkdir work
[root@dksv01 ~]# cd work/
[root@dksv01 work]# wget https://get.docker.com/builds/Linux/x86_64/docker-1.1.1 -O docker

ファイルに実行権限を付与。
[root@dksv01 work]# ls -lh docker
-rw-r--r-- 1 root root 17M  9月 11 05:20 2014 docker
[root@dksv01 work]# chmod 755 docker
[root@dksv01 work]# ls -lh docker
-rwxr-xr-x 1 root root 17M  9月 11 05:20 2014 docker

docker デーモンを起動します。
結構、標準出力はゴチャっとします。
[root@dksv01 work]# ./docker -d &
[1] 3076
[root@dksv01 work]# 2014/12/21 22:52:40 docker daemon: 1.1.1 bd609d2; execdriver: native; graphdriver:
[4de782dc] +job serveapi(unix:///var/run/docker.sock)
[4de782dc] +job initserver()
[4de782dc.initserver()] Creating server
2014/12/21 22:52:40 Listening for HTTP on unix (/var/run/docker.sock)
[4de782dc] +job init_networkdriver()
[4de782dc] -job init_networkdriver() = OK (0)
Loading containers: ........................: done.
[4de782dc.initserver()] Creating pidfile
[4de782dc.initserver()] Setting up signal traps
[4de782dc] -job initserver() = OK (0)
[4de782dc] +job acceptconnections()
[4de782dc] -job acceptconnections() = OK (0)

docker のバージョンです。
[root@dksv01 work]# ./docker version
Client version: 1.1.1
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): bd609d2
2014/12/21 22:53:22 GET /v1.13/version
[4de782dc] +job version()
[4de782dc] -job version() = OK (0)
Server version: 1.1.1
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): bd609d2

イメージ作成
ここだけ、最新版 docker を使用しているので、ちょっと実行結果が他と違うかもしれません。

イメージ作成のために、febootstrap をインストールします。
※これも、そこそこ依存 RPM があります。
[root@dksv01 work]# yum install febootstrap

イメージを /root/work/ol65_1 に作成します。
「-i」でいくつも指定しているのは、導入する RPM パッケージです。
SSH などを使用したいので、参考にしたブログよりいくつか RPM を増やしています。
ちなみに、末尾に指定しているのは YUM リポジトリですが、
ORACLE の パブリック YUM リポジトリから DL すると時間がかかるので
自宅内の YUM リポジトリを指定しています。
[root@dksv01 work]# febootstrap -i bash -i coreutils -i tar -i bzip2 -i gzip -i vim-minimal -i wget -i patch -i diffutils -i iproute -i yum -i passwd -i openssh-clients -i openssh-server ol65_1 /root/work/ol65_1 http://webfs1.gowatana.lab/os/ol605/

イメージはこのような感じになります。
[root@dksv01 work]# ls -l
合計 14276
-rwxr-xr-x  1 root root 14614452 12月 17 05:20 2014 docker
dr-xr-xr-x 21 root root     4096 12月 21 22:00 2014 ol65_1
[root@dksv01 work]# du -sh *
14M     docker
345M    ol65_1
[root@dksv01 work]# ls ./ol65_1
bin   dev  home  lib64  mnt  proc  sbin     srv  tmp  var
boot  etc  lib   media  opt  root  selinux  sys  usr

/etc/resolv.conf と /sbin/init を作成しておきます。
[root@dksv01 work]# touch ./ol65_1/etc/resolv.conf
[root@dksv01 work]# touch ./ol65_1/sbin/init

イメージを tar でまとめてから・・・
[root@dksv01 work]# tar --numeric-owner -jcpf ol65_1.tar.bz2 -C ./ol65_1 .
[root@dksv01 work]# ls -lh
合計 114M
-rwxr-xr-x  1 root root  14M 12月 17 05:20 2014 docker
dr-xr-xr-x 21 root root 4.0K 12月 21 22:00 2014 ol65_1
-rw-r--r--  1 root root 100M 12月 21 22:09 2014 ol65_1.tar.bz2

インポートします。
[root@dksv01 work]# cat ol65_1.tar.bz2 | ./docker import - ol65_1
INFO[1215] POST /v1.16/images/create?fromSrc=-&repo=ol65_1
INFO[1215] +job import(-, ol65_1, )
INFO[1274] +job log(import, 25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8, )
INFO[1274] -job log(import, 25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8, ) = OK (0)
INFO[1274] -job import(-, ol65_1, ) = OK (0)
25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8

インポートされました。
[root@dksv01 work]# ./docker images
INFO[1372] GET /v1.16/images/json
INFO[1372] +job images()
INFO[1372] -job images() = OK (0)
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ol65_1              latest              25ab466e3b5b        2 minutes ago       329.8 MB

コンテナの起動~停止

Docker のコンテナを起動してみます。
Docker 的には微妙かもしれませんが、bash を・・・
[root@dksv01 work]# ./docker run -i -t ol65_1 /bin/bash
2014/12/21 22:54:14 POST /v1.13/containers/create
[4de782dc] +job create()
[4de782dc] -job create() = OK (0)
2014/12/21 22:54:14 POST /v1.13/containers/5f8a024bb34fcab6811750ef3ba6bcb45c0dec22ff5b942b6270a7c24e395824/attach?stderr=1&stdin=1&stdout=1&stream=1
(中略)
bash-4.1# ★ここからコンテナの中。
bash-4.1# cat /etc/oracle-release
Oracle Linux Server release 6.5
bash-4.1# uname -n
5f8a024bb34f
bash-4.1# uname -r
3.8.13-16.2.1.el6uek.x86_64

コンテナから抜けてみます。
「Ctrl + p + q」キーで、下記のような感じで、親の OS に戻れます。
キーを押した瞬間、こんな感じに・・・
bash-4.1# [4de782dc] -job attach(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
                                                                                                           2014/12/21 22:56:18 GET /v1.13/containers/7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e/json
[4de782dc] +job container_inspect(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e)
[4de782dc] -job container_inspect(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
[root@dksv01 work]# ★抜けた。

そして起動しているコンテナを確認することもできます。
[root@dksv01 work]# ./docker ps
2014/12/21 22:57:28 GET /v1.13/containers/json
[4de782dc] +job containers()
[4de782dc] -job containers() = OK (0)
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
7a8693246bd7        ol65_1:latest       /bin/bash           About a minute ago   Up About a minute                       sharp_curie 
[root@dksv01 work]#

コンテナに再アタッチしてみます。

[root@dksv01 work]# ./docker attach 7a8693246bd7
2014/12/21 22:58:11 GET /v1.13/containers/7a8693246bd7/json
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
2014/12/21 22:58:11 POST /v1.13/containers/7a8693246bd7/resize?h=24&w=133
[4de782dc] +job resize(7a8693246bd7, 24, 133)
[4de782dc] -job resize(7a8693246bd7, 24, 133) = OK (0)
2014/12/21 22:58:11 POST /v1.13/containers/7a8693246bd7/attach?stderr=1&stdin=1&stdout=1&stream=1
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
[4de782dc] +job attach(7a8693246bd7)
bash-4.1# ★コンテナの中。

コンテナにアタッチした状態で、
「exit」もしくは「Ctrl + d」キーでコンテナ自体が停止します。
bash-4.1#
bash-4.1# exit[4de782dc] +job release_interface(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e)
                                                                                                   [4de782dc] -job release_interface(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
                                                                          [error] container.go:513 7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e: Error closing terminal: invalid argument
                                                                        [4de782dc] -job attach(7a8693246bd7) = OK (0)
                                                                                                                     2014/12/21 22:58:31 GET /v1.13/containers/7a8693246bd7/json
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
[root@dksv01 work]# ★終了した。
[root@dksv01 work]# ./docker ps
2014/12/21 23:00:41 GET /v1.13/containers/json
[4de782dc] +job containers()
[4de782dc] -job containers() = OK (0)
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@dksv01 work]# ★↑起動しているイメージなし。

・・・という感じです。
bash でコンテナを起動すると Solaris Zone っぽい感じですが、
コマンドや httpd みたいなもので起動すると、ちょっと違う印象を受けるかもしれません。

ちなみに、ORACLE の提供している Docker イメージもあったりします。
http://public-yum.oracle.com/docker-images/OracleLinux/

以上、Oracle VM Server と Oracle Linux と Docker についてでした。

17日目は、discus_hamburg さんの
Mac De Oracle: 机上SQLチューニング、クイズ! 駆動表(外部表)はどれだ!!!!
です。

2014年12月7日日曜日

Oracle VM Server と OpenStack。

今日は、JPOUG Advent Calendar 2014 の7日目のエントリです。
昨日は kouta shiobara さんの Trying Database: optimizer_dynamic_sampling=11 でした。


今回は、最近提供開始された、
ORACLE の OpenStack ディストリビューションの話です。
Oracle VM Server for x86 も、OpenStack で管理できるようになります。

Oracle OpenStack for Oracle Linux
http://www.oracle.com/us/technologies/linux/openstack/overview/index.html


OpenStack にするとどうなるのか?

そもそも、Oracle VM Server 自体は、割と普通な Xen ハイパーバイザであり、
「Oracle VM」としては、Oracle VM Manager から管理することにより
Oracle VM 的な世界観(たとえばサーバプールとか)で Xen を使用するようになっていました。


今までも Xen コマンド(xm ~、xl ~など)での直接操作はできましたが、
製品の設計思想的には Oracle VM Manager(Oracle VM Manager) は必須でした・・・

一方、OpenStack と組み合わせる場合は、
OpenStack から Oracle VM Manager を介した管理をするわけではなく、
直接 Oracle VM Server を管理します。
これまでの「Oracle VM」的な世界観がなくなり、OpenStack の世界観に変わると考えられます。
別のパターンとして、VMware vSphere の場合は OpenStack で ESXi ハイパーバイザ管理する場合も
必ず vCenter Server を経由するようにしています。



他にも Oracle VM Manager 管理と OpenStack 管理との大きな違いとして、
KVM(たとえば Oracle Linux の KVM)も管理可能なようです。(まだ試してませんが・・・)


そして、Oracle OpenStack for Oracle Linux はじめました。

ORACLE 版 OpenStack は、Packstack (他のディストリビューション同様・・・)を使用することで
割と簡単に環境構築できます。
インストールや packstack コマンド処理中に、下記の Yum リポジトリを参照します。

今回は構築手順を省略しますが、このドキュメントが参考になると思います。
Oracle OpenStack for Oracle Linux Release 1.0Installation and User's Guide
http://www.oracle.com/technetwork/server-storage/openstack/linux/documentation/oracle-openstack-user-guide-2296176.pdf
OpenStack 環境は、Horizon Dashboard(Web UI) から操作できます。
admin ユーザのパスワードはセットアップ中に自動生成されます。
パスワードは、Control Node の /root/keystonerc_admin ファイルを見るとわかります。



Web UI は、日本語でも表示できます。



Oracle VM Server は、2台登録しました。
ハイパーバイザの種別は、「Xen」になります。



VM (インスタンス)を起動してみました。
※今回は、事前に手作業で VM のイメージを登録してあります。



OpenStack の CLI (nova コマンド)では下記のように見えます。
[root@osctlr1 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.5
[root@osctlr1 ~]# source /root/keystonerc_admin
[root@osctlr1 ~(keystone_admin)]# nova list
+--------------------------------------+------+--------+------------+-------------+---------------------+
| ID                                   | Name | Status | Task State | Power State | Networks            |
+--------------------------------------+------+--------+------------+-------------+---------------------+
| 09dec348-ead2-44c8-8528-92bb5ea76aa1 | vm01 | ACTIVE | -          | Running     | nw-103=192.168.0.33 |
| 9d619aa0-2315-459c-93b6-561f74377d39 | vm02 | ACTIVE | -          | Running     | nw-103=192.168.0.34 |
+--------------------------------------+------+--------+------------+-------------+---------------------+
見栄えがわるいので、一部だけ表示してみました。
[root@osctlr1 ~(keystone_admin)]# nova list | awk -F\| '{print $2,$3,$4,$6}' | grep -v ^+

 ID                                     Name   Status   Power State

 09dec348-ead2-44c8-8528-92bb5ea76aa1   vm01   ACTIVE   Running
 9d619aa0-2315-459c-93b6-561f74377d39   vm02   ACTIVE   Running

そして、Oracle VM Server 側では以下のように見えます。
2台の Oracle VM Server で、内部的には別の VM 名で起動されています。

1台目
[root@ovms331-1 ~]# cat /etc/ovs-release
Oracle VM server release 3.3.1
[root@ovms331-1 ~]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   855     2     r-----   4404.7
instance-00000004                            3   512     1     -b----      3.6

2台目
[root@ovms331-2 ~]# cat /etc/ovs-release
Oracle VM server release 3.3.1
[root@ovms331-2 ~]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   855     2     r-----   4608.7
instance-00000005                            3  2048     1     -b----    308.5

ためしにセットアップしてみたところ、Oracle VM Manager 無しでも
Oracle VM Server の設定から VM 作成までできました。
ただ、VM のイメージ作成などは、引き続き 悩ましい気がします。
そのうち、もうすこし OpenStack っぽいことをしてみたいと思います。


以上、ORACLE の OpenStack についてでした。
明日は、wmo6hash さんです。よろしくお願いします。

JPOUG Advent Calendar 2014
http://jpoug.doorkeeper.jp/events/17313


2014年11月30日日曜日

vForum 2014 でみつけた ORACLE。

今月のはじめに、VMware 社の vFroum 2014 というイベントがありました。
http://vforum.jp/



そこに、なぜか ORACLE が出展(赤枠のところ参照)。


展示内容は、ストレージでした。


Solutions Showcase ソリューション展示コーナー の
日本オラクル株式会社の説明より・・・
クラウド&ビッグデータ時代、厳しい競争を勝ち抜く情報管理基盤に、統合ストレージ製品「Oracle ZFS Storage ZS3」シリーズをご紹介します。ZS3は仮想化&クラウド機能を強化、16000超VMを7分以内に同時起動できブートストームを解消。もちろんOpenStack Cinder、REST APIもサポート。更にOracleデータベースとインテリジェントな連携ができるのはZS3だけ。

紹介されている ZS3 というストレージ(ZS3-2)を実機展示していて、
ESXi の NFS データストアとして使用していました。
当然ながら、Oracle Database の dNFS(Direct NFS)もサポートしています。

Oracle ZFS Storage ZS3-2
http://www.oracle.com/jp/products/servers-storage/storage/nas/zs3-2/overview/index.html

ZS3-4 というのもあります。
http://www.oracle.com/jp/products/servers-storage/storage/nas/zs3-4/overview/index.html

カタログを見ると、ストレージ自体は FC / iSCSI とかも
対応しているようですが、 NFS データストアとして使用していました。

ZS3 を VM のデータストアにも、Oracle のデータベース領域にも使ってね
という提案のようです。

VMware Compatibility Guide で検索してみると・・・
http://www.vmware.com/resources/compatibility/search.php?deviceCategory=san

ZS3-2 /ZS3-4 どちらも NAS(NFS データストア)として
2014年11月で最新の ESXi 5.5 u2 まで、ちゃんと登録されていました。
※2014年11月30日時点です。


VAAI NAS (ESXi のストレージ処理支援機能)にも対応しています。
ただし、まだ ESXi 5.1 u2 までしか登録されていませんでした。
使えそうな気はしますが・・・

ZS3-2


ZS3-4



ちなみに、
当然ながら vForum には Oracle VM とかは出てきません。

以上、今月みつけた面白いものについてでした。

2014年10月30日木曜日

Oracle Linux 7 をやらないと…と思った話。


いまさらな話になりますが、
Oracle Linux 7 をインストールしてみました。

インストール中の画面は、このような感じでした。

ISO イメージから起動中。



日本語を選択。



各種設定の画面。



ソフトウェア選択画面。



インストール処理をしながら
root パスワード設定ができる・・・




インストール画面からして
結構、危機感を覚えました。

ちなみに、今回の Oracle Linux は下記です。
[root@localhost ~]# cat /etc/oracle-release
Oracle Linux Server release 7.0
[root@localhost ~]# uname -r
3.8.13-35.3.1.el7uek.x86_64

以上、そろそろ Oracle Linux 7 をやらないと
と思った話でした。

2014年9月27日土曜日

Oracle Linux で ルーティング設定。(route-ethX)

これまで、うちでは Oracle Linux(RHEL や CentOS も) の静的ルーティング設定は
/etc/sysconfig/static-routes ファイルに記載していました。

static-routes ファイルには、下記のように
192.168.5.0/24 は 192.168.0.252 へ、みたいな感じで設定できます。
[root@infra02 ~]# cat /etc/sysconfig/static-routes
any net 192.168.5.0/24 gw 192.168.0.252
any net 192.168.4.0/24 gw 192.168.0.251

Oracle Linux 6 のマニュアルを見ていたら、
/etc/sysconfig/network-scripts/route-ethX
といったファイルにもルーティング設定を記載できることに気づきました。

ためしに、OL 6.5 に設定してみました。
[root@dsvb01 ~]$ cat /etc/oracle-release
Oracle Linux Server release 6.5

まず、デフォルトゲートウェイ以外のルーティング情報が未設定の状態です。
[root@dsvb01 ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.5.252   0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
192.168.5.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.62.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.72.0    0.0.0.0         255.255.255.0   U         0 0          0 eth2

ip コマンドでも確認してみます。
[root@dsvb01 ~]# ip route show
default via 192.168.5.252 dev eth0
169.254.0.0/16 dev eth1  proto kernel  scope link  src 169.254.44.197
192.168.5.0/24 dev eth0  proto kernel  scope link  src 192.168.5.61
192.168.62.0/24 dev eth1  proto kernel  scope link  src 192.168.62.61
192.168.72.0/24 dev eth2  proto kernel  scope link  src 192.168.72.61

route-ethX ファイルを編集しました。
今回は、eth2 の経路情報を追加したかったので、route-eth2 です。
[root@dsvb01 ~]# cat /etc/sysconfig/network-scripts/route-eth2
192.168.71.0/24 via 192.168.72.253 dev eth2

eth2 を DOWN → UP させます。
[root@dsvb01 ~]# ifdown eth2
[root@dsvb01 ~]# ifup eth2
Determining if ip address 192.168.72.61 is already in use for device eth2...

ルーティング情報が追加されました。
netstat と ip コマンド両方で見てみました。
[root@dsvb01 ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.5.252   0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
192.168.5.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.62.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.71.0    192.168.72.253  255.255.255.0   UG        0 0          0 eth2
192.168.72.0    0.0.0.0         255.255.255.0   U         0 0          0 eth2
[root@dsvb01 ~]# ip route show
default via 192.168.5.252 dev eth0
169.254.0.0/16 dev eth1  proto kernel  scope link  src 169.254.44.197
192.168.5.0/24 dev eth0  proto kernel  scope link  src 192.168.5.61
192.168.62.0/24 dev eth1  proto kernel  scope link  src 192.168.62.61
192.168.71.0/24 via 192.168.72.253 dev eth2
192.168.72.0/24 dev eth2  proto kernel  scope link  src 192.168.72.61

マニュアルはこちら。
Oracle Linux 管理者ガイド,リリース6
11.7 ネットワーク・ルーティングの構成
http://docs.oracle.com/cd/E39368_01/e48214/ch11s07.html

以上、OL 6 にルーティング設定をする話でした。

2014年9月25日木曜日

Oracle 12c PDB の RAC での見え方。

何となくよく聞かれるのですが、
RAC 環境でも PDB を作成できます。
その場合、RAC のそれぞれの DB インスタンスから PDB が見えるようになります。

Oracle Database 12c の PDB は、RAC 環境ではこうなります。
今回は、2ノード RAC です。
[grid@dsva01 ~]$ crsctl stat res ora.rdgdb.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.rdgdb.db
      1        ONLINE  ONLINE       dsva01                   Open,STABLE
      2        ONLINE  ONLINE       dsva02                   Open,STABLE
--------------------------------------------------------------------------------

コンテナ DB(CDB)は1つで、DB サーバは 2ノードで、2 DB インスタンスです。
[oracle@dsva01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on 木 9月 25 08:45:24 2014
Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
に接続されました。
SQL> col host_name for a10
SQL> select inst_id,host_name,instance_name,status from gv$instance;
   INST_ID HOST_NAME  INSTANCE_NAME    STATUS
---------- ---------- ---------------- ------------
         1 dsva01     rdgdb1           OPEN  ★2インスタンス
         2 dsva02     rdgdb2           OPEN
SQL> select inst_id,name,cdb,dbid from gv$database order by 1;
   INST_ID NAME      CDB       DBID
---------- --------- --- ----------
         1 RDGDB     YES 3513886885  ★CDBは1つ。DBID が同じ。
         2 RDGDB     YES 3513886885

PDB は、2つ作ってあります。
シード PDB (テンプレート用 PDB)も合わせると3つあります。
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TESTDB1                        READ WRITE NO
         4 TESTDB2                        READ WRITE NO

それぞれの RAC ノードから、PDB が見えます。
DBID が同じ PDB が、インスタンス1 と 2 それぞれから見えています。
SQL> select inst_id,name,dbid from gv$pdbs order by 2,1;
   INST_ID NAME                                 DBID
---------- ------------------------------ ----------
         1 PDB$SEED                       1284832173
         2 PDB$SEED                       1284832173
         1 TESTDB1                         660856108
         2 TESTDB1                         660856108
         1 TESTDB2                         508821250
         2 TESTDB2                         508821250
6行が選択されました。

以上、RAC 環境での PDB の見え方でした。

2014年9月7日日曜日

JPOUG> SET EVENTS 20140907 のメモ。

今日は、IIJ@飯田橋にて開催された
JPOUG のイベントに参加してきました。
休日開催はとてもありがたいです。

JPOUG> SET EVENTS 20140907
http://www.jpoug.org/2014/08/05/jpoug-set-events-20140907

JPOUG について
http://www.jpoug.org/%E8%AA%AC%E6%98%8E


聞かせていただいた話と、
個人的興味があるところを残しておこうと思います。

■知られざる Oracle Database 12c の新機能

  • Oracle の仕組み調査には、DBA_OBJECTS や実行計画を見るのが有効みたい。
  • データファイルのオンライン移動は、やっぱりすごい。
  • バックグラウンドプロセスがマルチスレッドにできる(threaded_execution)。
  • 監査方式(Unified Auditing)が追加されている、変更ではなく追加みたい。


■エンジニアなでしこ魂3 -オラクルとプラチナと私-

  • エンジニアの経験談を、その本人から聞けることはとても有益だと思います。
  • プラチナ取得したくなりました。


■Oracle Database 12c マルチテナント入門

  • VMでの統合、スキーマ統合、PDBでの統合それぞれについて
    ちゃんと説明できるようになりたいと思いました。
  • 特に、リソース配分の問題についてのメリデメ説明が難しい気がする。


■Lightning Talks

MySQLユーザから見た「ここが{ヘンだ,スゴい}よOracle Database」

  • 「OracleにはDBAの役割が組み込まれてる」みたいな感覚が新鮮でした。
WindowsでもChefしたい!

  • Windows に Chef-solo で Java などを入れる話。
  • やっぱり Cygwin 使うのか・・・
安くて速くて安心な構成を目指して

  • ASM の冗長性の選択ってやっぱり悩ましいんですね。

続・IIJもデータベースのサービスやっています

  • IIJ のデータベースサービス基盤には、Oracle VM クラスタがある。


発表内容の要点とは直接関係ないモノばかりですが・・・
以上、JPOUG イベントからのメモでした。

2014年9月3日水曜日

ASM ディスクとして使うゼロ埋めファイルを作る。

地味な話ですが、ASM 用のゼロ埋めデバイスを作成してみます。

今回も、このあたりの話です。
Oracle Grid Infrastructureインストレーション・ガイド
11gリリース2 (11.2) for Linux
3.3.1.2
Oracle ASMで使用するためのNASデバイスでのファイルの作成
http://docs.oracle.com/cd/E16338_01/install.112/b56271/storage.htm#CFACJAGB

ファイル作成先は、NFS 領域です。
[grid@dbsv01 ~]$ df -h /u02
Filesystem Size Used Avail Use% Mounted on
192.168.60.59:/nfs/dbf01 20G 9.9G 8.7G 54% /u02

ASM インスタンスでは、asm_diskstring に
ゼロ埋めデバイスのパスを指定しています。
ディレクトリではなく、ファイルのフルパスを指定しています。
「*」も使えます。
SQL> col NAME for a16
SQL> col VALUE for a20
SQL> select name,value from v$parameter
  2  where name in('instance_name','asm_diskstring');
NAME             VALUE
---------------- --------------------
instance_name    +ASM1
asm_diskstring   /u02/oradata/nadb/*

dd コマンドで、ゼロ埋めデバイスを作成します。
※サイズは小さめにしてます。この例のままだと 10MBにしかなりません。
[grid@dbsv01 ~]$ dd if=/dev/zero of=/u02/oradata/nadb/asm_disk02 bs=1024k count=10 oflag=direct
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.498258 s, 21.0 MB/s

このファイルは、grid ユーザがアクセスできるように
パーミッション設定します。
[grid@dbsv01 ~]$ chown grid:asmadmin /u02/oradata/nadb/asm_disk02
[grid@dbsv01 ~]$ chmod 660 /u02/oradata/nadb/asm_disk02
[grid@dbsv01 ~]$ ls -l /u02/oradata/nadb/asm_disk02
-rw-rw---- 1 grid asmadmin 10485760 9月 3 23:22 2014 /u02/oradata/nadb/asm_disk02

ASM インスタンスでは、
さっそく asm_diskstring のパスにある
ゼロ埋めファイルが、ASM で使えるディスクとして認識されます。
SQL> col NAME for a12
SQL> col PATH for a30
SQL> select HEADER_STATUS,PATH,NAME from v$asm_disk;

HEADER_STATU PATH                           NAME
------------ ------------------------------ ------------
CANDIDATE    /u02/oradata/nadb/asm_disk02
MEMBER       /u02/oradata/nadb/asm_disk01   DG_NADB_0000

これを、SQL や ASMCA などで、ASM ディスクグループに追加したりします。

以上、ASM むけ ゼロ埋めデバイス作成の話でした。

2014年9月1日月曜日

Oracle で NFS+ASM にデータベースファイルを格納する。

あまり話題になることはないかもしれませんが、
Oracle Database で NFS 領域にデータファイルを配置する場合も
ASM が使えたりします。
Oracle Grid Infrastructureインストレーション・ガイド
11gリリース2 (11.2) for Linux
3.3.1.2
Oracle ASMで使用するためのNASデバイスでのファイルの作成
http://docs.oracle.com/cd/E16338_01/install.112/b56271/storage.htm#CFACJAGB
NFS 領域に直接データベースのファイルを配置する場合と、
NFS かつ ASM にデータベースのファイルを配置する場合を比較すると
下記のような感じになります。
※とりあえず、データファイルだけ書きました。



NFS に直接データファイルを配置する場合、
たとえば下記のように見えます。
※例では、NFS を /u02 配下にマウントしています。
[grid@dbsv01 ~]$ df -h /u02
Filesystem                Size  Used Avail Use% Mounted on
192.168.60.59:/nfs/dbf01   20G  7.5G   12G  41% /u02



NFS で ASM を使用する場合、
dd コマンドで「ゼロ埋込みファイル」を作成して
それを ASM ディスクとして使用します。

余分なレイヤが追加されるようにも見えますが、
NFS で表領域にファイルをオンライン追加できたり
NFS サーバを複数並べてストレージ筐体レベルで冗長化できたり
するので、メリットがゼロというわけではないとは思います。



おそらく本番環境でやることはないと思いますが、
1つのデータベースで、
NFS 上の OS ファイルと ASM ファイル両方を利用することもできます。
SQL> col TABLESPACE_NAME for a15
SQL> col FILE_NAME for a32
SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files;

TABLESPACE_NAME FILE_NAME
--------------- --------------------------------
USERS           +DG_NADB/nadb/users01.dbf
UNDOTBS1        +DG_NADB/nadb/undotbs01.dbf
SYSAUX          +DG_NADB/nadb/sysaux01.dbf
SYSTEM          +DG_NADB/nadb/system01.dbf
EXAMPLE         +DG_NADB/nadb/example01.dbf
UNDOTBS2        +DG_NADB/nadb/undotbs02.dbf
TS_TEST         /u02/oradata/nadb/ts_test01.dbf


7行が選択されました。

こんなイメージです。



ちなみに当然ながら、1台のサーバ(OS)に
ASM を利用している DB と
ASM 利用していない DB を同居させることもできます。

以上、Oracle の NFS+ASM の話でした。

2014年8月19日火曜日

LVM とファイルシステム拡張。(Oracle Linux 6.5 + ext4)

Oracle VM Server の VM で、
ファイルシステムをマウントしたまま LVM 拡張してみようと思います。

今回の OS は Oracle Linux 6.5 で、
ファイルシステムは ext4 です。
[root@dga1 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.5
[root@dga1 ~]# uname -r
3.8.13-16.2.1.el6uek.x86_64
[root@dga1 ~]# mount | grep /u01
/dev/mapper/vg01-lv_u01 on /u01 type ext4 (rw)

順に領域拡張していこうと思います。


LVM フィジカルボリュームの作成

ディスクデバイスを認識させたら、
最初に PV(フィジカルボリューム) を作成します。



今回 LVM に割り当てる、OS に認識させたディスクです。
デバイスは、既に OS に認識させてある状態です。
Oracle VM Server の仮想ディスクで、
「/dev/xvd~」というデバイス名になっています。
[root@dga1 ~]# fdisk -l /dev/xvde

ディスク /dev/xvde: 21.5 GB, 21474836480 バイト
ヘッド 255, セクタ 63, シリンダ 2610
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスクを PV にします。
[root@dga1 ~]# pvcreate /dev/xvde
  Physical volume "/dev/xvde" successfully created

PV が作成されました。
作成した直後は、PV の PE(フィジカルエクステント)がまだゼロです。
[root@dga1 ~]# pvdisplay /dev/xvde
  "/dev/xvde" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/xvde
  VG Name
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NFQeA6-BUXJ-1ZdH-jjrd-wcVx-3rcH-KrhfHA

LVM ボリュームグループを拡張

VG(ボリュームグループ) に PV を追加します。



いまのところ、VG に空き PE はありません。
[root@dga1 ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               9.99 GiB
  PE Size               4.00 MiB
  Total PE              2558
  Alloc PE / Size       2558 / 9.99 GiB
  Free  PE / Size       0 / 0
  VG UUID               mqF5A0-U1Js-8I7Z-Qm6U-Hewn-UUYD-AF1gzO

VGに、PV を追加します。
[root@dga1 ~]# vgextend vg01 /dev/xvde
  Volume group "vg01" successfully extended

PV に PE が作成されました。
[root@dga1 ~]# pvdisplay /dev/xvde
  --- Physical volume ---
  PV Name               /dev/xvde
  VG Name               vg01
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               NFQeA6-BUXJ-1ZdH-jjrd-wcVx-3rcH-KrhfHA

その分、VG の 合計 PE 、空き PE が増ました。
[root@dga2 ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               29.99 GiB
  PE Size               4.00 MiB
  Total PE              7677
  Alloc PE / Size       2558 / 9.99 GiB
  Free  PE / Size       5119 / 20.00 GiB
  VG UUID               mqF5A0-U1Js-8I7Z-Qm6U-Hewn-UUYD-AF1gzO

LVM 論理ボリュームを拡張

VG に容量追加されたので、LV(ロジカル ボリューム)を拡張します。



拡張前の LV です。
今回は、「/dev/vg01/lv_u01」という LV を拡張します。
[root@dga1 ~]# lvdisplay /dev/vg01/lv_u01
  --- Logical volume ---
  LV Path                /dev/vg01/lv_u01
  LV Name                lv_u01
  VG Name                vg01
  LV UUID                f8s6v0-0zHS-KBXY-55Ik-78h9-LshZ-sGVgkn
  LV Write Access        read/write
  LV Creation host, time ol65-base, 2014-08-11 13:45:30 +0900
  LV Status              available
  # open                 1
  LV Size                9.99 GiB
  Current LE             2558
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

LV に、VG の PE をすべて割り当てます。
[root@dga1 ~]# lvextend --extents 7677 /dev/vg01/lv_u01
  Extending logical volume lv_u01 to 29.99 GiB
  Logical volume lv_u01 successfully resized

PV の空き PE がゼロになっています。
[root@dga1 ~]# pvdisplay /dev/xvde
  --- Physical volume ---
  PV Name               /dev/xvde
  VG Name               vg01
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               0
  Allocated PE          5119
  PV UUID               NFQeA6-BUXJ-1ZdH-jjrd-wcVx-3rcH-KrhfHA

VG の空き PE もゼロになりました。
[root@dga1 ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               29.99 GiB
  PE Size               4.00 MiB
  Total PE              7677
  Alloc PE / Size       7677 / 29.99 GiB
  Free  PE / Size       0 / 0
  VG UUID               mqF5A0-U1Js-8I7Z-Qm6U-Hewn-UUYD-AF1gzO

その分、LV が拡張されました。
[root@dga1 ~]# lvdisplay /dev/vg01/lv_u01  --- Logical volume ---
  LV Path                /dev/vg01/lv_u01
  LV Name                lv_u01
  VG Name                vg01
  LV UUID                f8s6v0-0zHS-KBXY-55Ik-78h9-LshZ-sGVgkn
  LV Write Access        read/write
  LV Creation host, time ol65-base, 2014-08-11 13:45:30 +0900
  LV Status              available
  # open                 1
  LV Size                29.99 GiB
  Current LE             7677
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

ext4 ファイルシステムの拡張

拡張した LV に合わせて、ファイルシステムを拡張します。



LV 「/dev/mapper/vg01-lv_u01」に作成してあるファイルシステムは
「/u01」ディレクトリにマウントしたままです。
[root@dga1 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_ol65base-lv_root  8.3G  3.0G  4.9G  38% /
tmpfs                            1.5G  383M  1.1G  26% /dev/shm
/dev/xvda1                       477M   55M  397M  13% /boot
/dev/mapper/vg01-lv_u01          9.8G  8.8G  484M  95% /u01

ファイルシステムを拡張します。
[root@dga1 ~]# resize2fs /dev/mapper/vg01-lv_u01
resize2fs 1.43-WIP (20-Jun-2013)
Filesystem at /dev/mapper/vg01-lv_u01 is mounted on /u01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/vg01-lv_u01 is now 7861248 blocks long.

ファイルシステムが拡張されました。
[root@dga1 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_ol65base-lv_root  8.3G  3.0G  4.9G  38% /
tmpfs                            1.5G  383M  1.1G  26% /dev/shm
/dev/xvda1                       477M   55M  397M  13% /boot
/dev/mapper/vg01-lv_u01           30G  8.8G   20G  32% /u01

検証していて、「やっぱり足りなかった」になりやすそうな
/u01 を拡張してみました。

以上、LVM の領域拡張でした。