Quantcast
Channel: Linux –俺的備忘録 〜なんかいろいろ〜
Viewing all 743 articles
Browse latest View live

色々なdiffコマンドを使ってみた

$
0
0

ファイルの差異を確認する、おなじみのdiffコマンド。
大量のファイルの確認をしていた際に「少し見にくいなぁ…」と感じたので調べてみたところ、結構な種類(亜種)が存在するようだ。

1.diff

いわゆる、普通のdiff。
2つのファイルの差分を表示するのだが、色付けとかされるわけでもなく、ちょっと見にくい…

diff ファイル1 ファイル2

20160220_000000

 

2.diff3

ファイルを3つ比較するdiffコマンド。
まぁ数が増えただけでやること、やれることは変わりない。

diff3 ファイル1 ファイル2 ファイル3

20160220_000001

 

3.colordiff

前にこちらでも紹介したが、diffの出力結果を色付きで表示してくれるコマンド。

colordiff ファイル1 ファイル2

以下のコマンドでインストールできる。

yum install colordiff # RHEL系の場合
apt-get install colordiff # Debian/Ubuntu系の場合

20160220_000002

 

4.diffc

Pythonで出来たdiff系ツールで、文字単位で色付けを行ってくれるコマンド。

diffc ファイル1 ファイル2

以下のコマンドでインストールできる。

curl -O http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
cp ./diffc /usr/local/bin/
chmod +x /usr/local/bin/diffc

20160220_000003

 

5.sdiff

通常のdiffと違い、左右に並べて比較を行う事が出来る。

sdiff ファイル1 ファイル2

20160220_000004

 

6.vimdiff

vimをインストールすると付いてくるツール。
sdiffと同じように、GUI的に差分を確認することが出来るので視覚的にわかりやすい。

vimdiff ファイル1 ファイル2

20160220_000006

 

7.git diff

gitコマンドのdiff機能を使って比較することも出来る。
色付きで確認する場合はオプションが必要。

git diff --color-words ファイル1 ファイル2

20160220_000007

 

色々とあるもんだなぁ…
なんにせよ、自分が一番扱いやすいコマンドを使うのが一番だね。

 

新しいLinuxの教科書 新しいLinuxの教科書

正規表現を学習するコマンド『regexProgram』

$
0
0

ボケっとネットサーフィンをしていた所、正規表現の学習プログラム用のコマンド『regexProgram』というものがあったので使ってみることにした。
コマンドなのでTerminal上での操作になるが、Cursesを使っているので見た目的には分かりやすく使うことが出来るようだ。

ここでは、CentOS 7でインストールを行う事にする。

1.インストール

まず、前提となるパッケージを以下のコマンドでインストールする。

yum -y install gcc* ncurses-devel ncurses-c++-devel boost boost-devel

 

前提となるパッケージがインストールできたら、regexProgramをインストールする。

git clone https://github.com/Liniarc/regexProgram
cd regexProgram
make

 

これでインストールができたはずだ。

2.使ってみる

さて、それでは実際に使ってみよう。
makeしたディレクトリで、以下のようにコマンドを実行する。

./regex

 

まず一問目。
“abc.”という文字のみを指定する正規表現を書けというもの。

20160221_000001

 

正解すると、次の問題に移動する。

20160221_000002

 

…と、こんな感じで正規表現の学習をするコマンドのようだ。
新人研修とかの際、コンソールになれさせるために使ってみるのもいいかも?しれない。

…それならサーバ渡して課題(CPU使用率取ってこいとか)用意させた方が良いかもしれないが。

 

正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus) 正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)

データセンターやラック、ネットワーク構成をマップで管理できるNagiosのアドオンツール『Nagvis』を使ってみた

$
0
0

先日より、自宅環境の監視で統合監視ツールを入れてみようと色々と調べていたのだが、Nagiosのアドオンにラック構成や地理情報に関するマップ、グラフを生成、可視化出来る『Nagvis』というものがあるようなので、使ってみることにした。こちらのスクリーンショットをみる限り、結構キレイに色々な情報を整理できるツールのようだ。
今回は、先日NagiosをインストールしたCentOS 7環境に対し、このアドオンを導入、実際に使ってみる事にする。

 

1.Nagvisのインストール

それでは、Nagiosのインストールされた環境に対し、以下のコマンドを実行し前提となるパッケージとNagvisをインストールする。
まだNagiosをインストールしていない場合は、こちらを参考にインストールしてもらいたい。

 

まずは、以下のコマンドで前提となるNagiosのアドオンやパッケージを導入する。

yum -y install php-mbstring php-pdo graphviz php-gd gcc-c++ rsync wget
mkdir -p /usr/local/src/nagios/
cd /usr/local/src/nagios/
wget http://mathias-kettner.com/download/mk-livestatus-1.2.5i6p4.tar.gz -O mk-livestatus.tar.gz
tar zxvf mk-livestatus.tar.gz
cd mk-livestatus-*
./configure --with-nagios4 && make && make install
cd

 

次に、Nagiosの設定を変更し、reloadさせる。

sed -i.bk '/^event_broker_options/i broker_module=\/usr\/local\/lib\/mk-livestatus\/livestatus.o \/usr\/local\/nagios\/var\/rw\/live' /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios reload

設定がreloadされたら、Nagvisをインストールする。

wget http://www.nagvis.org/share/nagvis-1.8.5.tar.gz
tar zxfv nagvis-1.8.5.tar.gz
cd nagvis-*
./install.sh -n /usr/local/nagios -p /usr/local/nagvis -l "unix:/usr/local/nagios/var/rw/live" -b mklivestatus -u apache -g apache -w /etc/httpd/conf.d -a y
[root@BS-PUB-MONITOR-02 nagvis-1.8.5]# ./install.sh -n /usr/local/nagios -p /usr/local/nagvis -l "unix:/usr/local/nagios/var/rw/live" -b mklivestatus -u apache -g apache -w /etc/httpd/conf.d -a y
+------------------------------------------------------------------------------+
| Welcome to NagVis Installer 1.8.5                                            |
+------------------------------------------------------------------------------+
| This script is built to facilitate the NagVis installation and update        |
| procedure for you. The installer has been tested on the following systems:   |
| - Debian, since Etch (4.0)                                                   |
| - Ubuntu, since Hardy (8.04)                                                 |
| - SuSE Linux Enterprise Server 10 and 11                                     |
|                                                                              |
| Similar distributions to the ones mentioned above should work as well.       |
| That (hopefully) includes RedHat, Fedora, CentOS, OpenSuSE                   |
|                                                                              |
| If you experience any problems using these or other distributions, please    |
| report that to the NagVis team.                                              |
+------------------------------------------------------------------------------+
| Do you want to proceed? [y]:
+------------------------------------------------------------------------------+
| Starting installation of NagVis 1.8.5                                        |
+------------------------------------------------------------------------------+
|                                                                              |
+--- Checking for tools -------------------------------------------------------+
| Using packet manager /usr/bin/rpm                                      found |
|                                                                              |
+--- Checking paths -----------------------------------------------------------+
| Please enter the path to the nagios base directory [/usr/local/nagios]:
|   nagios path /usr/local/nagios                                        found |
| Please enter the path to NagVis base [/usr/local/nagvis]:
|                                                                              |
+--- Checking prerequisites ---------------------------------------------------+
| PHP 5.4                                                                found |
|   PHP Module: gd php                                                   found |
|   PHP Module: mbstring php                                             found |
|   PHP Module: gettext compiled_in                                      found |
|   PHP Module: session compiled_in                                      found |
|   PHP Module: xml php                                                  found |
|   PHP Module: pdo php                                                  found |
|   Apache mod_php                                                       found |
| Checking Backends. (Available: mklivestatus,ndo2db,ido2db)                   |
| Do you want to use backend mklivestatus? [y]:
| Do you want to use backend ndo2db? [n]:
| Do you want to use backend ido2db? [n]:
|   Livestatus Socket (/usr/local/nagios/var/rw/live)                    found |
|   PHP Module: sockets compiled_in                                      found |
| Graphviz 2.30                                                          found |
|   Graphviz Module dot 2.30.1                                           found |
|   Graphviz Module neato 2.30.1                                         found |
|   Graphviz Module twopi 2.30.1                                         found |
|   Graphviz Module circo 2.30.1                                         found |
|   Graphviz Module fdp 2.30.1                                           found |
| SQLite 3.7                                                             found |
|                                                                              |
+--- Trying to detect Apache settings -----------------------------------------+
| Please enter the web path to NagVis [/nagvis]:
| Please enter the name of the web-server user [apache]:
| Please enter the name of the web-server group [apache]:
| create Apache config file [y]:
|                                                                              |
+--- Checking for existing NagVis ---------------------------------------------+
|                                                                              |
+------------------------------------------------------------------------------+
| Summary                                                                      |
+------------------------------------------------------------------------------+
| NagVis home will be:           /usr/local/nagvis                             |
| Owner of NagVis files will be: apache                                        |
| Group of NagVis files will be: apache                                        |
| Path to Apache config dir is:  /etc/httpd/conf.d                             |
| Apache config will be created: yes                                           |
|                                                                              |
| Installation mode:             install                                       |
|                                                                              |
| Do you really want to continue? [y]:
+------------------------------------------------------------------------------+
| Starting installation                                                        |
+------------------------------------------------------------------------------+
| Creating directory /usr/local/nagvis...                                done  |
| Creating directory /usr/local/nagvis/var...                            done  |
| Creating directory /usr/local/nagvis/var/tmpl/cache...                 done  |
| Creating directory /usr/local/nagvis/var/tmpl/compile...               done  |
| Creating directory /usr/local/nagvis/share/var...                      done  |
| Copying files to /usr/local/nagvis...                                  done  |
| Creating directory /usr/local/nagvis/etc/profiles...                   done  |
| Creating main configuration file...                                    done  |
|   Adding MKLivestatus Backend...                                       done  |
|   Adding webserver group to file_group...                              done  |
| Creating web configuration file...                                     done  |
| Setting permissions for web configuration file...                      done  |
|                                                                              |
|                                                                              |
|                                                                              |
+--- Setting permissions... ---------------------------------------------------+
| /usr/local/nagvis/etc/nagvis.ini.php-sample                            done  |
| /usr/local/nagvis/etc                                                  done  |
| /usr/local/nagvis/etc/maps                                             done  |
| /usr/local/nagvis/etc/maps/*                                           done  |
| /usr/local/nagvis/etc/geomap                                           done  |
| /usr/local/nagvis/etc/geomap/*                                         done  |
| /usr/local/nagvis/etc/profiles                                         done  |
| /usr/local/nagvis/share/userfiles/images/maps                          done  |
| /usr/local/nagvis/share/userfiles/images/maps/*                        done  |
| /usr/local/nagvis/share/userfiles/images/shapes                        done  |
| /usr/local/nagvis/share/userfiles/images/shapes/*                      done  |
| /usr/local/nagvis/var                                                  done  |
| /usr/local/nagvis/var/*                                                done  |
| /usr/local/nagvis/var/tmpl                                             done  |
| /usr/local/nagvis/var/tmpl/cache                                       done  |
| /usr/local/nagvis/var/tmpl/compile                                     done  |
| /usr/local/nagvis/share/var                                            done  |
|                                                                              |
+------------------------------------------------------------------------------+
| Installation complete                                                        |
|                                                                              |
| You can safely remove this source directory.                                 |
|                                                                              |
| For later update/upgrade you may use this command to have a faster update:   |
| ./install.sh -n /usr/local/nagios -p /usr/local/nagvis -l "unix:/usr/local/nagios/var/rw/live" -b mklivestatus -u apache -g apache -w /etc/httpd/conf.d -a y
|                                                                              |
| What to do next?                                                             |
| - Read the documentation                                                     |
| - Maybe you want to edit the main configuration file?                        |
|   Its location is: /usr/local/nagvis/etc/nagvis.ini.php                      |
| - Configure NagVis via browser                                               |
|   <http://localhost/nagvis/config.php>                                       |
| - Initial admin credentials:                                                 |
|     Username: admin                                                          |
|     Password: admin                                                          |
+------------------------------------------------------------------------------+

 

これで、無事Nagvisがインストールできた。
最後に、httpdの設定をreloadしておく。

service httpd reload

 

2.とりあえずデモを使ってみる

Nagvisのインストールが完了したら、Webコンソール画面(http://nagvisサーバIPアドレス/nagvis/)でログインする。
なお、ログイン時の初期ID/PWは「admin/admin」となっている。

もしアクセス時に403エラーが出た場合、apacheのバージョンにあった設定ファイルの書き方になっていないため、以下のコマンドを実行すると良いだろう。

sed -i -e 's/Order allow,deny/#Order allow,deny/g' -e 's/Allow from all/#Allow from all/g' -e '/Allow from all/a\  Require all granted' /etc/httpd/conf.d/nagvis.conf
service httpd reload

Screenshot_from_2016-02-23 23:36:05

 

ログインしてみると、インストール直後に触ることが出来るデモが用意されているので、少し触ってみることにしよう。

Screenshot_from_2016-02-23 23:36:32

Screenshot_from_2016-02-23 23:56:22

Screenshot_from_2016-02-23 23:55:47

Screenshot_from_2016-02-23 23:56:48

 

それぞれ、マップ上で対応する箇所をクリックするとNagiosのホスト情報に飛ぶようになっている。
う~ん…ちょっと見た目しょぼい気がするけど、ラック構成とホスト情報を紐付けて、かつNagiosにアドオン追加するだけって考えれば、まぁありなのかなぁ。

このマップもWebページから編集出来ることを考えると、まぁ検討の余地はありそうだ。

 

【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus) 【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus) 【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus) 【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus)

sedで指定した行の先頭・末尾に文字列を追記する

$
0
0

sedで、指定した行(特定の文字列から始まる行など)の先頭や末尾に文字列を追記するには、置換対象に正規表現で先頭(^)もしくは末尾($)を指定すればいい。

●指定行の先頭に文字列を追加する場合

sed '/文字列/s/^/追加文字列/g' 対象ファイル # 文字列を検索して行を指定
sed '◯s/^/追加文字列/g' 対象ファイル # 行番号を直接指定
[root@test-node ~]# cat /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
[root@test-node ~]#
[root@test-node ~]# # 「ccc」を含む文字列をコメントアウトする
[root@test-node ~]# sed '/ccc/s/^/# /g' /work/test_1.txt
aaaaa
bbbbb
# ccccc
ddddd
eeeee
fffff
ggggg
[root@test-node ~]#
[root@test-node ~]# # 5行目をコメントアウトする
[root@test-node ~]# sed '5s/^/# /g' /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd
# eeeee
fffff
ggggg

●指定行の末尾に文字列を追加する場合

sed '/文字列/s/$/追加文字列/g' 対象ファイル # 文字列を検索して行を指定
sed '◯s/$/追加文字列/g' 対象ファイル # 行番号を直接指定
[root@test-node ~]# cat /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
[root@test-node ~]#
[root@test-node ~]# # 「ddd」を含む行の末尾に文字列追加
[root@test-node ~]# sed '/ddd/s/$/-------/g' /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd-------
eeeee
fffff
ggggg
[root@test-node ~]#
[root@test-node ~]# # 6行目の末尾に文字列追加
[root@test-node ~]# sed '6s/$/-------/g' /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff-------
ggggg

 

sed & awkプログラミング 改訂版 (A nutshell handbook) sed & awkプログラミング 改訂版 (A nutshell handbook)

Linux/UNIXで文字列から特定部分(右から・左から何個、〇〇~〇〇まで)を抜き出すコマンド

$
0
0

ちょっとしたスクリプトを作っていた際、文字列の抜き出しを多様する処理があったので忘れないように残しておく。

●左から◯文字

cut -c [開始文字(個数)]-[終了文字(個数)]
[root@test-node ~]# # 例:左から1文字目~4文字目
[root@test-node ~]# echo abcdefghijk | cut -c 1-4
abcd
[root@test-node ~]#
[root@test-node ~]# # 例:左から2文字目~5文字目
[root@test-node ~]# echo abcdefghijk | cut -c 2-5
bcde

 

●左から◯文字を除外する

cut -c [開始文字(個数)+1]-
[root@test-node ~]# # 例:左から3文字を除外
[root@test-node ~]# echo abcdefghijk | cut -c 4-
defghijk

●右から◯文字

rev | cut -c [開始文字(個数)]-[終了文字(個数)] | rev
[root@test-node ~]# # 例:右から1文字目~5文字目
[root@test-node ~]# echo abcdefghijk | rev | cut -c 1-5 | rev
ghijk
[root@test-node ~]# echo abcdefghijk | rev | cut -c 3-6 | rev
fghi

 

●右から◯文字を除外する

rev | cut -c [開始文字(個数)+1]- | rev
[root@test-node ~]# # 例:右から4文字を除外
[root@test-node ~]# echo abcdefghijk | rev | cut -c 5- | rev
abcdefg

 

●文字A~文字Bまでを抽出する

awk '{print substr($0, index($0, "b"), index($0, "e") -1 )}'
[root@test-node ~]# # bからgまでを抽出
[root@test-node ~]# echo abcdefghijk | awk '{print substr($0, index($0, "b"), index($0, "g") -1 )}'
bcdefg
[root@test-node ~]# # bからeまでを抽出(1回のみ)
[root@test-node ~]# echo abcdefabcdef | awk '{print substr($0, index($0, "b"), index($0, "e") -1 )}'
bcde

 

●文字A~文字Bまでを除外する

awk '{sub("文字A.*.文字B", "");print $0;}'
[root@test-node ~]# # 「_」から「_」までを除外して表示する
[root@test-node ~]# echo aaa_bbbb_cccc | awk '{sub("_.*._", "");print $0;}'
aaacccc

 

●指定した文字以降を抽出する

awk '{print substr($0, index($0, "文字"))}'
[root@test-node ~]# # b以降を出力させる
[root@test-node ~]# echo aaa_bbbb_cccc | awk '{print substr($0, index($0, "b"))}'
bbbb_cccc

 

●指定した文字以降を除外する

awk '{sub("文字A.*", "");print $0;}'
[root@test-node ~]# # b以降を除外する
[root@test-node ~]# echo aaa_bbbb_cccc | awk '{sub("b.*", "");print $0;}'
aaa_

 

すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集] すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]

覚えてると案外便利なBashのリダイレクト・パイプの使い方9個

$
0
0

なんとなしにBashのリダイレクトとパイプについて調べてたので、後から確認しやすいようにまとめてみることにする。

1.ファイルへのリダイレクト

基本的な使い方。コマンドの実行結果をファイルにリダイレクトする事で、上書きや追記をさせることが出来る。
これについては、UNIX系OSに慣れていない人でもよく知っている事だろう。
「>」で上書き(ファイルの既存内容は削除される)、「>>」で追記書き込みが行われる。

コマンド > ファイル # 上書き
コマンド >> ファイル # 追記

 

で、このリダイレクトだが通常は標準出力しかリダイレクトされない。
この辺りを使い分ける場合は、以下のようにコマンドを実行する。
※追記書き込み時も同様のため割愛。

コマンド 1> ファイル # 標準出力のみをリダイレクト(デフォルト)
コマンド 2> ファイル # 標準エラー出力のみをリダイレクト
コマンド &> ファイル # 標準出力・標準エラー出力を共にリダイレクト

 

これを利用することで、以下のように標準エラー出力だけを/dev/nullにリダイレクトしてコンソールにもファイルにも出力させないようにしたり、それぞれを別のファイルに出力させたりすることができる。
ちょっとしたお遊びとしては、他のコンソールに任意の文字列を送りつけるといった事も可能だ。たとえば、以下のようにコマンドを実行することで「/dev/pts/1」を使っているコンソールに文字列を送ることができる。

echo "文字列" > /dev/pts/1

 

ちなみに、標準エラー出力と標準出力を入れ替える場合は、以下のようにコマンドを実行する事で行える。

コマンド 3>&1 1>&2 2>&3

 

2.ファイルの読込み

リダイレクトを使うことで、ファイルを一部のコマンドに読み込ませる事も出来る。

コマンド < ファイル # ファイルの内容を一部のコマンドに読み込ませる

 

以下、readコマンドを用いた例

[root@test-node ~]# cat /work/command
/etc
[root@test-node ~]# read -r line < /work/command ;echo $line
/etc

 

3.複数行の文字列をコマンドに渡す

これもいろんな所でみる使い方だ。
以下のようにコマンドを実行することで、複数行の文字列をコマンドにリダイレクトすることが出来る。

コマンド << EOF
......
EOF

 

よく使われるのは、catと組み合わせてファイルに書き込みをする方法だろう。
以下、例。

[root@test-node ~]# cat << EOF > /work/test_red.txt
> 1234
> 5678
> 90
> EOF
[root@test-node ~]# cat /work/test_red.txt
1234
5678
90

 

ここで記述されているEOFというのは処理終了の判定文字列となる。
ここではEOFと記述しているが、他の文字列でも構わない。

なお、Tabなどを入力したい場合は、以下のようにコマンドを実行する。

コマンド <<- EOF
......
EOF

 

4.コマンドに文字列をリダイレクトする

以下のように指定することで、コマンドに文字列をリダイレクトする事も出来る。

コマンド <<< "文字列"

 

例えば、catコマンドに文字列を送ることでechoと同じような処理を行わせる事ができる。
(日常で使うかわからないけど)

[root@test-node ~]# cat <<< "This Server is $(hostname)."
This Server is test-node.

 

5.execコマンドと組み合わせる

execコマンド(forkせずにコマンドを実行する)と組み合わせる事で、エラーのリダイレクト設定をそのセッション内では継続させるような事もできる。
(ただし、PS1などがコンソールに出力されない状態になる場合もあるので、シェルスクリプト内でしか使えないと思われる)

以下、簡単にまとめ。

●セッション中は永続的に標準エラー出力を指定したファイルにリダイレクトする

exec 2>ファイル # セッション中は永続的に標準エラー出力を指定したファイルにリダイレクトする
[root@test-node ~]# cat /work/test_sh.sh
exec 2>/tmp/error_test
greew
grep 'aaa' /etc/hogeghogege
[root@test-node ~]# sh /work/test_sh.sh
[root@test-node ~]# cat /tmp/error_test
/work/test_sh.sh: 行 2: greew: コマンドが見つかりません
grep: /etc/hogeghogege: そのようなファイルやディレクトリはありません

 

●ファイルを読込む

exec 3<ファイル
[root@test-node ~]# exec 3</etc/fstab
[root@test-node ~]# grep "" <&3

#
# /etc/fstab
# Created by anaconda on Sun Jan 3 08:46:04 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=461b7464-714d-4a8b-9f63-19fe0482887f /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@test-node ~]# grep "" <&3
[root@test-node ~]#</pre>

 

●ファイルへ書き込む

exec 3>ファイル
[root@test-node ~]# exec 3>/tmp/3teest
[root@test-node ~]# echo "aaaaaaaa" >&3
[root@test-node ~]# cat /tmp/3teest
aaaaaaaa

 

●ファイルへ書き込み・読込みを行う

exec 3<>ファイル
[root@test-node ~]# exec 3<>/tmp/3test
[root@test-node ~]# echo "aaaaaaaa" >&3
[root@test-node ~]#
[root@test-node ~]# exec 3<>/tmp/3test
[root@test-node ~]# grep "" <&3
aaaaaaaa

 

●指定ポートに対し通信する

exec 3<> /dev/tcp/アドレス/ポート番号 # tcpの場合
exec 3<> /dev/udp/アドレス/ポート番号 # udpの場合
[root@test-node ~]# exec 3<> /dev/tcp/127.0.0.1/22
[root@test-node ~]# echo $?
0
[root@test-node ~]# exec 3<> /dev/tcp/127.0.0.1/23
-bash: connect: 接続を拒否されました
-bash: /dev/tcp/127.0.0.1/23: 接続を拒否されました
[root@test-node ~]# echo $?
1

6.グルーピングしてまとめてリダイレクトする

前にもここで書いた事があるが、「()」もしくは「{}」でコマンドを囲むことでまとめてリダイレクトさせることが出来る。

(コマンド1;コマンド2;...) > ファイル # サブシェルあり
{ コマンド1;コマンド2;...; } > ファイル # サブシェルなし
[root@test-node ~]# (echo aaa;echo bbb) > /tmp/aaa123
[root@test-node ~]# cat /tmp/aaa123
aaa
bbb
[root@test-node ~]#
[root@test-node ~]# { echo aaa;echo bbb; } > /tmp/aaa123_2
[root@test-node ~]# cat /tmp/aaa123_2
aaa
bbb

 

7.コマンドに複数コマンドの実行結果を渡す

一つのコマンドの実行結果を渡すだけなら「|(パイプ)」でいいのだが、時には複数コマンドの実行結果を渡したい時だってある。
その場合は、シェル芸勉強会などではよく見かけるのだが、以下のようにリダイレクトさせればよい。
(一応、この機能には「Process Substitution」という名前が付いているらしい)

コマンド <(コマンド)

 

複数ある場合は、そのままスペース区切りで続けて記述すれば良いだけだ。

コマンド <(コマンド) <(コマンド)
[root@test-node ~]# cat /work/test_sort1
2 dddddd
1 aaaaaa
5 bbbbbb
6 gfgfgr
[root@test-node ~]# cat /work/test_sort2
6 gfgfgr
4 bbbbbb
1 aaaaaa
3 cfffff
[root@test-node ~]# sort /work/test_sort1
1 aaaaaa
2 dddddd
5 bbbbbb
6 gfgfgr
[root@test-node ~]# sort /work/test_sort2
1 aaaaaa
3 cfffff
4 bbbbbb
6 gfgfgr
[root@test-node ~]# diff <(sort /work/test_sort1) <(sort /work/test_sort2)
2,3c2,3
< 2 dddddd
< 5 bbbbbb --- > 3 cfffff
> 4 bbbbbb

 

8.コマンドの実行結果を他のコマンドに連携する(パイプ)

流石にこれは説明しなくてもいいだろう。
コマンドの実行結果をパイプで繋げる事で連携していく、UNIX系OSのシェルなら大体持っている機能だ。

コマンド | コマンド
[root@test-node ~]# grep "" /work/hostname_*
/work/hostname_aaa_000.txt:aaa_000
/work/hostname_aaa_001.txt:aaa_001
/work/hostname_aaa_002.txt:aaa_002
/work/hostname_aaa_003.txt:aaa_003
/work/hostname_aaa_004.txt:aaa_004
/work/hostname_aaa_005.txt:aaa_005
/work/hostname_bbb_000.txt:aaa_000
/work/hostname_bbb_001.txt:aaa_001
/work/hostname_bbb_002.txt:aaa_002
/work/hostname_bbb_003.txt:aaa_003
/work/hostname_bbb_004.txt:aaa_004
/work/hostname_bbb_005.txt:aaa_005
[root@test-node ~]# grep "" /work/hostname_* | grep aaa_000
/work/hostname_aaa_000.txt:aaa_000
/work/hostname_bbb_000.txt:aaa_000

 

なお、bash4.1以降の場合だと、以下のようにコマンドを実行することで標準エラー出力を渡す事も出来るようになったようだ。

コマンド |& コマンド
[root@test-node ~]# grep "" /work/hostneme_*
grep: /work/hostneme_*: そのようなファイルやディレクトリはありません
[root@test-node ~]#
[root@test-node ~]# grep "" /work/hostneme_* | sed 's/work/aaaa/g'
grep: /work/hostneme_*: そのようなファイルやディレクトリはありません
[root@test-node ~]#
[root@test-node ~]# grep "" /work/hostneme_* |& sed 's/work/aaaa/g'
grep: /aaaa/hostneme_*: そのようなファイルやディレクトリはありません

 

9.パイプでつなげた各コマンドの実行結果(exitcode)を確認する

パイプでつなげた場合、途中のコマンドでエラーが出てもecho $?ではパイプの最後にあるコマンドの結果しか表示されない。
各コマンドのexitcodeを取得する場合は、bash変数のPIPESTATUSから取得すると良いだろう。

echo ${PIPESTATUS[@]}
[root@test-node ~]# grep "" /euc |&  sed 's/euc/aaa/g'
grep: /aaa: そのようなファイルやディレクトリはありません
[root@test-node ~]# echo ${PIPESTATUS[@]}
2 0

 

覚えて便利 いますぐ使える!シェルスクリプトシンプルレシピ54 覚えて便利 いますぐ使える!シェルスクリプトシンプルレシピ54

CentOS 7にZabbix 3.0をインストールしてみる

$
0
0

先日のOSC 2016 Tokyo/Springを見に行った際、Zabbix 3.0が展示されていたのだけど、グラフとかが結構綺麗になってたり、エージェント⇔サーバ間の通信が暗号化されたらしいと色々かわったようなので、入れてみる事にする。インストール先は、いつもどおりCentOS 7とする。なお、事前にyum updateを実施済とする。

さすがにZabbix、リリース直後でも日本語の情報が多いので、今回は以下のページを参考に進めていった。

1.Zabbixサーバインストール

まずは、Zabbixサーバに必要となる前提パッケージをインストールする。

yum -y install epel-release
yum -y install httpd php php-devel php-mysql php-xml php-mbstring php-mcrypt php-gd zlib-devel mariadb-devel mariadb-server libxml2 libxml2-devel net-snmp net-snmp-devel libcurl libcurl-devel

 

次に、以下のコマンドでSELinuxの無効化、Firewalldの設定を実施する。

setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-port=10050/tcp --zone=public --permanent
firewall-cmd --add-port=10051/tcp --zone=public --permanent
firewall-cmd --reload

 

では、Zabbix 3.0をインストールする。
3.0系のリポジトリはすでに用意されているらしいので、それを使ってyumでインストールを行う。

yum -y install http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent

 

Zabbixのインストール完了後、以下のコマンドで利用するテーブルやユーザを作成し、その他設定を追加する。
なお、ここではmysql_secure_installationを行わずに設定している(パスワード無しでコマンドを実行している)が、実際に設定する際は後からでもいいから必ず設定しておくこと。

cat <<EOF > /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8
collation-server = utf8_bin
skip-character-set-client-handshake
innodb_file_per_table
EOF
systemctl restart mariadb
mysql -uroot -e "create database zabbix;grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix_password';"
zcat /usr/share/doc/zabbix-server-mysql-3.?.?/create.sql.gz | mysql -uroot zabbix
sed -i '/# DBPassword/cDBPassword=zabbix_password' /etc/zabbix/zabbix_server.conf
sed -i '/date.timezone/a\        php_value\ date.timezone \Asia\/Tokyo' /etc/httpd/conf.d/zabbix.conf

 

最後に、Zabbixを動作させるための各種デーモンを起動させる。

systemctl restart zabbix-server
systemctl enable zabbix-server
systemctl restart zabbix-agent
systemctl enable zabbix-agent
systemctl restart httpd
systemctl enable httpd
systemctl restart mariadb
systemctl enable mariadb

2.初期設定(Webコンソールから)

さて、次にZabbixのWebコンソール(http://ZabbixサーバIPアドレスorhostname/zabbix/)にアクセスし、初期設定を行う。

Screenshot_from_2016-02-29 08:03:45

 

ステータスチェックで、全てOKであることを確認。

Screenshot_from_2016-02-29 08:04:00

 

Zabbixで利用するMariaDBの設定。パスワードには、データベース用のパスワードを指定する。

Screenshot_from_2016-02-29 08:04:14

 

Nameには監視時の任意の名称を設定出来る。
特に希望がなければそのまま次へ。

Screenshot_from_2016-02-29 08:04:41

 

設定内容の確認。

Screenshot_from_2016-02-29 08:04:44

 

設定が完了した旨のメッセージが表示される。

Screenshot_from_2016-02-29 08:04:45

 

実際にコンソールにログインをする。
初期ID/PWは「Admin/zabbix」となっている。

Screenshot_from_2016-02-29 08:08:35

 

ログイン直後は英語になっている。

Screenshot_from_2016-02-29 08:09:44

 

右上のプロフィール設定(カーソル合わせるとAdminと表示されるアイコン)から、日本語化する。

Screenshot_from_2016-02-29 08:09:56

 

[設定] – [ホスト]を開き、自分自身の監視を行うよう設定する。
無効となっている箇所をクリックすれば有効化できる。

Screenshot_from_2016-02-29 08:10:20

Screenshot_from_2016-02-29 08:10:25

 

ひとまず、これで最低限の使用が可能になった。

改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus) 改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus)

CentOS7にSensuをインストールする

$
0
0

今回は、最近名前を聞く監視ツール『Sensu』をCentOS7にインストールしてみることにする。
あくまでも、入れてみての動作検証を目的としているので、細かい所にツッコミどころがあると思うが今回は考慮しない事とする。
なお、動作検証を目的としている事から、Firewalld、SELinuxは停止しておく。

1.前提パッケージのインストール・設定

まずは、以下のコマンドで前提となるパッケージ群をインストールする。

yum install -y epel-release # epelのインストール
yum -y install erlang # erlangのインストール

# RabbitMQ関連
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.1/rabbitmq-server-3.4.1-1.noarch.rpm
chkconfig rabbitmq-server on
/etc/init.d/rabbitmq-server start
rabbitmq-plugins enable rabbitmq_management

# redis関連
yum -y install redis
chkconfig redis on
systemctl start redis

 

次に、RabbitMQに関係する設定を実施する。

rabbitmqctl add_vhost /sensu
rabbitmqctl add_user sensu sensu
rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

2.Sensuのインストール

前提パッケージのインストール、設定ができたら、次はSensuのインストールを行う。
今回はyumからインストールするため、まずrepoファイルを作成し、インストールを行う。

cat << EOF >> /etc/yum.repos.d/sensu.repo
[sensu]
name=sensu-main
baseurl=http://repos.sensuapp.org/yum/el/7/x86_64/
gpgcheck=0
enabled=1
EOF
yum -y install sensu

 

Sensuの設定ファイルを、テンプレートをコピーして作成する。

cp /etc/sensu/config.json.example /etc/sensu/config.json

 

自分自身を監視対象サーバとするため、クライアントの設定ファイルを作成する。

cat << EOF >> /etc/sensu/conf.d/client.json
{
  "client": {
    "name": "Sensu Server",
    "address": 127.0.0.1,
    "subscriptions": [ "all" ]
  }
}
EOF

 

サービスの起動、自動起動設定を行う。

/etc/init.d/sensu-server start
/etc/init.d/sensu-client start
/etc/init.d/sensu-api start
chkconfig sensu-server on
chkconfig sensu-client on
chkconfig sensu-api on

 

次に、Sensuの標準ダッシュボードであるUchiwaをインストール、起動設定をする。

yum install -y uchiwa
cat << EOF > /etc/sensu/uchiwa.json
{
    "sensu": [
        {
            "name": "Sensu",
            "host": "localhost",
            "ssl": false,
            "port": 4567,
            "user": "",
            "pass": "",
            "path": "",
            "timeout": 5000
        }
    ],
    "uchiwa": {
        "user": "",
        "pass": "",
        "port": 3000,
        "stats": 10,
        "refresh": 10000
    }
}
EOF
/etc/init.d/uchiwa start
chkconfig uchiwa on

 

3.WEBコンソールへ接続

パッケージのインストールが完了したら、WEBコンソール(http://SensuサーバIPアドレス:3000)からSensu(というか、Uchiwa)にアクセスしよう。
現在の設定ではログイン時にID/PWを要求されないので、そのままステータス確認画面を見れるはずだ。

Screenshot_from_2016-03-01 09:31:06

 

無事、クライアントに自分自身が表示される事が確認できた。

 

【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus) 【改訂新版】 サーバ/インフラエンジニア養成読本 管理/監視編 [24時間365日稼働を支える知恵と知識が満載!] (Software Design plus)

CentOS7にObserviumをインストールする

$
0
0

さて、ここのとこCentOS 7に監視系のツールを入れていろいろと試しているところなのだが、今回はObserviumという、Google Mapとかも表示させられてグラフもキレイ、かつSNMP経由で監視する、というツールを見かけたので、これを入れてみる事にする。
親切な事に、スクリーンショットはこちら、デモページはこちらに用意されている。

手順についても、基本的にこちらに用意されている。
今回は、この手順を参考にインストールを進めていく。

 

1.インストール・初期設定

さて、それではまずは前提となるパッケージを入れていこう。
sshdは最初から入っているものとして割愛。

とりあえず、先にSELinux/Firewalldの設定をしておこう。

setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

 

以下のコマンドを実行し、リポジトリの登録と前提パッケージのインストールを実施する。

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install wget.x86_64 httpd.x86_64 php.x86_64 php-mysql.x86_64 php-gd.x86_64 php-posix \
php-mcrypt.x86_64 php-pear.noarch cronie.x86_64 net-snmp.x86_64 net-snmp-utils.x86_64 fping.x86_64 \
mariadb-server.x86_64 mariadb.x86_64 MySQL-python.x86_64 rrdtool.x86_64 subversion.x86_64 jwhois.x86_64 \
ipmitool.x86_64 graphviz.x86_64 ImageMagick.x86_64 libvirt.x86_64 -y

 

前提パッケージをインストールできたら、事前にMariaDBでデータベースの作成等の下準備を行っておこう。
まずは起動設定。

systemctl enable mariadb
systemctl start mariadb

 

mysql_secure_installationも行っておこう。

mysql_secure_installation
[root@BS-PUB-MONITOR-07 opt]# mysql_secure_installation
/usr/bin/mysql_secure_installation: 行 379: find_mysql_client: コマンドが見つかりません

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 

データベースの作成を行う。

mysql -u root -pパスワード -e "CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -u root -pパスワード -e "GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost' IDENTIFIED BY 'Observium用パスワード';"

 

次に、Observiumのダウンロードを行う。
Observiumにはエディションが2つあるようで、CE(Community Edition)とSE(Subscription Edition)があるようだ。
今回は、CEをダウンロード、初期設定を行う。

mkdir -p /opt/observium && cd /opt
wget http://www.observium.org/observium-community-latest.tar.gz
tar zxvf observium-community-latest.tar.gz
cd /opt/observium/observium/
cp config.php.default config.php
sed -i -e 's/USERNAME/observium/g' -e 's/PASSWORD/Observium用パスワード/g' config.php
./discovery.php -u

20160302_000000

[root@BS-PUB-MONITOR-07 observium]# ./discovery.php -u

  ___   _                              _
 / _ \ | |__   ___   ___  _ __ __   __(_) _   _  _ __ ___
| | | || '_ \ / __| / _ \| '__|\ \ / /| || | | || '_ ` _ \
| |_| || |_) |\__ \|  __/| |    \ V / | || |_| || | | | | |
 \___/ |_.__/ |___/ \___||_|     \_/  |_| \__,_||_| |_| |_|
                    Observium Community Edition 0.16.1.7533
                                   http://www.observium.org

Install initial database schema ... done.
-- Updating database/file schema
252 -> 253 ... (db) done.
253 -> 254 ... (db) done.
254 -> 255 ... (db) done.
255 -> 256 ... (php)
256 -> 257 ... (php)
257 -> 258 ... (php)
258 -> 259 ... (db) done.
259 -> 260 ... (php)
260 -> 261 ... (db) done.
261 -> 262 ... (php)
262 -> 263 ... (db) done.
263 -> 264 ... (db) done.
264 -> 265 ... (db) done.
265 -> 266 ... (db) done.
-- Done.

 

次に、Apacheまわりの設定を追加する。

mkdir rrd
chown apache:apache rrd
cat << EOF >> /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80>
   DocumentRoot /opt/observium/html/
   ServerName  obserniumサーバ名
   CustomLog /opt/observium/logs/access_log combined
   ErrorLog /opt/observium/logs/error_log
   <Directory "/opt/observium/html/">
     AllowOverride All
     Options FollowSymLinks MultiViews
     Require all granted
   </Directory>
</VirtualHost>
EOF
systemctl enable httpd
systemctl start httpd

 

ログを格納するディレクトリを作成する。

mkdir /opt/observium/logs
chown apache:apache /opt/observium/logs

 

ユーザを追加する。
一般ユーザはwebコンソールから作成できるので、とりあえずadminユーザ(level 10(管理者))にしてしまおう。

cd /opt/observium
./adduser.php admin adminパスワード 10

 

監視対象ホストを追加する。これも後からwebコンソールで出来る。
※実行時にSNMPの接続テストが行われるので、Linuxであれば事前にnet-snmpなどをインストールしておくこと。

./add_device.php 監視対象ホスト名 SNMPコミュニティ名 SNMPプロトコルバージョン(v1、v2c、v3。基本はv2c)

 

新しく登録した監視対象ホストの情報取得テストを実施する。

./discovery.php -h all
./poller.php -h all

 

crontabに対し、定期的に情報取得スクリプトをキックするように記述する。
なお、どうやらcrontab -eで編集した場合だと正常に動作しないようなので、「/etc/crontab」もしくは「/etc/cron.d/observium」に記述する必要があるようだ。

以下、設定例。

33 */6 * * * root /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 * * * * root /opt/observium/discovery.php -h new >> /dev/null 2>&1
*/5 * * * * root /opt/observium/poller-wrapper.py 2 >> /dev/null 2>&1

 

crontabに設定追加後、crondをリロードさせる。

systemctl reload crond

 

設定ファイルに対し、fpingを監視するように設定を追加する。

echo "\$config['fping'] = \"$(which fping)\";" >> config.php

2.監視対象ホストでの対応(CentOS 7での例)

一応、監視対象ホストでやることも記載しておく。
といっても大した事はしなくて良い。net-snmpをインストールするくらい(+SNMPコミュニティ名を変えるならその設定)だ。

yum -y install net-snmp net-snmp-utils
service snmpd start
chkconfig snmpd on

 

これでOK。
SNMPコミュニティ名はデフォルトで「public」となっている。

 

3.Webコンソールへアクセスする

さて、それではWebコンソール(http://ObserviumサーバIPアドレス)へアクセスしよう。
ログイン画面はデモページと同じみたいだ。早速、コンソールから作成したユーザでログインする。

Screenshot_from_2016-03-02 08:05:43

 

トップ画面。
現在の設定だと海のど真ん中にいることになっているようだw。
SNMPのロケーション情報を設定する必要がありそう…。

Screenshot_from_2016-03-02 07:59:20

 

デバイス情報(監視対象サーバ)。
自動的にLinuxと認識してくれている。

Screenshot_from_2016-03-02 08:00:17

Screenshot_from_2016-03-02 08:00:27

 

入れたばかりだから情報があまり貯まってないけど、グラフもちゃんと表示される。

Screenshot_from_2016-03-02 08:00:39

Screenshot_from_2016-03-02 08:00:50

 

いいなぁ…これすごいいいなぁ。
SNMPってことはネットワーク機器も監視できるわけだし、物理サーバのマネジメントポート経由での監視も可能のはずだ。

家の監視ツールとしては、かなり有力候補になっている。

 

ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus) ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)

timedatectlでOSのタイムゾーンを変更する

$
0
0

Linux系OSのタイムゾーンを切り替える場合、「timedatectl」コマンドを用いる。

●設定できるタイムゾーンを確認する

timedatectl  list-timezones

20160303_000000

 

●現在のステータス情報を取得する

timedatectl status

20160303_000001

 

●タイムゾーンを変更する

timedatectl set-timezone タイムゾーン名

20160303_000002

 

●リモートサーバのタイムゾーンを設定する

timedatectl -H ユーザ名@ホスト名 サブコマンド

20160303_000004

 

たのしいインフラの歩き方 たのしいインフラの歩き方

CentOS 7にZenoss Core 5をインストールする

$
0
0

今回は、CentOS 7に監視ツール『Zenoss Core 5』をインストールしてみる。
Zenoss Coreは、Docker を用いた監視ツール。インストールについては自動的に行ってくれるデプロイメントスクリプトも存在しているので導入も簡単なようだ。

ただ、推奨スペックがおかしい(CPU 4コア、メモリ 20GB以上)ので、気軽に使うのはちょっとむずかしいかも・・・。Redis使ってるからかな?
とりあえず、まずは使ってみよう。

1.インストール

まず、事前準備として以下のようにディレクトリ作成、ファイルシステムをマウント、fstabに設定を追記する必要がある。

Path                        Type        Min size
/                           xfs         30GB
/var/lib/docker             xfs         30GB
/opt/serviced/var           xfs         30GB
/opt/serviced/var/volumes   btrfs       1GB
/opt/serviced/var/backups   xfs         1GB

 

作成後、以下のコマンドを実行してインストーラーを起動、対話式でインストールを進める。

cd /tmp
curl -O https://raw.githubusercontent.com/monitoringartist/zenoss5-core-autodeploy/master/core-autodeploy.sh
chmod +x core-autodeploy.sh
./core-autodeploy.sh

 

これで、スクリプト終了時にインストールが完了する。
なお、インストール時に以下のようなエラーが出る場合がある。

4 Zenoss Core 5 deployement - (Sun, 06 Mar 2016 13:15:17 +0900)
4.1 Adding current host to the default resource pool
Please be patient, because docker image zenoss/serviced-isvcs must be downloaded before first start.
You can check progress in new console: journalctl -u serviced -f -a -n 0
Script is trying to check status every 10s. Timeout for this step is 15 minutes.
serviced host list 2>&1
echo "dial tcp4 172.28.0.159:4979: connection refused" | grep -v loopback | wc -l
Problem with adding a host - check output from test: dial tcp4 172.28.0.159:4979: connection refused

このエラーが出た場合、以下のコマンドを実行して再度インストーラースクリプトを実行する。

git clone https://gist.github.com/mmaloney/48f3a5b392d03b8e3f53 ~/apptemplate
templateid=$(serviced template add ~/apptemplate/webserver.json)
serviced host add $(hostname):4979 default
rpm -e zenoss-repo-1-1.x86_64

2.WEBコンソールへアクセス

さて、それではWEBコンソール(https://サーバのIPアドレス)へアクセスしよう。
なお、ログイン時のパスワードはOSのユーザ名・パスワードと同じものが利用出来る。

Screenshot_from_2016-03-06 13:22:04

 

少し触った程度だが、グラフはかなりキレイに表示されている。

Screenshot_from_2016-03-06 13:23:33

Screenshot_from_2016-03-06 13:36:42

Screenshot_from_2016-03-06 13:30:34

 

推奨スペックがかなり気になるトコではあるが、候補としては検討しても良さそうだ。

ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus) ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)

Ubuntu Server 14.04 LTSへWEBベースのサーバサイドオフィススイート『ONLYOFFICE』をインストールする

$
0
0

オフィススイートといえば、Microsoftの提供している『Microsoft Office』やオープンソースの『Libre Office』などが有名だ。
今回紹介する『ONLYOFFICE』は、もともとは『TeamLab Office』というプロジェクトで知られていたHTML 5ベースのプライベートクラウドで利用できるMicrosoft Office互換のオフィススイートだ。HTML5で利用するため、クライアントに必要なのはブラウザのみ。サーバ機能はdockerで提供されている。イメージ的には、プライベートクラウド型のオフィスソフトと言った方が正しいだろうか。
イメージ的には、Microsoft Office Onlineのプライベートネットワーク版に近いかも(いや、どちらかというとMS Office Web Apps サーバーかな?)。

今回は、Ubuntu Server 14.04 LTSでこの『ONLYOFFICE』をインストールし、利用してみることにする。
なお、意外とスペックを要求されるので注意。試すにしても、なるべくスペックの高いマシンで行おう。

1.『ONLYOFFICE』のインストール

まずは、以下のコマンドでDockerをインストールする。

wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker $USER

 

次に、以下のコマンドを実行し、ONLYOFFICEのコンテナイメージを導入する。
※docker-composeはすごい時間かかるので、気長に待つこと

sudo apt-get -y install python-pip
sudo pip install -U docker-compose
wget https://raw.githubusercontent.com/ONLYOFFICE/Docker-CommunityServer/master/docker-compose.yml
sudo docker-compose up -d

 

docker-composeが無事終了したら、インストールは完了となる。
以降、OSの再起動時などはこのコマンドを再度実行させることでDockerコンテナを起動させサービスを利用できるようにする。

2.WEBコンソールへアクセスして使ってみる

さて、それではWEBコンソール(http://IPアドレス)へアクセスしてみよう。
アクセスすると、最初にインストールプロセスが走るので、終了まで待機する。
※これもかなり時間がかかる

Screenshot_from_2016-03-06 17:12:17

 

処理が終了したら、管理ユーザである『administrator』のメールアドレス・パスワード、ロケーション、タイムゾーンなどを設定しSaveする。

Screenshot_from_2016-03-06 17:28:28

 

これで、利用できるようになった。
初期設定時に指定したメールアドレス宛にアクティベーションリンクが送られているので、認証を済ませてしまおう。

認証後、以下の画面からドキュメントをクリックすることで、自身が持っているドキュメントの管理画面に移る。

Screenshot_from_2016-03-06 17:28:37

Screenshot_from_2016-03-06 17:50:02

 

最初に、サンプルファイルが登録されているので中身を見てみよう。

●ドキュメント

Screenshot_from_2016-03-06 17:32:44

 

●スプレッドシート

Screenshot_from_2016-03-06 17:30:34

 

●プレゼンテーション

Screenshot_from_2016-03-06 17:32:34

 

新規でファイルを作成する場合は、左上の「作成」から作成するファイルの種類を選択する。

Screenshot_from_2016-03-06 17:52:52

Screenshot_from_2016-03-06 17:56:35

 

オフィススイートとして、ドキュメントやプレゼンテーション、スプレッドシートの他、プロジェクト管理やCRM、メーラーとしても動作する。

●プロジェクト管理

Screenshot_from_2016-03-06 18:02:41

 

●CRM

Screenshot_from_2016-03-06 18:03:06

 

●メーラー

Screenshot_from_2016-03-06 18:03:16

 

Microsoft Officeとの互換性を考えるとなんとも言えないが、少し触った限り動作自体はキビキビと動いていたので、触ってみた感触としてはかなりアリな気がする。
外とドキュメントのやり取りをしないならば(プロジェクト内でだけドキュメントやプロジェクト管理をするならば)選択肢としては個人的にアリだと思う。

サーバとしての冗長性等については課題となる気がするが、小規模なプロジェクトならば試してみる価値はあると思う。
(Access相当の機能は無さそうだけど…そこはまぁ、別にDBサーバ立ち上げてやればいいだろう
後は、やっぱ日本語が大分あやしいので、そこはこれからに期待か)

 

実務で使えるLibreOffice 実務で使えるLibreOffice

CentOS7でZabbix2.2から3.0へUpgradeする

$
0
0

さて、先日インストールしたZabbix2.2だが、せっかくなので3.0へアップグレードしてみようと思う。
(厳密には、入れなおしといった方が正しい気がするけど)

まず、以下のコマンドで現在のZabbixのバージョンを確認する。

rpm -qa | grep zabbix
[root@BS-PUB-MONITOR-01 ~]# rpm -qa | grep zabbix
zabbix22-2.2.11-1.el7.x86_64
zabbix22-server-mysql-2.2.11-1.el7.x86_64
zabbix22-web-2.2.11-1.el7.noarch
zabbix22-dbfiles-mysql-2.2.11-1.el7.noarch
zabbix22-server-2.2.11-1.el7.noarch
zabbix22-web-pgsql-2.2.11-1.el7.noarch
zabbix22-agent-2.2.11-1.el7.x86_64

 

確かにzabbixのバージョンが2.2であることを確認したら、Zabbixを停止し現時点のバックアップを取得する。

systemctl stop zabbix-server
cp -ar /usr/share/zabbix/ /var/tmp/zabbix_web
cp -ar /etc/zabbix/ /var/tmp/zabbix_etc
mysqldump -u root -p -x --all-databases > /var/tmp/zabbix_web.sql

 

次に、zabbix22に関連するrpmパッケージを全てアンインストールする。

yum erase zabbix22
rpm -qa | grep zabbix22 |xargs -n 1 rpm -e
rpm -qa | grep zabbix

アンインストール後、以下のコマンドでZabbix 3.0のリポジトリをインストールし、Zabbix3.0のインストールを行う。

rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum update
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent

 

これで、zabbix 3.0がインストールできた。

rpm -qa | grep zabbix
[root@BS-PUB-MONITOR-01 ~]# rpm -qa | grep zabbix
zabbix-release-3.0-1.el7.noarch

 

設定ファイルを編集し、DBパスワード等を記述し、zabbixのサービスを起動、自動起動設定を行う。
※設定ファイルをそのままcp等で戻すとエラーになるので注意

systemctl restart zabbix-server
systemctl restart zabbix-agent

 

しばらくしたら、Zabbix 3.0にアップグレードされている事が確認出来る。

Screenshot_from_2016-03-06 20:07:00

 

統合監視ソフトウェアMIRACLE ZBX/Zabbixシステム管理 (アスキー書籍) 統合監視ソフトウェアMIRACLE ZBX/Zabbixシステム管理 (アスキー書籍)

CentOS 7に分散オブジェクトストレージ『Ceph』をインストールする

$
0
0

最近、仕事でS3互換のインターフェイスやブロックデバイスとして使える分散オブジェクトストレージ『Ceph』を使っているのだが、ある程度触れる環境が欲しいと思ったので家に構築することにした。
そもそも、Cephってどういうものなのか?という部分については、以下の資料が詳しいのでリンクを掲載しておく。

 

簡単に、自分の中でまとめてみると以下のような特徴がある。

  • ファイルを複数に分割しオブジェクトとして保持する
  • 最終的なファイルの置き場所はOSDという単位で管理されている(基本的には1ディスク(1ノード)で管理)
  • 分割されたファイル(以降、オブジェクト)は、Pool→Placement Groupの順に流れていく
  • 分割したオブジェクトは、PoolからPlacement Groupに送る
  • Placement Groupは、送信元のPoolに設定されているレプリケーション数(同期数。デフォルトでは3)に応じ、他のOSDにあるPlacement Groupへファイルを同期する
  • 複数のインターフェイスを持っている(S3互換のRadosGateway、ブロックデバイスとして利用可能なrbd、ファイル・システムであるCephFSなど)

 

…正直、この時点でだいぶお腹いっぱいな感じがある。
とりあえず、今回はこのCephをCentOS 7上にインストール、構築する事にする。

なお、Cephではクラスタとは別に管理用ノードを構築して、そこから一元管理するためのツール(ceph-deploy)が配布されているので、今回はこれを用いてインストールを進めていく。
※つまり、この手順ではCeph管理ノードとCephデータノード(クラスタを構成するノード)の2種類が登場する。

今回は、Cephデータノードをデフォルトの最小構成である3台、管理ノード1台の計4台を構築する。
なお、各ホストにはIPアドレスやホスト名などを適切に設定済であるとする。

なお、今回導入したバージョンはCeph 9.2.1となっている。

 

1.事前準備

Cephのインストール前に、事前にNTPの設定等を行っておく。
この項目の内容は、Ceph管理ノード

●NTPの設定

Cephでは、クラスタの構成ノード間で0.05秒以上時刻に差異があるとヘルスチェックで警告が出るようになっているため、chronyをインストールしておく。

yum install -y chrony
systemctl enable chronyd
systemctl start chronyd

 

●SELinux/Firewalldの無効化

SELinuxおよびFirewalldを無効化しておく。

setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

 

●ユーザ追加

Ceph管理ノードから接続するためのユーザを作成し、sudoersに設定をする。
なお、接続時は鍵認証で行うため、パスワードは後で削除する。

useradd ceph
passwd ceph
echo 'ceph ALL = (root) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/ceph
echo 'Defaults env_keep+="http_proxy"' | sudo tee -a /etc/sudoers.d/ceph
echo 'Defaults env_keep+="https_proxy"' | sudo tee -a /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
sed -i 's/Defaults.*requiretty/Defaults !requiretty/g' /etc/sudoers

 

●hostsへの登録

各ノードのhostsに対し、それぞれのホスト名とIPアドレスを紐付けておく。

 

これで事前準備は完了となる。

2.Ceph管理ノードを構築する

さて、それではCeph管理ノードを構築していこう。
まず、Ceph管理ノードからcephユーザで各データノードにパスワード無しでssh接続できるよう、鍵認証設定を行う。
※念のため、作業後はcephユーザのパスワードを空にしておくと良いだろう。

su - ceph
ssh-keygen
ssh-copy-id ceph@Cephデータノード(IPアドレス)

 

sshの鍵認証設定ができたら、Ceph管理ノードから各データノードを管理するためのコマンドである「ceph-deploy」コマンドをインストールする。

sudo rpm -ivh https://ceph.com/rpm-hammer/el7/noarch/ceph-release-1-1.el7.noarch.rpm
sudo yum install -y ceph-deploy
sudo rpm -e ceph-release-1-1.el7.noarch

 

3.Cephクラスタの構築

さて、それではデータノードにCephをインストールして、Cephクラスタを構築していこう。
まずは、Ceph管理ノードで以下のコマンドを実行し各Cephで用いる設定ファイルを作成する。

ceph-deploy new データノード1...データノードN
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy new BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy new BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['BS-PUB-CEPHNODE-01', 'BS-PUB-CEPHNODE-02', 'BS-PUB-CEPHNODE-03']
...略

 

コマンド実行後、カレントディレクトリ配下に設定ファイルが作成されている。
このファイルに対し、「[global]」配下へCephクラスタのネットワーク情報について追記をする。

echo "public_network = 172.2X.XXX.XXX/24" >> ./ceph.conf
echo "cluster_network = 172.2X.YYY.YYY/24" >> ./ceph.conf

 

設定ファイル追記後、以下のコマンドを実行し各ノードへCephのインストール、クラスタの構築をする。
※インストールでエラーが発生する場合、エラーが発生したノードだけを指定して再実行するか、手動で「yum install -y ceph ceph-radosgw」を実行する事。(yumでのインストールの際、リポジトリの問題なのか結構エラーが出るので注意…)

ceph-deploy install 管理ノード1 データノード1...データノードN
ceph-deploy mon create-initial
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy install BS-PUB-CEPHADM BS-PUB-CEPHDATA-01 BS-PUB-CEPHDATA-02 BS-PUB-CEPHDATA-03
...以下略

 

これで、クラスタは構成された。
次に、実際にデータを補完するOSD(ceph-osd)を構築する。

OSDでは、journalというキャッシュディスクとデータを書き出すディスクの2種類存在する(なお、データを書き出すディスクはxfsなどを用いる)。
ジャーナルとデータを書き出すディスクは、パフォーマンスを考えると別々に構成した方が良いようだ。
今回はデータ保存先として、各データノードへ「/ceph」というディレクトリを作成し、そこに「/dev/sdb1(xfs)」を、ジャーナルに「/dev/vda」を使用する。

まず、各Cephデータノードで以下のコマンドを実行する。

sudo /mkdir -p /ceph
fdisk /dev/sdb
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /ceph
sudo chown ceph:ceph /ceph
echo "/dev/sdb1 /ceph                    xfs    defaults        0 0" >> /etc/fstab

 

次に、Ceph管理ノードで以下のコマンドを実行し、OSDを構成する。
※各ノードごとに実行していく

ceph-deploy osd prepare データノード名:データの書き出しディレクトリ:ジャーナル用デバイス
ceph-deploy osd activate データノード名:データの書き出しディレクトリ:ジャーナル用デバイス

 

次に、Ceph管理ノードからモニタリングが行えるよう、各ノードへ認証鍵を配布する。
以下のコマンドをCeph管理ノードで実行する。

ceph-deploy admin 管理ノード1 データノード1...データノードN
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy admin BS-PUB-CEPHADM BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy admin BS-PUB-CEPHADM BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['BS-PUB-CEPHADM', 'BS-PUB-CEPHNODE-01', 'BS-PUB-CEPHNODE-02', 'BS-PUB-CEPHNODE-03']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to BS-PUB-CEPHADM
[BS-PUB-CEPHADM][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHADM][DEBUG ] connected to host: BS-PUB-CEPHADM
[BS-PUB-CEPHADM][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHADM][DEBUG ] detect machine type
[BS-PUB-CEPHADM][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-01][DEBUG ] connected to host: BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-01][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-02][DEBUG ] connected to host: BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-02][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-02][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-03][DEBUG ] connected to host: BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-03][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-03][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

 

次に、以下のコマンドを各ノードで実行し、認証鍵をcephユーザが読み込めるようにする。

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

 

この状態で、Ceph管理ノードから「ceph health」コマンドを実行すると、Cephのステータスを取得することが出来る。

ceph health
ceph health detail # エラーが発生している場合、より詳細に確認出来る
[ceph@BS-PUB-CEPHADM ~]$ ceph health
HEALTH_OK
[ceph@BS-PUB-CEPHADM ~]$ ceph health detail
HEALTH_OK

 

これで、無事にCephのクラスタ構築が出来上がった。
次回は、S3互換で動作させられるCeph用のオブジェクトゲートウェイ、Rados Gatewayを導入する。

 

ストレージ技術: クラウドとビッグデータの時代 ストレージ技術: クラウドとビッグデータの時代

CephにS3互換のオブジェクトゲートウェイである『RadosGateway』を導入する

$
0
0

前回構築したCephクラスタに対し、S3互換のオブジェクトゲートウェイである『RadosGateway』を導入する。
前回同様、Ceph管理ノードからの一元操作で処理を行う。

1.RadosGatewayの構築

まず、以下のコマンドをCeph管理ノードのceph newコマンドで生成した配布設定ファイルのあるディレクトリで実行する。

cat <<EOF >> ceph.conf
[client]
rgw frontends = "civetweb port=80"
EOF

 

上のコマンドを実行し設定ファイルを編集後、設定ファイルを各ノードに配布する。

ceph-deploy --overwrite config push 管理ノード1 データノード1...データノードN
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy --overwrite config push BS-PUB-CEPHADM BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 B
S-PUB-CEPHNODE-03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy --overwrite config push BS-PUB-CEPHADM BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : True
[ceph_deploy.cli][INFO  ]  subcommand                    : push
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['BS-PUB-CEPHADM', 'BS-PUB-CEPHNODE-01', 'BS-PUB-CEPHNODE-02', 'BS-PUB-CEPHNODE-03']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.config][DEBUG ] Pushing config to BS-PUB-CEPHADM
[BS-PUB-CEPHADM][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHADM][DEBUG ] connected to host: BS-PUB-CEPHADM
[BS-PUB-CEPHADM][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHADM][DEBUG ] detect machine type
[BS-PUB-CEPHADM][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.config][DEBUG ] Pushing config to BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-01][DEBUG ] connected to host: BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-01][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.config][DEBUG ] Pushing config to BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-02][DEBUG ] connected to host: BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-02][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-02][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.config][DEBUG ] Pushing config to BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-03][DEBUG ] connected to host: BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-03][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-03][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

 

設定ファイルを配布したら、各データノードでRadosGatewayの作成を行う。

ceph-deploy --overwrite rgw create データノード1...データノードN
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy --overwrite rgw create BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy --overwrite rgw create BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  rgw                           : [('BS-PUB-CEPHNODE-01', 'rgw.BS-PUB-CEPHNODE-01'), ('BS-PUB-CEPHNODE-02', 'rgw.BS-PUB-CEPHNODE-02'), ('BS-PUB-CEPHNODE-03', 'rgw.BS-PUB-CEPHNODE-03')]
[ceph_deploy.cli][INFO  ]  overwrite_conf                : True
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.rgw][DEBUG ] Deploying rgw, cluster ceph hosts BS-PUB-CEPHNODE-01:rgw.BS-PUB-CEPHNODE-01 BS-PUB-CEPHNODE-02:rgw.BS-PUB-CEPHNODE-02 BS-PUB-CEPHNODE-03:rgw.BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-01][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-01][DEBUG ] connected to host: BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-01][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.2.1511 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[BS-PUB-CEPHNODE-01][DEBUG ] create path recursively if it doesn't exist
[BS-PUB-CEPHNODE-01][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.BS-PUB-CEPHNODE-01 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.BS-PUB-CEPHNODE-01/keyring
[BS-PUB-CEPHNODE-01][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host BS-PUB-CEPHNODE-01 and default port 7480
[BS-PUB-CEPHNODE-02][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-02][DEBUG ] connected to host: BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-02][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.2.1511 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[BS-PUB-CEPHNODE-02][DEBUG ] create path recursively if it doesn't exist
[BS-PUB-CEPHNODE-02][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.BS-PUB-CEPHNODE-02 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.BS-PUB-CEPHNODE-02/keyring
[BS-PUB-CEPHNODE-02][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.BS-PUB-CEPHNODE-02
[BS-PUB-CEPHNODE-02][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host BS-PUB-CEPHNODE-02 and default port 7480
[BS-PUB-CEPHNODE-03][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-03][DEBUG ] connected to host: BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-03][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.2.1511 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[BS-PUB-CEPHNODE-03][DEBUG ] create path recursively if it doesn't exist
[BS-PUB-CEPHNODE-03][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.BS-PUB-CEPHNODE-03 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.BS-PUB-CEPHNODE-03/keyring
[BS-PUB-CEPHNODE-03][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][WARNIN] Created symlink from /etc/systemd/system/ceph.target.wants/ceph-radosgw@rgw.BS-PUB-CEPHNODE-03.service to /usr/lib/systemd/system/ceph-radosgw@.service.
[BS-PUB-CEPHNODE-03][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.BS-PUB-CEPHNODE-03
[BS-PUB-CEPHNODE-03][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host BS-PUB-CEPHNODE-03 and default port 7480

 

これで、RadosGatewayが構築・起動する。
今回の設定では80番ポートを開いているので、telnetコマンドでポートが開いている事を確認する。

telnet データノード 80

 

なお、この時バイナリがcephユーザで実行時にポートを開けられないようになっている場合がある。
その場合は、データノードで以下のコマンドを実行し、ケーパビリティと.serviceファイルを編集してサービスを再起動してあげると良いだろう。

sed -i -e 's/\--setuser ceph //g' -e 's/\--setgroup ceph//g' /usr/lib/systemd/system/ceph-radosgw\@.service
sed -i '/ExecStart/aUser=ceph\nGroup=ceph' /usr/lib/systemd/system/ceph-radosgw\@.service
setcap CAP_NET_BIND_SERVICE+ep /usr/bin/radosgw
reboot
[root@BS-PUB-CEPHNODE-02 ~]# cat /usr/lib/systemd/system/ceph-radosgw\@.service
[Unit]
Description=Ceph rados gateway
After=network-online.target local-fs.target
Wants=network-online.target local-fs.target
PartOf=ceph.target

[Service]
LimitNOFILE=1048576
LimitNPROC=1048576
EnvironmentFile=-/etc/sysconfig/ceph
Environment=CLUSTER=ceph
ExecStart=/usr/bin/radosgw -f --cluster ${CLUSTER} --name client.%i
User=ceph
Group=ceph

[Install]
WantedBy=ceph.target

2.RadosGatewayへの接続アカウント作成

さて、RadosGatewayは構築できたので、これを経由してCephにアクセスするための接続用アカウントを作成する。
以下のコマンドをCeph管理ノードから実行し、アカウントを作成しアクセスキーとシークレットキーを取得する。

radosgw-admin user create --uid=ユーザ名 --display-name="表示名"
[ceph@BS-PUB-CEPHADM ~]$ radosgw-admin user create --uid=ceph-test --display-name="ceph-test"
{
    "user_id": "ceph-test",
    "display_name": "ceph-test",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [],
    "keys": [
        {
            "user": "ceph-test",
            "access_key": "XXSHDYXXLWNASXX6XXA7",
            "secret_key": "kuBaFtXXtYNoXXICXXGCJlXXof6tXXhMXXoQXXzA"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "temp_url_keys": []
}

 

このアクセスキーとシークレットキーを使って、RadosGatewayへ接続できるようになる。
※このキーは後から確認出来ないはずなので、必ず控えておくこと

 

3.接続確認

さて、それでは接続確認をしてみよう。
接続確認はpython及びbotoを使用するので、botoがインストールされていない場合は以下のコマンドでインストールする(CentOSの場合。epelインストール済。)。

yum install python-pip
pip install boto

 

次に、こちらを参考に以下のようなスクリプトを作成し、適当なバケットの作成とオブジェクト(中身が「Hello World!」となっているhello.txt)をおいてみて、RadosGW経由でのアクセスとバケットの確認が出来ることを確認する。

●radosgw-test.py

import boto
import boto.s3.connection
access_key = 'アクセスキー'
secret_key = 'シークレットキー'

conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = 'RadosGateway アドレス',
        is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )

for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
        )

bucket = conn.create_bucket('my-new-bucket')

for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
        )

key = bucket.new_key('hello.txt')
key.set_contents_from_string('Hello World!')

for key in bucket.list():
        print "{name}\t{size}\t{modified}".format(
                name = key.name,
                size = key.size,
                modified = key.last_modified,
                )
[ceph@BS-PUB-CEPHADM ~]$ python test.py
my-new-bucket   2016-03-07T23:06:55.000Z
hello.txt       12      2016-03-07T23:07:38.000Z

 

試しに、このhello.txtをダウンロードしてみよう。

[ceph@BS-PUB-CEPHADM ~]$ python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto
>>> import boto.s3.connection
>>> access_key = 'XXSHDYXXLWNASXX6XXA7'
>>> secret_key = 'kuBaFtXXtYNoXXICXXGCJlXXof6tXXhMXXoQXXzA'
>>>
>>> conn = boto.connect_s3(
...         aws_access_key_id = access_key,
...         aws_secret_access_key = secret_key,
...         host = 'BS-PUB-CEPHNODE-01',
...         is_secure=False,               # uncomment if you are not using ssl
...         calling_format = boto.s3.connection.OrdinaryCallingFormat(),
...         )
>>>
>>> bucket = conn.lookup('my-new-bucket')
>>> key = bucket.get_key('hello.txt')
>>> key.get_contents_to_filename('/tmp/hello.txt')
>>>
[ceph@BS-PUB-CEPHADM ~]$ ls -la /tmp/hello.txt
-rw-rw-r--. 1 ceph ceph 12  3月  8 08:07 /tmp/hello.txt
[ceph@BS-PUB-CEPHADM ~]$ cat /tmp/hello.txt
Hello World!
[ceph@BS-PUB-CEPHADM ~]$

 

確かに、バケットを作成しアップロード、ダウンロードして、中身が想定どおりであることが確認出来た。

 

すべてわかるストレージ大全 2016 ( ) すべてわかるストレージ大全 2016 ( )

CephクラスタにOSDを追加してスケールアウトする

$
0
0

さて、前回・前々回とCephクラスタを構築したが、これらはあくまでも最低台数でのクラスタを構築していた。
今回は、このクラスタにOSD(データノード)を追加し、3台構成から5台構成にする。

1.事前準備

さて、まず事前準備として、追加するデータノードに対し、以下のコマンドを実行する。

# NTP
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd

# SELinux
setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config

# Firewalld
systemctl stop firewalld
systemctl disable firewalld

# User追加
useradd ceph
passwd ceph
echo 'ceph ALL = (root) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/ceph
echo 'Defaults env_keep+="http_proxy"' | sudo tee -a /etc/sudoers.d/ceph
echo 'Defaults env_keep+="https_proxy"' | sudo tee -a /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
sed -i 's/Defaults.*requiretty/Defaults !requiretty/g' /etc/sudoers

 

その後、既存の各Cephデータノード、Ceph管理ノードのhostsに、新規追加するデータノードを登録する。

 

2.追加ノードへCephのインストール

最初に、Ceph管理ノードで配布する設定ファイルの以下項目に対し、追加対象ノードを追記する。

  • mon_initial_members
  • mon_host

 

設定ファイル追記後、各Cephノード(管理ノード、既存・新規のデータノード)に対し、設定ファイルを配布する。

ceph-deploy --overwrite-conf config push Ceph管理ノード Cephデータノード1 ... CephデータノードN

 

Ceph管理ノードから、以下のコマンドで追加するCephデータノードに対しCephをインストールする。

ceph-deploy install 追加データノード1 ... 追加データノードN

 

対象データノードに対しCephインストール後、以下のコマンドでモニタに新規Cephデータノードを追加する。

ceph-deploy mon add 追加データノード # 1台づつ実行する

 

3.追加ノードへOSD/RadosGatewayの追加

追加ノードに対し、以下のコマンドを実行しOSD/RadosGatewayの追加を実施する。
まず、追加する各Cephデータノードで以下のコマンドを実行する。

sudo /mkdir -p /ceph
fdisk /dev/sdb
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /ceph
sudo chown ceph:ceph /ceph
echo "/dev/sdb1 /ceph                    xfs    defaults        0 0" >> /etc/fstab

 

Ceph管理ノードで以下のコマンドを実行し、追加データノードでOSDを構成する。
※各ノードごとに実行していく

ceph-deploy --overwrite-conf osd prepare データノード名:データの書き出しディレクトリ:ジャーナル用デバイス
ceph-deploy osd activate データノード名:データの書き出しディレクトリ:ジャーナル用デバイス

 

次に、Ceph管理ノードからモニタリングが行えるよう、各ノードへ認証鍵を配布する。
以下のコマンドをCeph管理ノードで実行する。

ceph-deploy admin 追加データノード1 ... 追加データノードN

 

RadosGWの追加については、詳細は前回記述したこちらの内容を参考にしてもらいたい。
とりあえず、Ceph管理ノードで以下のコマンドを実行することで、RadosGatewayが構築できる。

ceph-deploy rgw create 追加データノード1 ... 追加データノードN

 

疎通確認でうまくいかない場合は、前回の内容を参考にしてもらいたい。

 

IT技術者なら知っておきたい ストレージの原則と技術 IT技術者なら知っておきたい ストレージの原則と技術

CentOS 7にVagrantを導入する

$
0
0

ふと思い立って、CentOS 7″に”Vagrantを導入しようと思ったのでその備忘。
入れ方は簡単で、まず以下のコマンドでVirtualBoxをインストールする。

cd /etc/yum.repos.d/
wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
yum update -y
yum install binutils qt gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
yum install VirtualBox-5.0

次に、以下のコマンドでVagrantのパッケージダウンロード、インストールを実施する。

cd
wget https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.rpm
yum localinstall vagrant_1.8.1_x86_64.rpm

 

これで、CentOS 7にVagrantの導入が完了した。

 

Vagrant入門ガイド Vagrant入門ガイド

CephクラスタからOSDを切り離して縮小させる

$
0
0

前回、CephクラスタにOSDを追加していたが、今回はそのうちの1台をクラスタから切り離してみる。

1.ceph-monの設定から除外する

まず、ceph-monの監視対象から対象ノードを除外し、接続がされないようにする。
Ceph管理ノードで設定ファイルを開き、以下の項目から対象のノードを除外(削除)する。

  • mon_initial_members
  • mon_host

 

削除後、Ceph管理ノードから以下のコマンドで各ノードに設定ファイルを配布する。

ceph-deploy --overwrite config push Ceph管理ノード データノード1 ... データノードN

 

設定ファイル配布後、以下のコマンドを実行し対象ノードでのceph-monを停止する。

ceph-deploy mon destroy 除外対象ノード
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy mon destroy BS-PUB-CEPHNODE-04
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy mon destroy BS-PUB-CEPHNODE-04
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : destroy
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  mon                           : ['BS-PUB-CEPHNODE-04']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mon][DEBUG ] Removing mon from BS-PUB-CEPHNODE-04
[BS-PUB-CEPHNODE-04][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-04][DEBUG ] connected to host: BS-PUB-CEPHNODE-04
[BS-PUB-CEPHNODE-04][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-04][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-04][DEBUG ] find the location of an executable
[BS-PUB-CEPHNODE-04][DEBUG ] get remote short hostname
[BS-PUB-CEPHNODE-04][INFO  ] Running command: sudo ceph --cluster=ceph -n mon. -k /var/lib/ceph/mon/ceph-BS-PUB-CEPHNODE-04/keyring mon remove BS-PUB-CEPHNODE-04
[BS-PUB-CEPHNODE-04][WARNIN] removed mon.BS-PUB-CEPHNODE-04 at 172.20.100.149:6789/0, there are now 4 monitors
[BS-PUB-CEPHNODE-04][INFO  ] polling the daemon to verify it stopped
[BS-PUB-CEPHNODE-04][INFO  ] Running command: sudo systemctl stop ceph-mon@BS-PUB-CEPHNODE-04.service
[BS-PUB-CEPHNODE-04][INFO  ] Running command: sudo mkdir -p /var/lib/ceph/mon-removed
[BS-PUB-CEPHNODE-04][DEBUG ] move old monitor data

2.OSDの切り離し

次に、OSDの切り離しを実施する。
まず、以下のコマンドで切り離すノードのOSDのID/Nameを取得する。

ceph-deploy osd list 除外対象ノード
[ceph@BS-PUB-CEPHADM ~]$ ceph-deploy osd list BS-PUB-CEPHNODE-04
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /bin/ceph-deploy osd list BS-PUB-CEPHNODE-04
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : list
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  disk                          : [('BS-PUB-CEPHNODE-04', None, None)]
[BS-PUB-CEPHNODE-01][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-01][DEBUG ] connected to host: BS-PUB-CEPHNODE-01
[BS-PUB-CEPHNODE-01][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-01][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-01][DEBUG ] find the location of an executable
[BS-PUB-CEPHNODE-01][DEBUG ] find the location of an executable
[BS-PUB-CEPHNODE-01][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd tree --format=json
[BS-PUB-CEPHNODE-04][DEBUG ] connection detected need for sudo
[BS-PUB-CEPHNODE-04][DEBUG ] connected to host: BS-PUB-CEPHNODE-04
[BS-PUB-CEPHNODE-04][DEBUG ] detect platform information from remote host
[BS-PUB-CEPHNODE-04][DEBUG ] detect machine type
[BS-PUB-CEPHNODE-04][DEBUG ] find the location of an executable
[BS-PUB-CEPHNODE-04][INFO  ] Running command: sudo /usr/sbin/ceph-disk list
[BS-PUB-CEPHNODE-04][INFO  ] ----------------------------------------
[BS-PUB-CEPHNODE-04][INFO  ] ceph-3
[BS-PUB-CEPHNODE-04][INFO  ] ----------------------------------------
[BS-PUB-CEPHNODE-04][INFO  ] Path           /var/lib/ceph/osd/ceph-3
[BS-PUB-CEPHNODE-04][INFO  ] ID             3
[BS-PUB-CEPHNODE-04][INFO  ] Name           osd.3
[BS-PUB-CEPHNODE-04][INFO  ] Status         up
[BS-PUB-CEPHNODE-04][INFO  ] Reweight       1.0
[BS-PUB-CEPHNODE-04][INFO  ] Active         ok
[BS-PUB-CEPHNODE-04][INFO  ] Magic          ceph osd volume v026
[BS-PUB-CEPHNODE-04][INFO  ] Whoami         3
[BS-PUB-CEPHNODE-04][INFO  ] Journal path   /dev/vda1
[BS-PUB-CEPHNODE-04][INFO  ] Journal_uuid   75cac8f3-1c4d-4aff-9b15-e4b947676d48
[BS-PUB-CEPHNODE-04][INFO  ] ----------------------------------------

 

次に、対象のOSDに保存されたデータを他のノードに保持させるよう、リバランス処理を実行する。

ceph osd out OSDのID
[ceph@BS-PUB-CEPHADM ~]$ ceph osd out 3
marked out osd.3.

 

この処理が無事終わったら(ceph healthで「HEALTH_OK」が返ってくるなら)、以下のコマンドで認証鍵の削除とクラスタからの切り離しを実施する。
まず、削除対象ノードで、以下のコマンドを実行しOSDのサービスを停止する。

systemctl stop ceph-osd@OSDのID
[root@BS-PUB-CEPHNODE-04 ~]# systemctl stop ceph-osd@3

 

OSDの停止後、以下のコマンドをCeph管理ノードから実行し、OSDの切り離しを実施する。

ceph auth del OSDName
ceph osd rm OSD ID
[ceph@BS-PUB-CEPHADM ~]$ ceph auth del osd.3
entity osd.3 does not exist
[ceph@BS-PUB-CEPHADM ~]$ ceph osd rm 3
removed osd.3

 

最後に、osd treeを確認しOSDが無事切り離されている事を確認する。
※osd.3がいない事が確認できる

[ceph@BS-PUB-CEPHADM ~]$ ceph osd tree
ID WEIGHT  TYPE NAME                   UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.39038 root default
-2 0.09760     host BS-PUB-CEPHNODE-01
 0 0.09760         osd.0                    up  1.00000          1.00000
-3 0.09760     host BS-PUB-CEPHNODE-02
 1 0.09760         osd.1                    up  1.00000          1.00000
-4 0.09760     host BS-PUB-CEPHNODE-03
 2 0.09760         osd.2                    up  1.00000          1.00000
-5       0     host BS-PUB-CEPHNODE-04
-6 0.09760     host BS-PUB-CEPHNODE-05
 4 0.09760         osd.4                    up  1.00000          1.00000

 

すべてわかるストレージ大全 2016 ( ) すべてわかるストレージ大全 2016 ( )

Proxmox VE 4.1でKVMのディスクイメージをインポートする

$
0
0

Proxmox VE 4.1では、KVMベースではあるが、残念ながらWebコンソールから他の仮想プラットフォームからのイメージをインポートする方法が無い(KVMのディスクイメージ含む)。
そのため、ターミナルからの操作が必要となってくる。

今回は、KVMのディスクイメージ(.img)ファイルをインポートして、Proxmox上で利用する方法について記述する。

1.仮想マシンの作成

まず、こちらを参考にKVMのディスクイメージを利用する仮想マシンを作成する。
作成時、ディスクイメージタイプはraw、ディスクイメージは出来れば後ほどアップロードするimgファイルと同じ容量で作成を進める。
※ディスクイメージタイプ・容量が違う場合、仮想マシンの設定ファイル(/etc/pve/nodes/仮想ホスト名/qemu-server/仮想マシンID.conf)を直接いじって、ディスク容量をいじってやらないといけない。

2.ディスクイメージのアップロード

ディスクイメージ(.imgファイル)をscp経由などでアップロードし、対象の仮想マシンのイメージ格納ディレクトリ(デフォルトでは「/var/lib/vz/images/仮想マシンID/」)に移動、既存のディスクイメージ(vm-仮想マシンID-disk-1.raw)と置き換える。

 

3.仮想マシンの起動

ディスクイメージの置き換えが終わったら、後はWebコンソール上から仮想マシンを起動するだけだ。

 

ネットワーク仮想化 基礎からすっきりわかる入門書 ネットワーク仮想化 基礎からすっきりわかる入門書

Proxmox VE 4.1でVMwareESXiのディスクイメージ(vmdk)をインポートする

$
0
0

Proxmox VE 4.1では、ターミナルでの操作は必要となってくるが、以下のように操作することでVMware ESXiのディスクイメージ(vmdkファイル)をそのまま利用出来る(Webコンソール上からインポート出来ないけど)。

1.仮想マシンの作成

まず、こちらを参考にVMeare ESXiのディスクイメージを利用する仮想マシンを作成する。
作成時、ディスクイメージタイプはraw、ディスクイメージは出来れば後ほどアップロードするimgファイルと同じ容量で作成を進める。
※ディスクイメージタイプ・容量が違う場合、仮想マシンの設定ファイル(/etc/pve/nodes/仮想ホスト名/qemu-server/仮想マシンID.conf)を直接いじって、ディスク容量をいじってやらないといけない。

2.ディスクイメージのアップロード

ディスクイメージ(.vmdkファイル)をscp経由などでアップロードし、対象の仮想マシンのイメージ格納ディレクトリ(デフォルトでは「/var/lib/vz/images/仮想マシンID/」)に移動、既存のディスクイメージ(vm-仮想マシンID-disk-1.vmdk)と置き換える。

3.仮想マシンの起動

ディスクイメージの置き換えが終わったら、後はWebコンソール上から仮想マシンを起動するだけだ。
vmxファイルをそのまま利用出来ないのは少々残念だが、ディスクイメージをわざわざ変換しなくてもそのまま利用出来るのは楽だ。

 

VMware徹底入門  第4版 VMware vSphere 6.0対応 VMware徹底入門 第4版 VMware vSphere 6.0対応
Viewing all 743 articles
Browse latest View live