ScalewayのSecurity groupに期待しすぎるのをやめる

muraveです。

自分の前の記事『Vagrant+AnsibleでCentOS7のセキュリティアップデートまで』の余談で「ScalewayのSecurity groupについて事前に調整しとくと良いよ」みたいなことを書きましたが、

「Scalewayさんのスパムメール送信対策なんやな〜」

ぐらいの気持ちで接してSecurity groupはなるべく素通しで他の手段で対策したほほうが良さそう、という話。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

funcphoneの転送費用についてドドン!とまたまた全て内訳を公開します!!

弊社が提供しているクラウドサービス「funcphone(ファンクフォン)」では、通話転送留守録グループ着信内線電話音声自動応答機能(IVR)などの機能を、自由に設定しお使いいただけるサービスなのですが、初期費用 無料!ライトプランですと月額費用 2,000円(税込) でスタートできます!

今回は 思い切って自社運用しているfuncphoneの費用の内訳を公開します! の続編として、以前より何度かお客様からもお問い合わせがあったfuncphoneの転送費用についてお話します。

現在弊社では、funcphoneと並行して別途通信事業者の転送サービスを使い、既存の電話番号「095-840-0021」からfuncphoneの050番号への転送も行なっています。

実際に転送サービスの費用を比較すると…


通信事業者 A社の場合 内訳

[2017年 7月 ]
回線使用料(基本料) 3,030 円
転送サービス月額 650 円
IP電話への転送料金 3,704 円
定額料、ユニバーサル料金など 271 円

合計 7,655 円

[2017年  8月 ]
回線使用料(基本料) 3,030 円
転送サービス月額 650 円
IP電話への転送料金 2,300 円
定額料、ユニバーサル料金など 272 円

合計 6,252 円


funcphoneの場合 内訳

[ 2017年 7月 ]
電話番号 約 109円/番号1個
月額 2,000円
発着信料金 約 3,483円(転送以外の通常の発着信通話料や開発用のテスト発着信料も含んでいます)

合計 約 5,592 円

[ 2017年 8月 ]
電話番号 約 109円/番号1個
月額 2,000円
発着信料金 約 4,031円(転送以外の通常の発着信通話料や開発用のテスト発着信料も含んでいます)

合計 約 6,140 円


一見さほど変わらないようにも見えますが、funcphoneの発着信料金は転送以外の通常の通話料も含まれている為、そちらも差し引くとかなりお安くなります。(残念ながら転送料金は発着信料金と合算扱いになり転送のみの正確な料金は確認できません;)

しかも、funcphoneでは転送のみではなく、インターネットに接続できる環境さえあれば、いつでも!好きな時に!!好きなだけ!!!転送先電話番号を変更することができます。

更に…

  • 時間や曜日を指定して自動応答/転送など自動で切り替え
  • 着信元の番号によって自動応答/転送など自動で切り替え
  • 番号1を押すと「Aへ転送」2を押すと「営業時間を読み上げ」などの分岐登録
  • 読み上げて欲しいテキストを登録し自動音声で読み上げ

など、他にも様々な機能を組み合わせてお使いいただけますので、用途によって独自の設定が可能です

7日間無料トライアルでお試しいただけますので、ご興味のある方はぜひ!この機会にご検討ください!!
funcohoneの紹介ページはこちら

Facebooktwitterlinkedintumblrmail

Vagrant+AnsibleでCentOS7のセキュリティアップデートまで

muraveです。ここ最近の記事、

についてスクリプト化してGitHubで公開しました

jmurabe/scaleway-centos7base

クラウド(Scaleway)上で動かすのでセキュリティ確保のために yum update するべき。しかし全部アップデートすると時間がかかりすぎる。そこでセキュリティアップデート出来るようにセットアップして実行するところまで自動で、という内容です。

冪等性が確保できているとは言い難い所はありますが(/securityが存在するか?だけでsecurityリポジトリが作成されているか判断している等)、ベースとしては使えるとおもいます。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

思い切って自社運用しているfuncphoneの費用の内訳を公開します!

弊社が提供しているクラウドサービス「funcphone(ファンクフォン)」では、通話転送留守録グループ着信内線電話音声自動応答機能(IVR)などの機能を、自由に設定しお使いいただけるサービスなのですが、初期費用 無料!ライトプランですと月額費用 2,000円(税込) でスタートできます!

中でも一般的に高額で提供されている、音声自動応答機能がこの料金でお使いいただけるのが、最大の魅力だと思っています(^v^)

さて、いよいよ本題ですが、やはり有料サービスを検討するにあたり、一番気になるところは費用の問題です。
月額は圧倒的に低価格なのですが、電話を使ったサービスということで月額費用とは別に使用した分の発着信料金が発生します。

funcphoneの紹介サイトでもリンクを載せていますが、料金の仕組みがなかなか複雑です(^_^;)
https://twilio.kddi-web.com/price/

そこで…
月トータルでどのくらいの金額になるのか、もう思い切って自社運用分の費用の内訳を公開してしまうことにしました!
ぜひぜひ参考にしていただければと思います。

以下、弊社で運用している分のTwilioの2017年8月の料金明細です。
端数が出て分かり辛いため小数点以下四捨五入しています。


内訳

[電話番号維持数]
37個 ¥4,038

[SIP通話]
インバウンド(着信) 446分 約 223円
アウトバウンド(発信) 799分 約 340円

[音声通話]
インバウンド(着信) 785分 約 785円
アウトバウンド(発信) 488分 約 2,591円

[クライアント通話(スマホアプリ)]
125分 約 31円

合計 約 8,070円


テストの際に使用する番号も含まれているため電話番号維持数が37個と多いですが、実際は本社社員16名分+部署別番号として別途3個、計18個使用しています。

7日間無料トライアルでお試しいただけますので、ご興味のある方はぜひ!この機会にご検討ください!!
funcohoneの紹介ページはこちら

Facebooktwitterlinkedintumblrmail

CentOS7 での yum –security update 事情

夏風邪で減った体重がすっかりもどってしまいました。muraveです。
自身への細菌の侵入は許しましたが、サーバーへの侵入は防がねばなりません(自然な導入)

そんなわけで Ansible では yum update 相当の

yum: name=* state=latest

を毎回やっていたのですが、時間がかかりすぎて辛くなってきました。そんなわけでセキュリティアップデートだけするのがいいかな、と調べ始めました。

yum-plugin-securityというパッケージを利用して

$ yum --security update

が出来ることを知りました(そもそもCentOS7ではyum-plugin-securityがyumに統合されている模様)。 やったぜ!

CentOSのリポジトリではセキュリティアップデート情報が提供されていなくて正常動作しないらしいことも知りました。 やってなかったぜ!

先人の知恵と努力を頼りましょう。

ということでまとめますと、securiy用のローカルリポジトリを作り、CEFSが提供しているSpacewalk用のエラッタからupdateinfo.xmlを作って設置、yum –security update します。
この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

DRBD9のclient機能を試す

DRBD9の新機能 client機能を試してみました。
client機能は、DRBDストレージを持たないノードに、DRBDリソースをマウントできる機能の様です。

前提

  • クライアントノード用にホストmysql01、mysql02を用意する。<\li>
  • ホストdrbd01~03が持つdrbd領域用のHDDは搭載しない
  • OS等の構成はホストdrbd01~03と同じ。
  • DRBDカーネルモジュール、drbd-util、drbdmanageをインストールしてある状態です。
  • 前述の方法にてDRBDリソースmysql-slv(容量10GB)を作成してある。
  • mysql01、02にはMariaDBをインストールしてあります。
  • mysql01のIPアドレス: 192.168.24.226
  • mysql02のIPアドレス: 192.168.24.227

クライアントモードでノードを追加する。

drbd01にて

[root@drbd01 ~]# drbdmanage n
+----------------------------------------------------------------------------------------+
| Name   | Pool Size | Pool Free |                                               | State |
|----------------------------------------------------------------------------------------|
| drbd01 |     51196 |     32092 |                                               |    ok |
| drbd02 |     51196 |     32092 |                                               |    ok |
| drbd03 |     51196 |     32092 |                                               |    ok |
+----------------------------------------------------------------------------------------+
[root@drbd01 ~]# drbdmanage add-node --satellite --no-storage mysql01 192.168.24.226
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node mysql01:
drbdmanage restart

mysql01でdrbdmanage で再起動コマンドを実行します。

[root@mysql01 ~]# drbdmanage restart
You are going to shut down the drbdmanaged server process on this node.
Please confirm:
  yes/no: yes
Attempting to startup the server through D-Bus activation...
D-Bus connection successful, server is running and reachable

drbd01にて、確認してみると、mysql01がclientとして追加されていることがわかります。サテライトノードとは、DRBDのコントロール用のリソース.drbdctrlを持たないノードの事です。

以前のリリースでは、add-nodeサブコマンド実施時に–contorole-nodeオプションにて属するコントロールノードを指定する必要があったようですが、今のリリースでは–contorole-nodeオプションは無くなり、指定する必要がなくなったようです。

ちなみに、–satelliteオプションを利用せずにクライアントノードを追加しようとすると、各ノードでの追加用コマンドを実施した際、.drbdctrlリソース用の領域を作成しようとするので、今回のようにDRBD用の領域を持たないクライアントでは、追加に失敗します。

[root@drbd01 ~]# drbdmanage n
+----------------------------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                         |                      State |
|----------------------------------------------------------------------------------------|
| drbd01  |     51196 |     32092 |                         |                         ok |
| drbd02  |     51196 |     32092 |                         |                         ok |
| drbd03  |     51196 |     32092 |                         |                         ok |
| mysql01 |         0 |         0 |                         | satellite node, no storage |
+----------------------------------------------------------------------------------------+

クライアントノードへリソースを割り当てる

mysql01へDRBDリソースmysql-priを割当ます。
assignサブコマンドに–clientオプションを付けて実行します。

[root@drbd01 ~]# drbdmanage assign mysql-pri mysql01 --client
Operation completed successfully
[root@drbd01 ~]# drbdmanage list-assignments
+----------------------------------------------------------------------------------------+
| Node    | Resource  | Vol ID |                                                |  State |
|----------------------------------------------------------------------------------------|
| drbd01  | mysql-pri |      * |                                                |     ok |
| drbd01  | mysql-slv |      * |                                                |     ok |
| drbd02  | mysql-pri |      * |                                                |     ok |
| drbd02  | mysql-slv |      * |                                                |     ok |
| drbd03  | mysql-pri |      * |                                                |     ok |
| drbd03  | mysql-slv |      * |                                                |     ok |
| mysql01 | mysql-pri |      * |                                                | client |
+----------------------------------------------------------------------------------------+

クライアントノードでリソースへファイルシステムを作成する

mysql01上で、リソースmysql-priにファイルシステムを作成します。
リソースの割当まで行うと、mysql01上から、mysql-priのブロックデバイスが参照できます。
list-volumesサブコマンドでブロックデバイスのマイナー番号を確認し、ファイルシステムを作成します。

[root@mysql01 ~]# drbdmanage list-volumes
+----------------------------------------------------------------------------------------+
| Name      | Vol ID |     Size | Minor |                                        | State |
|----------------------------------------------------------------------------------------|
| mysql-pri |      0 | 9.31 GiB |   100 |                                        |    ok |
| mysql-slv |      0 | 9.31 GiB |   101 |                                        |    ok |
+----------------------------------------------------------------------------------------+
[root@mysql01 ~]# mkfs.xfs /dev/drbd100
meta-data=/dev/drbd100           isize=512    agcount=4, agsize=610352 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2441406, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウントしてMariaDBを起動する。

後は、マウントしMariaDBを起動します。
が、/var/lib/mysqlにマウントした場合、ディレクトリのオーナーがmysqlからrootに変わってしまうので、注意してください。

[root@mysql01 ~]# ls -al /var/lib|grep mysql
drwxr-xr-x.  2 mysql   mysql      6  9月  5 15:55 mysql
[root@mysql01 ~]# mount /dev/drbd100 /var/lib/mysql
[root@mysql01 ~]# ls -al /var/lib|grep mysql
drwxr-xr-x.  2 root    root       6  9月 11 09:57 mysql
[root@mysql01 ~]# chown mysql:mysql /var/lib/mysql
[root@mysql01 ~]# systemctl start mariadb
[root@mysql01 ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-09-11 10:06:19 JST; 2min 56s ago
  Process: 28092 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
  Process: 28013 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
 Main PID: 28091 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           tq28091 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           mq28249 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin...

 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: The latest information about ....
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: You can find additional infor...:
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: http://dev.mysql.com
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Support MariaDB development b...B
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Corporation Ab. You can conta....
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: Alternatively consider joinin...:
 9月 11 10:06:13 mysql01 mariadb-prepare-db-dir[28013]: http://mariadb.com/kb/en/cont.../
 9月 11 10:06:13 mysql01 mysqld_safe[28091]: 170911 10:06:13 mysqld_safe Logging to ...'.
 9月 11 10:06:13 mysql01 mysqld_safe[28091]: 170911 10:06:13 mysqld_safe Starting my...ql
 9月 11 10:06:19 mysql01 systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@mysql01 ~]# mysql_secure_installation

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] Y
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] Y
 ... 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] Y
 ... 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] Y
 - 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] Y
 ... 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!

MariaDBの起動ができました。これでクライアントノードの追加は以上です。
後は、同様にmysql02のノード追加、mysql-slvのリソース追加を行います。

以上

Facebooktwitterlinkedintumblrmail

VagrantでScaleway使うと開発に便利なのでは?という話

Dockerに傾倒していたので久しぶりにVagrantさわりました。muraveです。

少し前に弊社代表から「ScalewayってクラウドARM使えるし安いし、いいよ!(ネットワーク的に遠くてもいい場合には)」という情報が社内Slackに投げ込まれて気になっておりました。

Scaleaway (https://www.scaleway.com/)

私としてはX86系最安価でも 2Core + 2GB Memory + 50GB SSD + 1public IPv4 という構成で €2.99/month (€1=¥130として¥388.7) の価格性能比に魅力を感じます。

更に調べると詳細には

  • VC1Sサーバー(2Cores 2GB Memory): €1/month (€0.002/hour)
  • 50GB SSD Volume: €1/month (€0.002/hour)
  • 1 public IPv4: €0.99/month (€0.002/hour)

合計 €2.99/month (€0.006/hour)

という価格内訳で(https://www.scaleway.com/faq/billing/)、パッケージ単位での上限が€2.99/monthとのこと。

上限が無くても時間単位で31日間フル稼働で€4.464(¥580.32)ですので、開発でインスタンスの使い捨てを繰り返して上限が無効な場合でもとんでもないことにはならないと思われます。

課金についてあまり気にしなくてもいいというのは精神的に良いです。

そんなわけでVagrantでScalewayをお気軽に使いたいと思います。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

【DRBD9】rpmパッケージをビルドしてインストールする

今更ながらですが、DRBD9をインストールしてみました。他のサイトを参考にしていると、ソースからのmake、make installでしかインストールしていなかったので、rpmパッケージをビルドしてからインストールする方法を試してみました。

環境

  • OS: CentOS 7(パッケージグループ Base、Development Tools をインストール)
  • KVM上の仮想マシン(HDDは8GBと50GBの2台を搭載した状態)
  • drbd01~drbd03の3台でクラスタを構成
  • drbd01のIPアドレス: 192.168.24.223
  • drbd02のIPアドレス: 192.168.24.224
  • drbd03のIPアドレス: 192.168.24.225

rpmパッケージの作成

準備:rpmbuild環境構築

rpmbuildの環境を構築するツールがあるので、コマンド一つでrpmbuild環境が構築できます。

[root@drbd01 ~]# yum install -y rpmdevtools

ユーザに戻り、rpmdev-setuptreeコマンドを叩きます。

rpmbuildディレクトリから.rpmmacrosまで作成してくれます。

[fumikura@drbd01 ~]$ rpmdev-setuptree
[fumikura@drbd01 ~]$ tree -a
~~~
.
|-- .rpmmacros
`-- rpmbuild
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
~~~
7 directories, 7 files

必要パッケージのインストール

DRBD9のインストールに必要なパッケージをインストールします。

[fumikura@drbd01 ~]$ sudo yum install -y libxslt libxslt-devel pygobject2 help2man kernel-abi-whitelists

ソースのダウンロード

今回は、gitリポジトリがあるものはgitから入手しました。

ソース置場用のディレクトリを作って移動します。

[fumikura@drbd01 ~]$ mkdir Archives
[fumikura@drbd01 ~]$ cd Archives

– drbd kernel module

[fumikura@drbd01 Archive]$ git clone --recursive git://git.drbd.org/drbd-9.0.git

– drbd-utils

[fumikura@drbd01 Archives]$ git clone --recursive git://git.linbit.com/drbd-utils.git

– drbdmanage

[fumikura@drbd01 Archive]$ git clone --recursive git://git.drbd.org/drbdmanage.git

drbd kernel moduleのrpmパッケージ作成

今回は、公式サイトにてリリースされている最新リリースのdrbd-9.0.8に合わせてビルドしようと思います。

[fumikura@drbd01 Archive]$ cd drbd-9.0
[fumikura@drbd01 drbd-9.0]$ git checkout drbd-9.0.8
[fumikura@drbd01 drbd-9.0]$ make .filelist
[fumikura@drbd01 drbd-9.0]$ make kmp-rpm

drbd-utilsのrpmパッケージ作成

(2017.09.04,Mon 追記)
下記のまま、rpm作成を行うと、rpmのインストール時に競合が起こります。drbd.spec.inを以下のように修正してから実施してください。

--- ../drbd-utils.orig/drbd.spec.in     2017-09-01 15:01:35.721074085 +0900
+++ ./drbd.spec.in      2017-09-04 10:48:54.719119053 +0900
@@ -31,6 +31,7 @@
 # conditionals may not contain "-" nor "_", hence "bashcompletion"
 %bcond_without bashcompletion
 %bcond_without sbinsymlinks
+%undefine with_sbinsymlinks
 # --with xen is ignored on any non-x86 architecture
 %bcond_without xen
 %bcond_without 83support
[fumikura@drbd01 Archives]$ cd drbd-utils
[fumikura@drbd01 drbd-utils]$ git checkout v9.0.0
[fumikura@drbd01 drbd-utils]$ ./autogen.sh
[fumikura@drbd01 drbd-utils]$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
[fumikura@drbd01 drbd-utils]$ make .filelist
[fumikura@drbd01 drbd-utils]$ make rpm

drbdmanageのrpmパッケージ作成

drbdmanageはソース直下のディレクトリ、distの中にrpmパッケージが生成されます。

[fumikura@drbd01 Archive]$ cd drbdmanage/
[fumikura@drbd01 drbdmanage]$ make rpm
[fumikura@drbd01 drbdmanage]$ cd dist/
[fumikura@drbd01 dist]$ ls -al
合計 1080
drwxrwxr-x.  2 fumikura fumikura    111  8月  8 17:08 .
drwxrwxr-x. 11 fumikura fumikura   4096  8月  8 17:08 ..
-rw-rw-r--.  1 fumikura fumikura 507844  8月  8 17:08 drbdmanage-0.99.5-1.noarch.rpm
-rw-rw-r--.  1 fumikura fumikura 298012  8月  8 17:08 drbdmanage-0.99.5-1.src.rpm
-rw-rw-r--.  1 fumikura fumikura 294884  8月  8 17:08 drbdmanage-0.99.5.tar.gz

rpmパッケージのインストール

先程作成されたパッケージは、~/rpmbuild/RPMS/x86_64の中に10個、~/hoge/drbdmanage/distの中に1個の計11個のrpmパッケージが生成されています。
このうち、debuginfoとついているパッケージはインストールしなくても大丈夫です。

/home/fumikura/rpmbuild/RPMS/x86_64/kmod-drbd-9.0.8_3.10.0_514.26.2-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-kernel-debuginfo-9.0.8-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-utils-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-xen-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-udev-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-pacemaker-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-heartbeat-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-bash-completion-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/rpmbuild/RPMS/x86_64/drbd-debuginfo-9.0.0-1.el7.centos.x86_64.rpm
/home/fumikura/Archive/drbdmanage/dist/drbdmanage-0.99.5-1.noarch.rpm

drbd kernel moduleのインストール

[fumikura@drbd01 x86_64]$ sudo rpm -ivh kmod-drbd-9.0.8_3.10.0_514.26.2-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:kmod-drbd-9.0.8_3.10.0_514.26.2-1################################# [100%]

drbd-utilsのインストール

drbd-utils-9.0.0-1.el7.centos.x86_64.rpmはパッケージ自身と競合をおこして普通にインストールはできない為、–forceオプションでインストールします。(2017.09.04,Mon 修正)

[fumikura@drbd03 x86_64]$ sudo rpm -ivh drbd-utils-9.0.0-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbd-utils-9.0.0-1.el7.centos    ################################# [100%]

その他のパッケージについては、drbd-9.0.0-1.el7.centos.x86_64.rpm が他のパッケージに依存しているので、先に、xen、udev、pacemaker、heartbeat、bash-completionをインストール後にインストールしてください。

[fumikura@drbd01 x86_64]$ sudo rpm -ivh drbd-xen-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-udev-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-pacemaker-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-heartbeat-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-bash-completion-9.0.0-1.el7.centos.x86_64.rpm \
> drbd-9.0.0-1.el7.centos.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbd-bash-completion-9.0.0-1.el7.################################# [ 17%]
   2:drbd-pacemaker-9.0.0-1.el7.centos################################# [ 33%]
   3:drbd-udev-9.0.0-1.el7.centos     ################################# [ 50%]
   4:drbd-xen-9.0.0-1.el7.centos      ################################# [ 67%]
   5:drbd-9.0.0-1.el7.centos          ################################# [ 83%]
   6:drbd-heartbeat-9.0.0-1.el7.centos################################# [100%]

drbdmanageのインストール

[fumikura@drbd01 dist]$ sudo rpm -ivh drbdmanage-0.99.9-1.noarch.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:drbdmanage-0.99.9-1              ################################# [100%]

インストールは以上です。drbd01~drbd03すべてのノードでインストール作業を実施します。
次に、簡単にDRBDクラスタの構成を行ってみます。

DRBDクラスタの構成

DRBD用領域の作成

drbd01~drbd03のすべてのノードで実施します。

パーティションの作成

[root@drbd01 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-104857599, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-104857599, 初期値 104857599):
初期値 104857599 を使います
Partition 1 of type Linux and of size 50 GiB is set

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

物理ボリューム(PV)の作成

[root@drbd01 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

ボリュームグループ(VG)の作成

[root@drbd01 ~]# vgcreate drbdpool /dev/sdb1
  Volume group "drbdpool" successfully created

ここで指定する”drbdpool”はdrbdmanageで使用されるデフォルト名ですので、変更せずに作成します。

drbdmanageでのノードの追加

準備: firewalldの設定

drbdmanageがノード間の通信に利用するポートを開けます。ノード間の制御には6996、6999を利用しています。
リソースの同期には、7000~7800を利用しています。まとめて、6996~7800を開けています。

[root@drbd01 ~]# firewall-cmd --add-port=6996-7800/tcp --zone=public --permanent
success
[root@drbd01 ~]# firewall-cmd --reload
success
[root@drbd01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 6996-7800/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

クラスタの初期化

drbd01のみで実行します。

[root@drbd01 ~]# drbdmanage init 192.168.24.223

You are going to initialize a new drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Empty drbdmanage control volume initialized on '/dev/drbd0'.
Empty drbdmanage control volume initialized on '/dev/drbd1'.
Waiting for server: .
Operation completed successfully

ノードの追加

drbd02を追加する
※まずdrbd01でコマンドを実行。各ノードで実行するコマンドを発行します。

[root@drbd01 ~]# drbdmanage add-node drbd02 192.168.24.224
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node drbd02:
drbdmanage join -p 6999 192.168.24.224 1 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx

上記の”drbdmanage join …..”をdrbd02で実行します。

[root@drbd02 ~]# drbdmanage join -p 6999 192.168.24.224 1 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully

drbd03についても同様に実施します。
・drbd01側

[root@drbd01 ~]# drbdmanage add-node drbd03 192.168.24.225
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node drbd03:
drbdmanage join -p 6999 192.168.24.225 2 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx

・drbd03側

[root@drbd03 ~]# drbdmanage join -p 6999 192.168.24.225 2 drbd01 192.168.24.223 0 xxxxSecretKeyxxxx
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully

クラスタの状態確認

[root@drbd01 ~]# drbdmanage list-nodes
+----------------------------------------------------------------------------------------+
| Name   | Pool Size | Pool Free |                                               | State |
|----------------------------------------------------------------------------------------|
| drbd01 |     51196 |     51188 |                                               |    ok |
| drbd02 |     51196 |     51188 |                                               |    ok |
| drbd03 |     51196 |     51188 |                                               |    ok |
+----------------------------------------------------------------------------------------+
[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

※”drbdmanage list-nodes”は”drbdmanage n”と省略できます。

リソースの追加

リソースを作成する

[root@drbd01 ~]# drbdmanage add-resource mysql-pri

リソース名を”mysql-pri”としたのは、後でMySQLのクラスタに利用するつもりです…

リソースのボリュームを設定する

[root@drbd01 ~]# drbdmanage add-volume mysql-pri 10GB
Operation completed successfully

リソースをデプロイするクラスタ数を設定する

[root@drbd01 ~]# drbdmanage deploy-resource mysql-pri 3
Operation completed successfully

※リソースの割り当てを個別にノードへデプロイするには、”drbdmanage assign-resource”コマンドを使用します。

[root@drbd01 ~]# drbdmanage assign-resource mysql-pri drbd03
Operation completed successfully

リソース追加直後の状態

[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

mysql-pri role:Secondary
  disk:UpToDate
  drbd02 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:57.30
  drbd03 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:50.46

“Inconsistent”は不整合の状態です。”done”の後の数字は同期状態の進行具合を表示してます。

同期が終わると、このような表示になります。

[root@drbd01 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  drbd02 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  drbd03 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

mysql-pri role:Secondary
  disk:UpToDate
  drbd02 role:Secondary
    peer-disk:UpToDate
  drbd03 role:Secondary
    peer-disk:UpToDate

リソース”mysql-pri”のroleがどのノードでも”Secondary”になっているのは、DRBD9からは、リソースをマウントしたノードが自動的にPrimaryとなる仕様となっているからだとか。
今回は、ここまで。次回はDRBDの新機能、クライアント機能を利用して、MySQLサーバからリソースmysql-priをマウントしてみようと思います。
以上

Facebooktwitterlinkedintumblrmail

Mac からのリモートデスクトップ接続で日本語キーボード使う

muraveです。仕事では日本語キーボードな Mac を使ってます。

Windows Server でがんばる系のお仕事がきそうなのでクラウド上に実験環境を作ろうと思いました。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

dockerからAmazon EC2への奮闘記

今までdockerを使ったことがなかった私、勉強がてらLaradockを使ってLaravelで開発を行っていました
そこからAmazon EC2へ移行するまでの過程で色々行き詰まり、
なんとかLaradockからEC2へ環境移行することができましたので、
今後のメモのためにログを残しておこうと思います

今回書く内容はLaradockの環境設定〜Amazon EC2へ設置するまでの簡単な流れで行き詰ったものを晒すだけのほぼ日記の様なものです(笑)

Docker for Mac 〜 Laradockを導入するまで

$ git clone --depth=1 -b v5.5.1 https://github.com/LaraDock/laradock.git
$ cd laradock
$ cp env-example .env
$ vi .env

…とこのようにまずはドキュメントに従って導入を行っていました
しかし

問題1:Laradockを導入したが起動しない

$ docker-compose up -d nginx mysql
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
$ docker-machine start default
Host does not exist: "default"

defaultを設定しないといけない?

$ docker-machine create --driver virtualbox default

をすればよい、とのことだったので実行してみたけれどエラー発生
そもそもDocker for Macはvirtualbox使わなくても良くなった、との記述を見かけた気が…

解決:boot2dockerとDocker for macが混在していた

Laradockの問題ではなく、dockerの問題でした
どうやらDocker for Macを入れる前にboot2dockerをhomebrewで入れていたようで、
PC内にdockerが2つある状態でした
ということでboot2dokerを削除

brew uninstall docker boot2docker docker-compose docker-machine

念のためDocker for Macもアンインストールして入れ直し、もう一度動かしてみた所無事にLaradockを動かすことができました!
まぁこんなことしでかすなんて自分くらいしかいないと思うので参考にはならないかもしれませんが、思い出の一つとして…

問題2:MySQLが動かない

次のようなエラーが発生してMySQLが起動しない
docker-compose psを実行してみた所、laradock_mysql_1のstateはExitでした

$ docker-compose up --build -d nginx mysql
$ docker-compose exec mysql bash
ERROR: No container found for mysql_1

ログを確認

$ docker logs laradock_mysql_1
2017-08-01T08:01:50.339823Z 0 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!

解決:MySQLのデータファイルを削除

このエラーに関しては.envファイルを確認し、MySQLのデータファイルを削除した所、起動に成功しました

$ vi .env   ⇐ laradock/.envを確認
 10 ### Data Path:
 11 # For all storage systems.
 12
 13 DATA_SAVE_PATH=~/.laradock/data
$ cd ~/.laradock/data
$ mv data data.old

Laradockが動かない…動かない…と入れ直しを繰り返した時にゴミファイルとして残ってしまっていた模様

ローカルからAmazon EC2へ

システムが出来上がり、次はシステムをローカルからEC2へ移行作業へ…
まずLaradock環境内のバージョンを確認
EC2側にもPHP7.1、MySQL5.7、nginxをインストール

$ docker-compose exec workspace bash
# php -v
PHP 7.1.4-1+deb.sury.org~xenial+1 (cli) (built: Apr 11 2017 22:12:32) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.4-1+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies
# php artisan --version
Laravel Framework 5.4.30
# exit
exit

$ docker-compose exec mysql bash
# mysql --version
mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  EditLine wrapper
# exit
exit

EC2側環境作成

PHP、MySQL、nginxインストール後…
以下のファイルを編集

$ vi /etc/php-fpm.d/www.conf
 24 user = nginx
 25 ; RPM: Keep a group allowed to write in log dir.
 26 group = nginx

 48 listen.owner = nginx
 49 listen.group = nginx
 50 listen.mode = 0660
$ vi /etc/nginx/nginx.conf
 40     server {

 44         root         /var/www/html/public;

 73         location ~ \.php$ {
 74             root           /var/www/html/public;
 75             fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 76             fastcgi_index  index.php;
 77             fastcgi_param  SCRIPT_FILENAME  /var/www/html/public$fastcgi_script_name;
 78             include        fastcgi_params;
 79         }

それぞれのサービスを起動 & 自動起動するように設定

$ sudo service nginx start      ⇐ サービス起動
$ sudo service php-fpm start
$ sudo service mysqld start
$ sudo chkconfig nginx on           ⇐ 自動起動
$ sudo chkconfig php-fpm on
$ sudo chkconfig mysqld on

MySQL5.7ではrootユーザには初期パスワードなるものが存在し、
最初はそのパスワードでログインする

[ec2-user@ip-172-31-46-167 ~]$ sudo cat /var/log/mysqld.log
2017-08-03T06:59:34.488345Z 1 [Note] A temporary password is generated for root@localhost: Jt?eJUpbO6kl ⇐コレ

rootのパスワードは変更しておくべし

$ mysql -u root -p
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'パスワード';

Laravelのドキュメントに従いComposerをインストール後、Laravel5.4を導入

$ composer global require "laravel/installer"
$ cd /var/www/
$ laravel new html

ブラウザでLaravelのTOP画面が表示されることを確認

Laradockからお引っ越し

ローカルのLaravelより、gitを使ってアーカイブファイル作成!
Laradockには既に.gitignoreファイルが準備されており、logファイル等など必要ないファイルは省かれる様になっていました。便利!

git archive HEAD --output=~/WorkSpace/project/release/archive.zip

このファイルを/var/www/htmlに上書き(.envの取扱い注意!)し、
ファイルの権限を変更 chmod o+w -R storage
そして以下のコードを実行

$ php artisan config:cache
$ php artisan route:cache

.env.exampleを.envに書き換え、EC2上の環境に合わせた設定に書き換えます
そしてブラウザで確認!

The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.

こんなエラーが表示されましたよ…
以下を実行

$ php artisan key:generate
$ php artisan config:clear

.envファイルの APP_KEY= にキーがセットされるわけですね
無事TOPが表示されました!

でもページが遷移しませんよ?

/loginへ遷移できません。404エラーです。
原因はnginxの設定。5.4のドキュメント通りにnginx.confを編集。

$ vi /etc/nginx/nginx.conf
 49         location / {
 50             try_files $uri /index.php?$query_string;
 51         }

これで他のページへも遷移できるようになりました!
以上がEC2への引っ越し奮闘記になります。

Facebooktwitterlinkedintumblrmail