NoSQL on CentOS7
はじめに
NoSQLを勉強しようとして、以下の書籍を買った。
- 作者: 渡部徹太郎,河村康爾,北沢匠,佐伯嘉康,佐藤直生,原沢滋,平山毅,李昌桓
- 出版社/メーカー: 秀和システム
- 発売日: 2016/02/24
- メディア: 単行本
- この商品を含むブログ (1件) を見る
すぐに新しくなってしまう分野のため、鉄は熱いうちに打ての精神で読んでみた。
簡単に言えば、NoSQLに該当するプロダクトの特徴、使いどころ(ユースケース)、限界について綺麗に書かれてる印象。
ただ、各プロダクトのインストールの仕方までは書籍では取り扱われていない。
そのため、ここではCentOS7に各プロダクトのインストール方法について、自分の環境で試して見た結果をメモしてみようと試みた。
なお、ユースケースより自分の興味の持ったNoSQLは以下の通り。
(めんどくさそうなのを削除したともいう…)
- MongoDB
- Cassandra
- Redis
- Neo4j
上記4つのインストール手順について、CentOSの最小インストール + Firewalld無効化 + SELinux無効化 以降の手順を以下の通り示す。
MongoDB 3.2
インストール
/etc/yum.repos.d/mongodb-org-3.2.repoを以下の内容で作成する。
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=0
enabled=1
yumコマンドでインストールする。
# yum install mongodb-org
起動と自動起動
起動は以下の通り行う。
# systemctl start mongod
なお、自動起動についてだが、mongodはCentOS7のネイティブデーモンではないため、従来通りchkconfigを用いる。
# chkconfig mongod on
Cassandra 3.0
事前準備
Cassandraを動かすためには、最新版のJava8(Oracle Java SE 8 か OpenJDK 8)をインストールするように求められているため、OpenJDKを事前に入れておく。
# yum install java
インストール
/etc/yum.repos.d/datastax.repoを以下の内容で作成し、Datastaxのリポジトリを追加する。
[datastax]
name=DataStax Repo for Apache Cassandra
baseurl=http://rpm.datastax.com/community
enabled=1
gpgcheck=0
以下のコマンドを実行し Cassandra をインストールする。
なお、インストールによりCassandraユーザーが作成され、Cassandraの起動時に使用されます。
# yum install cassandra30
起動と自動起動
systemctlでやろうとするとこけるので、旧来の方法で行う。
# service cassandra start
# chkconfig cassandra on
Redis 3.2
書籍で取り扱われているRedisのバージョンは、3.0系である。
しかし、2016年8月25日現在、Redisは、REMIリポジトリには3.2系しかなく、EPELリポジトリには2.8系が最新の状況である。
そのため、3.0系以降のバージョンであるREMIリポジトリからパッケージを取得する方針を取ることにする。
インストール
Redisの最新版を取得するために、REMIリポジトリを追加する。
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yumコマンドでインストールする。
ここで直接REMIリポジトリを指定することを忘れないこと。
# yum install --enablerepo=remi redis
起動と自動起動
お決まりのパターンで行う。
# systemctl start redis
# systemctl enable redis
Neo4j 2.3
Neo4jにはCommunityバージョンとEnterpriseバージョンがあるが、今回はCommunityバージョンをインストールすることにした。
また、ここでインストールするバージョンは2.3.6とする。
事前準備
Neo4jは、サーバーでオープンできるファイル数について、40000以上を推奨している。
今回作成するのは検証環境なので、最大の65536にする。
/etc/security/limits.confに以下の通り追記する。
* soft nofile 65536
* hard nofile 65536
.bash_profile に以下を追加する。
export NEO4J_HOME=/usr/neo4j
ここで設定を反映させるため、再起動をする。
Neo4jを動かすためには、JDK7以上が必要なので、JDKを事前に入れておく。 また、lsofも入れておく。
# yum install java lsof
インストール
ブラウザで https://neo4j.com/download/other-releases/ にアクセスし、「Linux/Mac Neo4j 2.3.6 (tar)」を選択すると、「neo4j-community-2.3.6-unix.tar.gz」をダウンロードする。
そして、tarファイルを/rootに配置し、展開を行う。
# tar -xf neo4j-community-2.3.6-unix.tar.gz
# mv neo4j-community-2.3.6 /usr/neo4j
起動
標準設定では、外部からの接続はできない。
外部からブラウザでNeo4jに接続するためには、${NEO4J_HOME}/conf/neo4j-server.propertiesの標準設定を変更する必要がある。
org.neo4j.server.webserver.address=0.0.0.0
以下のコマンドにより起動する。
# ${NEO4J_HOME}/bin/neo4j console
ブラウザより、以下の通りアクセスを行う。
Neo4jのログイン画面で、初期ユーザーとパスワードを入力し、Neo4に接続する。
初期ユーザーはneo4jであり、そのパスワードはneo4jである。
なお、初回ログイン時にパスワードの変更が求められるので、変更を行う。
CentOS7のシステムバックアップに導入する必要のあるパッケージ一覧
はじめに
以下の要件を満たすシステムイメージのバックアップを行うオープンソースソフトウェアを調査した。
- 導入が容易である。
- データの配置先として、「ローカルディスク」「NFSサーバ」「USB メモリ」「テープ」「CD/DVD」「LVM」に対応している。
- LVMに対応している。
その結果として、有名なものにRelax and RecoverとMondo Rescueがあがった。
Relax and Recover
Relax and Recover とは、NFSサーバなどバックアップデータの保存先と、レスキューイメージを使って簡単にシステムイメージのバックアップ・リストアができるオープンソースソフトウェアである。
Relax-and-Recoverには以下のような特徴がある。
- RHEL 7.2から同梱されるようになった(yumで簡単にインストール可能)
- Bashのみから成る
- バックアップ、リストアの手順が非常に簡単
- バックアップデータとレスキューイメージを使ったリストアを行う
参考
Relax and Recoverでのシステム回復
https://oss.sios.com/redhat-ch/blog/rear
Mondo Rescue
Mondo Rescue とは、システムイメージのバックアップ・リストアができるオープンソースソフトウェアである。
パッケージが用意されているため、簡単に導入が可能。
Mondo Rescueには以下のような特徴がある。
この記事の目的
機能面も大事だが、あんまりパッケージを入れないで使えるほうが望ましい。
最小インストールが行われたCentOS7.2に対して、どれだけのパッケージのインストールが必要になるかの検証を行う。
結果
ほとんど入れる必要のないRelax and Recoverと、リポジトリの登録が必要なうえに大量のパッケージの導入が必要になるMondo Rescueと、結果が明確に分かれた。
以降、検証結果を示す。
検証
Relax and Recoverのインストール
本体のインストール
# yum install rear
【中略】
========================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================================
インストール中:
rear noarch 1.17.2-1.el7 base 354 k
依存性関連でのインストールをします:
attr x86_64 2.4.46-12.el7 base 66 k
トランザクションの要約
========================================================================================================================
インストール 1 パッケージ (+1 個の依存関係のパッケージ)
総ダウンロード容量: 419 k
インストール容量: 1.1 M
【以下略】
関連パッケージのインストール
以下の通りインストールする。
# yum install mkisofs syslinux
【中略】
========================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================================
インストール中:
genisoimage x86_64 1.1.11-23.el7 base 298 k
syslinux x86_64 4.05-12.el7 base 990 k
依存性関連でのインストールをします:
libusal x86_64 1.1.11-23.el7 base 135 k
mtools x86_64 4.0.18-5.el7 base 203 k
トランザクションの要約
========================================================================================================================
インストール 2 パッケージ (+2 個の依存関係のパッケージ)
総ダウンロード容量: 1.6 M
インストール容量: 4.1 M
【以下略】
Mondo Rescueのインストール
本体のインストール
# cd /etc/yum.repos.d
# wget http://www.mondorescue.org/ftp/centos/7/x86_64/mondorescue.repo
# yum install mondo
【中略】
========================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================================
インストール中:
mondo x86_64 3.2.2-1.centos7 mondorescue 902 k
依存性関連でのインストールをします:
afio x86_64 2.5-1.centos7 mondorescue 75 k
buffer x86_64 1.19-8.centos7 mondorescue 23 k
bzip2 x86_64 1.0.6-13.el7 base 52 k
dosfstools x86_64 3.0.20-9.el7 base 101 k
gdbm-devel x86_64 1.10-8.el7 base 47 k
genisoimage x86_64 1.1.11-23.el7 base 298 k
glibc-devel x86_64 2.17-106.el7_2.8 updates 1.0 M
glibc-headers x86_64 2.17-106.el7_2.8 updates 663 k
kernel-headers x86_64 3.10.0-327.28.2.el7 updates 3.2 M
libdb-devel x86_64 5.3.21-19.el7 base 38 k
libusal x86_64 1.1.11-23.el7 base 135 k
mindi x86_64 3.0.2-1.centos7 mondorescue 202 k
mindi-busybox x86_64 1.21.1-1.centos7 mondorescue 276 k
mtools x86_64 4.0.18-5.el7 base 203 k
net-tools x86_64 2.0-0.17.20131004git.el7 base 304 k
perl x86_64 4:5.16.3-286.el7 base 8.0 M
perl-CPAN-Meta noarch 2.120921-5.el7 base 113 k
perl-CPAN-Meta-Requirements noarch 2.122-7.el7 base 24 k
perl-CPAN-Meta-YAML noarch 0.008-14.el7 base 24 k
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
perl-Digest noarch 1.17-245.el7 base 23 k
perl-Digest-MD5 x86_64 2.52-3.el7 base 30 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-ExtUtils-CBuilder noarch 1:0.28.2.6-286.el7 base 67 k
perl-ExtUtils-Install noarch 1.58-286.el7 base 73 k
perl-ExtUtils-MakeMaker noarch 6.68-3.el7 base 275 k
perl-ExtUtils-Manifest noarch 1.61-244.el7 base 31 k
perl-ExtUtils-ParseXS noarch 1:3.18-2.el7 base 77 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-2.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-IO-Interface x86_64 1.05-2.el7 mondorescue 26 k
perl-IPC-Cmd noarch 1:0.80-4.el7 base 34 k
perl-JSON-PP noarch 2.27202-2.el7 base 55 k
perl-Locale-Maketext noarch 1.23-3.el7 base 93 k
perl-Locale-Maketext-Simple noarch 1:0.21-286.el7 base 49 k
perl-Module-Build noarch 2:0.40.05-2.el7 base 281 k
perl-Module-CoreList noarch 1:2.76.02-286.el7 base 84 k
perl-Module-Load noarch 1:0.24-3.el7 base 11 k
perl-Module-Load-Conditional noarch 0.54-3.el7 base 18 k
perl-Module-Metadata noarch 1.000018-2.el7 base 26 k
perl-Module-ScanDeps noarch 1.10-3.el7 base 45 k
perl-MondoRescue noarch 3.2.2-1.centos7 mondorescue 82 k
perl-Net-IPv4Addr noarch 0.10-6.el7 mondorescue 16 k
perl-Params-Check noarch 1:0.38-2.el7 base 18 k
perl-Parse-CPAN-Meta noarch 1:1.4404-5.el7 base 14 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Perl-OSType noarch 1.003-3.el7 base 20 k
perl-Pod-Escapes noarch 1:1.04-286.el7 base 50 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-ProjectBuilder noarch 0.14.1-1.centos7 mondorescue 133 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-3.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Test-Harness noarch 3.28-3.el7 base 302 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-devel x86_64 4:5.16.3-286.el7 base 452 k
perl-libs x86_64 4:5.16.3-286.el7 base 687 k
perl-macros x86_64 4:5.16.3-286.el7 base 43 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
perl-version x86_64 3:0.99.07-2.el7 base 84 k
pyparsing noarch 1.5.6-9.el7 base 94 k
syslinux x86_64 4.05-12.el7 base 990 k
systemtap-sdt-devel x86_64 2.8-10.el7 base 65 k
wodim x86_64 1.1.11-23.el7 base 320 k
依存性関連での更新をします:
glibc x86_64 2.17-106.el7_2.8 updates 3.6 M
glibc-common x86_64 2.17-106.el7_2.8 updates 11 M
トランザクションの要約
========================================================================================================================
インストール 1 パッケージ (+77 個の依存関係のパッケージ)
更新 ( 2 個の依存関係のパッケージ)
総ダウンロード容量: 38 M
【以下略】
関連パッケージのインストール
- lzo(高速圧縮ライブラリ)
- lzop(高速圧縮ユーティリティ)
以下の通りインストールする。
# yum install lzo lzop
【中略】
パッケージ lzo-2.06-8.el7.x86_64 はインストール済みか最新バージョンです
【中略】
========================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================================
インストール中:
lzop x86_64 1.03-10.el7 base 54 k
トランザクションの要約
========================================================================================================================
インストール 1 パッケージ
総ダウンロード容量: 54 k
インストール容量: 99 k
【以下略】
Oracle Database 12c を CentOS7にインストールしたときの備忘録
インストール手順は、以下のサイトを参考に行った。
CentOS 7 : Oracle Database 12c : インストール環境の設定 : Server World
その際のインストール時の備忘録として記載する。
インストールパッケージについて
インストール要件にkshがあるが、これに対応するパッケージはpdkshである。
これは実際には、mkshをインストールすることにより、pdkshがインストールされる。
# yum search pdksh
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
===================================================== 一致: pdksh ======================================================
mksh.x86_64 : MirBSD enhanced version of the Korn Shell
Oracle Database 12c インストール時の文字化け
Oracle Database 12c をインストールするとき、文字化けが発生し、日本語が「□□□」になった。
対応方法は、
JREは /usr/lib配下にあるので、以下のように検索を行う。
$ find /usr/lib -name jre
そこで出てきたPATHを指定してrunInstallerを起動する。
$ ./runInstaller -jreLoc /usr/lib/jvm/java-1.8.0.71-.b15.el7_2.x86_64/jre
これで日本語でインストーラが起動する。
「PRVF-0002:ローカル・ノード名を取得できませんでした」のエラー
/etc/hostsファイルに、自ホスト名を追記すればOK。
自ホスト名が「ora12c」とする場合は、以下のようになる。
127.0.0.1 ora12c localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 ora12c localhost localhost.localdomain localhost6 localhost6.localdomain6
DBCAでも文字化けが発生
DBCAでも、文字化けが発生し、日本語が「□□□」になった。
対応方法は、
- 端末から「export LANG=C」と入力して、英語でDBCAを起動する。
- ${ORACLE_HOME}/bin/dbcaのJRE_DIRをOS標準の日本語フォントに対応したjreに書き換えてDBCAを起動する。
JREは /usr/lib配下にあるので、以下のように検索を行う。
$ find /usr/lib -name jre
そこで出てきたPATHを指定に書き換える。
(71行目)
# JRE_DIR=/u01/app/oracle/product/12.1.0/dbhome_1/jdk/jre
JRE_DIR=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre
そして、DBCAを起動する。
$ dbca
これで日本語でインストーラが起動する。
おまけ
Oracleが公表してるガイドは以下のものがある。
CentOS7にGuest Additionsのインストール
GUEST ADDITIONS
Guest Additionsのなかでも特に以下の機能を使用したい。
GUEST ADDITIONSをインストール
必要なパッケージとそのパッケージのインストール
必要なパッケージは以下の通り。
- Development Tools (開発ツール)
- kernel-devel
- kernel-headers
以下の様にパッケージをインストールする。
# yum groupinstall "Development Tools"
# yum install kernel-devel kernel-headers
ゲストマシン上のメニュー「デバイス」→「Guest AdditionsのCDイメージを挿入」をクリックする。
次にゲストマシン上のターミナルを開いて、作業ディレクトリを作成して、GuestAdditionsのマウント先に移動する。
# mkdir /mnt/cdrom
# mount -r /dev/cdrom /mnt/cdrom/
# cd /mnt/cdrom
CentOSなので、対応するインストールスクリプトを実行する。
# ./VBoxLinuxAdditions.run
すると、こんなエラーメッセージを吐き出した。
The missing package can be probably installed with
yum install kernel-devel-3.10.0-327.el7.x86_64
なので、
# yum install kernel-devel-3.10.0-327.el7.x86_64
を実行した。
その後再度以下を実行。
# ./VBoxLinuxAdditions.run
インストールスクリプトが終了し、プロンプトが戻ってきたらOSを一度リブートする。 以上でGuest Additionsのインストールは終了。
スライスと逆順が同時に使うとき気をつけないといけない件
Python3の話。
文字列sの3文字目から5文字目までの部分文字列は、スライスを用いてs[2:5]
で取得が可能。
文字列sの逆の文字列は、s[::-1]
で取得が可能。
文字列sの2文字目から4文字目までの部分文字列を取得し、その取得した部分文字列の逆の文字列は、スライスを用いてs[2:5:-1]
で取得ができそうだが、結果は''
となってしまい、うまくいかない。
実際はs[2:5][::-1]
やs[4:1:-1]
で取得することが可能。
以下のサンプルを見れば、なんとなく理解できるかと思われる。
>>> s = "abcdefg"
>>> s[2:5]
'cde'
>>> s[2:5:-1]
''
>>> s[2:5][::-1]
'edc'
>>> s[4:1:-1]
'edc'
Python3におけるformat形式を自分のためにまとめてみた件
主なネタはココにある通り。
http://docs.python.jp/3.5/library/string.html#formatspec
自分がよく使うパターンに絞ってメモしてみる。
>>> printf("hoge")
hoge(改行あり)
>>> print("hoge", end="")
hoge(改行なし)
ポジション引数を使ったアクセス:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{0} {1} {0}'.format('abra', 'cad') # 引数のインデクスは繰り返すことができます
'abra cad abra'
引数の要素へのアクセス:
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
テキストの幅を指定した整列:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # 詰め文字に '*' を使う
'***********centered***********'
%+f と %-f, % f の置換、そして符号の指定:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # 常に表示する
'+3.140000; -3.140000'
>>> '{:f}; {:f}'.format(3.14, -3.14) # 正の数にはスペースを表示
'3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # マイナスだけを表示 -- '{:f}; {:f}' と同じ
'3.140000; -3.140000'
dによる指定:
>>> print("{0:d}".format(123))
123
>>> print("{0:+d}".format(123))
+123
>>> print("{0:04d}".format(123))
0123
>>> print("{0:+04d}".format(123))
+123
>>> print("{0:06d}".format(123))
000123
>>> print("{0:+06d}".format(123))
+00123
固定小数点の出力に関する指定:
標準では以下の通り。
>>> print("{0:f}".format(12.3456))
12.345600
小数点の位置に注目。
>>> print("{0:.1f}".format(12.3456))
12.3
>>> print("{0:.2f}".format(12.3456))
12.35
>>> print("{0:.3f}".format(12.3456))
12.346
>>> print("{0:.4f}".format(12.3456))
12.3456
>>> print("{0:.5f}".format(12.3456))
12.34560
小数点と表示させる桁数の比較。
x.yf
は、小数点y桁だけ必ず表示しつつ、x文字分の表示領域に収めるように出力される。
(小数点も1文字としてカウントする)
ただし、出力対象がx文字分の表示領域に収まらない場合は、その分はオーバーして出力される。
>>> print("{0:3.1f}".format(12.3456)) # 小数点1桁必ず表示しつつ、3文字分の表示領域に収めるように出力されるが、表示領域に収まらないため、その分はオーバーして出力される。
12.3
>>> print("{0:4.1f}".format(12.3456)) # 小数点1桁必ず表示しつつ、4文字分の表示領域に収めるように出力される。
12.3
>>> print("{0:5.1f}".format(12.3456)) # 小数点1桁必ず表示しつつ、5文字分の表示領域に収めるように出力される。
12.3
>>> print("{0:6.1f}".format(12.3456)) # 小数点1桁必ず表示しつつ、6文字分の表示領域に収めるように出力される。
12.3
>>> print("{0:4.2f}".format(12.3456)) # 小数点2桁必ず表示しつつ、4文字分の表示領域に収めるように出力されるが、表示領域に収まらないため、その分はオーバーして出力される。
12.35
>>> print("{0:5.2f}".format(12.3456)) # 小数点2桁必ず表示しつつ、5文字分の表示領域に収めるように出力される。
12.35
>>> print("{0:6.2f}".format(12.3456)) # 小数点2桁必ず表示しつつ、6文字分の表示領域に収めるように出力される。
12.35
>>> print("{0:7.2f}".format(12345.6789)) # 小数点2桁必ず表示しつつ、7文字分の表示領域に収めるように出力されるが、表示領域に収まらないため、その分はオーバーして出力される。
12345.68
>>> print("{0:8.2f}".format(12345.6789)) # 小数点2桁必ず表示しつつ、8文字分の表示領域に収めるように出力される。
12345.68
>>> print("{0:9.2f}".format(12345.6789)) # 小数点2桁必ず表示しつつ、9文字分の表示領域に収めるように出力される。
12345.68
split()とsplit(" ")で出力が異なる件について
掲題の通り。
split()
とsplit(" ")
では、微妙に出力結果が違うことに注意。
>>> space1 = "a b"
>>> space2 = "a b"
>>> space3 = "a b"
>>> [i for i in space1.split()]
['a', 'b']
>>> [i for i in space1.split(" ")]
['a', 'b']
>>> [i for i in space2.split()]
['a', 'b']
>>> [i for i in space2.split(" ")]
['a', '', 'b']
>>> [i for i in space3.split()]
['a', 'b']
>>> [i for i in space3.split(" ")]
['a', '', '', 'b']