先週のAWS関連ブログ

先週のAWS関連ブログ 〜1/21(日) – yoshidashingo. セクションナイン の 吉田真吾(@yoshidashingo)です。 AWS公式Amazon RDS for MySQLとMariaDBのログ… 続きを表示 セクションナイン の 吉田真吾(@yoshidashingo)です。 AWS公式Amazon RDS for MySQLとMariaDBのログをAmazon CloudWatchで監視 … 続きを読む

Amazon Linux2とAmazon Linuxの違いについて(メモ)

Amazon Linux2が発表されたので、今までのAmazonLinuxとの違いについてメモしてみます。
基本的にはRHEL7ベースに変わっているので、CentOS7の知識が役に立ちます。
検証にはHyper-V上にインストールしたAmazonLinux2(amzn2-hyperv-2017.12.0.20171212.2-x86_64.xfs.gpt)を使用しました。

  • initからsystemdに変わった。

    • 今まで/etc/rc3.d/xxxとか作っていたり、chkconfigとかは使えない。
  • ホスト名の設定方法が違う

    • Amazon Linux
     /etc/sysconfig/networkを編集
     /etc/hostnameを編集
    
    • Amazon Linux2
      hostnamectl set-hostname amazonlinux2.example.com
    
  • epelリポジトリがない。Amazon公式リポジトリに色々入っていない。

    • CentOSのように、コミュニティリポジトリをガシガシ入れないといけない?

      • ミドルウエアはDockerでコンテナ化する前提なのかなぁ。
      • CentOSみたく、あとで相性問題でyum update出来ないとか起きそうだし、セキュリティパッチの提供とかあるので今まで通りAmazonのリポジトリから入れられると良いんだけどなぁ・・
  • タイムゾーンの変更方法が違う

    • Amazon Linux
     /etc/sysconfig/clockを編集
     cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    
    • Amazon Linux2
     timedatectl set-timezone Asia/Tokyo
    
  • MySQLが公式リポジトリにない。一見MySQLがインストールされるように見えるが、MariaDBが入る。

    [root@amazon ~]# yum install mysql
    Loaded plugins: langpacks, update-motd
    Resolving Dependencies
    --> Running transaction check
    ---> Package mariadb.x86_64 1:5.5.56-2.amzn2 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ================================================================================
    Package        Arch          Version                   Repository         Size
    ================================================================================
    Installing:
    mariadb        x86_64        1:5.5.56-2.amzn2          amzn2-core        8.9 M
    
    Transaction Summary
    ================================================================================
    Install  1 Package
    
    • MySQLを入れる場合はコミュニティリポジトリを追加して入れるしかないっぽい。
    • 入るMariaDBのバージョンが微妙に古いが、amazon-linux-extrasでmariaDB単品で入れる方法がない?
      • amazon-linux-extras install lamp-mariadb10.2-php7.2 とするとリポジトリが追加される&phpとMariaDBがインストールされるのだが、何故かMariaDBはクライアントしか入らないので注意。(書いてある通りphpとMariaDBしか入らないので、Apacheも入らないのですが、まさかlampと書いてあってDBサーバが入らないとは。RDS利用を想定??)
  • 同じく、PHPが5.4しかない。amazon-linux-extrasで入るのは7.2で、それ以外のバージョンは無いので、他のバージョンを入れたい場合はRemiなどで入れるしかない。ただしその場合パッケージ名が違うので注意

    • php71-devel -> php71-php-develなど。
    • 今のところalternatives –config phpで複数バージョンを切り替えられないようです。
    • 何故かphp-fpmが入るので、Nginx前提っぽい。
  • ファイルシステムがXFSになったので、fallocateで作ったファイルをswaponすることができない。ので、SWAP用のEBSを別でつけて、スワップ領域とするか、DDで固定容量のスワップファイルを作成してマウントする。AmazonLinuxの頃にやっていたクラスメソッドさんの記事は動きませんので、EC2のCentOS7でSWAP領域を作る方法にあるようにすればいいのですが、起動毎に数分かかるのでちょっと・・・

    • ついでに、/etc/rc.localに実行権限は付いていないので注意です。
  • その他

    • Hyper-V版ではpostfixがインストールされていたのですが、EC2版ではMTAがインストールされていなかった。(sendmailコマンド自体がなかった)
    • Apache2.4が標準になったので、パッケージ名が変更されています。Chefなど構成管理を使っていると修正が必要
      • httpd24 -> httpd
      • mod_php70 -> mod_php(extra入れた場合)
      • mod24_ssl -> mod_ssl
    • Chefのohaiで取得できる情報が違いますので、レシピの条件分岐で注意しましょう。

      [root@amazon ~]# ohai | grep platform
      "platform": "amazon",
      "platform_version":"2.0",
      "platform_family": "rhel",
          "platform": "x86_64-linux",
      
      • systemdになったので動くか不安でしたが、Chef側で検知できるので通常のserviceで問題ありませんでした。
    • ntpが動いていない!と思ったらchronydになったようです。

      • ntpqで時刻監視しているところは注意が必要。
    • rsyslogがない!と思ったらsystemd-journald.serviceになったようです。

      • ntpqはないので、アンインストールしてntpを入れるか、chronyc sourcesが同等コマンドらしいので書き換える。
     [root@amazon ~]# systemctl status rsyslog.service
    Unit rsyslog.service could not be found.
    [root@amazon ~]# systemctl status systemd-journald.service
    ● systemd-journald.service - Journal Service
    
    • ifconfigやpstreeは生き残っているみたいw
    • yum check --securityを実行すると、Hyper-V環境だと何故かCPU100%で暴走しましたOrz
  • 追記

    • amazon-linux-extrasでphp7.2を入れたところ、ssh2やzipなどエクステンションが全然足りない。

      • 結局amzn2-coreリポジトリを無効化してepelとremiから入れた。無効化すればパッケージ名を気にしなくてよいが、アップデート時に衝突する、yum update securityが効くのか疑問なので、コアのほうでパッケージが充実してほしい。
    • Apacheのバージョンが2.4.6となんと現行AmazonLinuxよりも古いため、SSLSessionTicketsがエラーになる。地味に嵌った。nginx使えという事なのかなぁ。
    • 標準で入っているPythonは2系ですが、pipが入っていないので個別インストールが必要

続きを読む

AWS再入門 Amazon EC2(Linux)編 | Developers.IO

はじめに AWSチームのすずきです。 Amazon RDS (MySQL, MariaDB)のリードレプリカ、Multi-AZ で利用可能となるアップデートがありました。 その設定を試す機会がありましたので、紹介させて頂きます。 Amazon RDSのリードレプリカがMulti-AZ配置をサポートしました 手順 AWSコンソール リードレプリカのMulti-AZ設定に … 続きを読む

AWSとAzureとGCPを比較してみる – DB編

DBについて、AWSとAzureとGCPを比較してみました。

1. 新世代DB

AWS Azure GCP
新世代DB Aurora Cosmos DB Cloud Spanner
DBの種類 MySQL,
Postgresql
SQL (document DB),
MongoDB (document DB),
Gremlin (graph DB),
Azure Table(KVS),
Cassandra
オリジナルのリレーショナルDB
サーバレスか否か サーバあり サーバレス サーバレス
高可用性構成 / 負荷分散 Auroraレプリカ,
クロスリージョンレプリカ(MySQLのみ)
リージョン間フェイルオーバー,
予約済みスループット
リージョン内レプリケーション,
マルチリージョンレプリケーション
地理的範囲 リージョン(MySQLは別リージョンにレプリケーション可) グローバル グローバル
マルチマスター シングルマスター,
マルチマスター*
マスターになるリージョンは1個 マルチマスター

*プレビュー

DBの種類ですが、Auroraは手堅くMySQLとPostgresql、Cosmos DBはバラエティーにとんでいてドキュメントDB・KVS・グラフDBとCassandra、Cloud SpannerはオリジナルのリレーショナルDBとなっています。
Cloud Spannerはクライアントライブラリが各言語(C#,GO,Java**, node.js**,PHP**, Python**, Ruby)に対し用意されていますが、ORMの対応が気になるところです。
**ベータ

Cosmos DBとCloud Spannerはサーバレスですが、Auroraはインスタンスタイプを指定してインスタンスを構築します。また、拡張機能というよりは別物として、サーバレスタイプのAurora serverless*がプレビュー中です。

高可用性構成と負荷分散ですが、Auroraはリージョン内ではリードレプリカが障害時にマスターに昇格することで対応しています。MySQL版はクロスリージョンレプリケーション構成を取ることができますが、リージョン間で自動フェイルオーバーする仕組みはありません。
また、Auroraはマルチマスター機能であるAurora Multi-Master*が現在プレビュー中ですが、リージョン間でも利用可能になる予定があるとアナウンスされています。リリースされればグローバルで高可用性と負荷分散が簡単に実現できそうです。
Cosmos DBは、1個の書き込みリージョンを持つリージョン間フェイルオーバー***の仕組みで高可用性を実現しています。
Cloud Spannerはリージョン内レプリケーションとマルチリージョンレプリケーションの仕組みで高可用性を実現しています。1つのリージョンで構築する場合は、3個のread-writeレプリカを保持します。複数リージョンで構築する場合は、2個のread-writeレプリカを保持する2個のread-writeリージョン(と場合によってread-onlyリージョン)で構成されます。

***Microsoftのドキュメントではregional failoverをリージョン内フェイルオーバーと訳していますが、意味合いはリージョン間フェイルオーバーなので、ここではそのように表記しています。

2. リレーショナルDB

AWS Azure GCP
MYSQL互換 MySQL
/ MariaDB
Azure Database for MySQL* Google Cloud SQL for MySQL
高可用性構成 Multi-AZ,
クロスリージョンリードレプリカ
フェイルオーバーレプリカ
負荷分散 リードレプリカ,
クロスリージョンリードレプリカ
リードレプリカ
Postgresql Postgresql Azure Database for PostgreSQL* Google Cloud SQL for PostgreSQL**
高可用性構成 Multi-AZ,
クロスリージョンリードレプリカ
リージョナルインスタンス**
負荷分散 リードレプリカ,
クロスリージョンリードレプリカ
リードレプリカ**
SQL Server SQL Server Azure SQL Database
高可用性構成 Multi-AZ アクティブgeoレプリケーション
負荷分散 アクティブgeoレプリケーション
Oracle Oracle
高可用性構成 Multi-AZ
負荷分散

*プレビュー
**ベータ

・各クラウド間での違い-その1

AWSのMulti-AZとGCPのリージョナルインスタンス(PostgreSQL)は、スタンバイ側はリードの機能がないので負荷分散には利用できませんが、GCPのフェイルオーバーレプリカ(MySQL)はリードの機能があるので負荷分散にも利用できます。

3. NOSQL

AWS Azure GCP
KVS・ドキュメント ElastiCache(Memcached, Redis),
DynamoDB
Redis Cache,
Cosmos DB(Azure Table, SQL, MongoDB)
Cloud Datastore,
Cloud Bigtable
グラフ Neptune* Cosmos DB(Gremlin)
Cosmos DB(Cassandra)

*プレビュー

Neptuneの現時点のプレビューのAWSマネジメントコンソール画面はAmazon RDSとよく似ています。また裏でAuroraと同じ仕組みを利用しているそうなので、ひょっとしたらCosmos DBみたいに、Auroraの一機能としてリリースされるかも知れません。

4. まとめ

現在は、MySQL・Postgresqlを利用したければAWSのAuroraかRDS、SQL Serverを利用したければAzureでしょうか。
ただ各クラウドのプレビュー・ベータ提供状況を見ていると、そのうち機能差は無くなるように思えます。

続きを読む

CloudFormationでRDSを更新する時の注意

背景

CloudFormationで管理しているMariaDBインスタンスのパブリックアクセスを変更したかったのですが
スタックファイル(json)から更新すると以下のエラーでハマりました。

CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename (DBインスタンス名) and update the stack again.

公式ドキュメントを読んで見ると

InstanceIdentifier
重要
名前を指定すると、このリソースの置換が必要な更新はできません。中断が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。

CloudFormationで、DBInstanceのInstanceIdentifier(DBインスタンス名)を設定していると置換ができないのです。。。。

それでは逆に名前を指定しないとどうなるかと言うと

DB インスタンスの名前。名前を指定すると、AWS CloudFormation は名前を小文字に変換します。名前を指定しないと、AWS CloudFormation は一意の物理 ID を生成し、その ID を DB インスタンス名として使用します。詳細については、「Name タイプ」を参照してください。

AWSでIDを生成してくれ、それがDBインスタンス名になりますが、人間にとってわかりやすい名前を指定できないので管理はしづらくなりそうです。

名前を指定している時はどうするのか?

例えば以下のような既存のスタックファイル(json)でDBの名前を指定している場合で、その名前を再利用するためには

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "p4c dev rds stack",
  "Resources" : {
    "DevRDSDBInstance" : {
      "Type" : "AWS::RDS::DBInstance",
      "Properties" : {
        "DBInstanceIdentifier":"sample-instance01",
        "DBSubnetGroupName" : "sample-rds-subnet-group",
        "AvailabilityZone" : "ap-northeast-1a",
        "AllocatedStorage" : "50",
        "DBInstanceClass" : "db.t2.medium",
        "PubliclyAccessible": "true",
        "Engine" : "MariaDB",
        "DBParameterGroupName": "sample-rds-parameter-group",
        "MasterUsername" : "sample-master-user",
        "MasterUserPassword" : "sample-master-password",
        "DBSnapshotIdentifier" :"snapshot-sample-instance01",
        "Tags" : [ { "Key" : "Name", "Value" : "sample-Instance01-rds01" } ],
        "VPCSecurityGroups": "sg-sample"
      }
    }
  }
}

1.更新するDBインスタンスのスナップショットをとる

上記のスタックファイルでは例ではsnapshot-sample-instance01

無題のプレゼンテーション (4).png

2.別の名前に変更し、CloudFormationを反映

CloudFormationファイル(json)のDBInstanceIdentifierで指定している名前を
sample-instance02などに変更し、DBSnapshotIdentifierを1で取得したスタップの名前にする。

無題のプレゼンテーション (5).png

スタックを更新すると、AWSが作成したインスタンス名のDBインスタンスができ、もともと設定していたsample-instance01のDBインスタンスが削除される。

3.元の名前に戻し、CloudFormationを反映

再度CloudFormationのjsonファイルに、DBInstanceIdentifierを追加し、名前(sample-instance01)を指定する。

無題のプレゼンテーション (7).png

名前を指定したDBインスタンスが生成され、2で作成されたDBインスタンスが削除される

というような作業になり、かなり面倒です。。。。

awsのコンソール画面からだと、パブリックアクセスの変更は特にダウンタイムもなく更新されるのに、
パブリックアクセスやオプショングループの変更など、一般的に再起動が発生しそうな変更をCloudFormationで行うと、DBインスタンスの置換が必要に大がかりな作業になります。

終わりに

こういった事情を考慮するとDBインスタンスの名前は特に設定しないで、DBインスタンスにDNSを設定して、RDSのエンドポイントが変わっても管理するのが楽そうですね。

続きを読む

RDS からEC2へ Multi-master replicationを組んでみた

この記事はRetty Inc. Advent Calendar 2017 15日目の記事です。
昨日は @isaoeka さんによる OS X アプリケーション(Today Extension)開発に触れてみる でした。

こんにちは、Rettyでインフラを担当している@takumi-suzukiです。
7月から宮城でリモート勤務をしていて、11月から東京に帰ってきました。
東京はamazonで注文したものが翌日には届いて最高です。

今回は、MySQLを調べていて興味をもったMulti-master replicationについて書きます。
業務でも活かせるように、AWSのRDSを使用していたものから、EC2にレプリケーションを貼ります。

使用したサーバー

  1. Master DB01 (RDS MySQL 5.7.19)
  2. Master DB02 (RDS MySQL 5.7.19)
  3. Replica DB01(EC2 AmazonLinux2)

ReplicaDB の準備

最近リリースされた、AmazonLinux 2にMySQL 5.7をインストールして使用します。

MySQL5.7のインストール

AmazonLinuxで通常通り yum install mysql とかとやってしまうと、MariaDBが入ってしまうので、以下の方法でMySQLをインストールします。

# リポジトリ追加
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

# 確認
$ yum info mysql-community-server

# インストール
$ sudo yum -y install mysql-community-server

[ec2-user@ip-172-22-246-193 ~]$ mysqld --version
mysqld  Ver 5.7.20 for Linux on x86_64 (MySQL Community Server (GPL))
[ec2-user@ip-172-22-246-193 ~]$

# 自動起動設定
$ sudo systemctl enable mysqld.service

# 起動
$ sudo systemctl start mysqld.service

MySQL5.7の初期設定

MySQL5,7ではポリシーでMEDIUMが設定されているため、パスワードが厳し目に設定しなければいけません。
テスト的にやりたいのに、そんなパスワードは設定したくないため、以下の方法でポリシーを変更し、パスワード変更を行います。

# パスワード設定しないと諸々変更できないので、とりあえずのパスワードを設定します。
> set password for root@localhost=password('PassWord@0123456789');

# パスワードポリシーの変更
> SET GLOBAL validate_password_length=4;
> SET GLOBAL validate_password_policy=LOW;

# パスワード変更
> set password for root@localhost=password('root');

my.cnfの設定

replicationが組めるように、以下の設定を追記します。

server-id=1024
relay_log_info_repository = TABLE
master_info_repository = TABLE
relay_log_recovery = ON

mysqlを再起動します
sudo systemctl restart mysqld.service

レプリケーション設定

ここから、RDSとEC2でレプリケーションを組んでいきます。

Master にReplication Userを作成

replication を組むためのuserをMasterとなるそれぞれのDBに対して作成します。

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';

Master情報の確認

replicationを組むためにのmasterのLogとポジションを調べます。

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin-changelog.000021
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.03 sec)

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin-changelog.000021
         Position: 154
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.03 sec)

Replication 開始

Master情報をReplicaDBに設定します

> CHANGE MASTER TO
  MASTER_HOST='master01.********.ap-northeast-1.rds.amazonaws.com',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin-changelog.000021',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10
  for channel 'master01';

> CHANGE MASTER TO
  MASTER_HOST='master02.********.ap-northeast-1.rds.amazonaws.com',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin-changelog.000022',
  MASTER_LOG_POS=154,
  MASTER_CONNECT_RETRY=10
  for channel 'master02';

以下のコマンドでReplicationを開始します。

start slave for channel 'master01';
start slave for channel 'master02';

確認

以下のようにして、それぞれのMasterとのreplicationが確立されているかを確認します。

mysql> mhow slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: test-master01.ckudyu9ubkf5.ap-northeast-1.rds.amazonaws.com
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin-changelog.000046
          Read_Master_Log_Pos: 521
               Relay_Log_File: ip-172-22-246-193-relay-bin-master1.000050
                Relay_Log_Pos: 754
        Relay_Master_Log_File: mysql-bin-changelog.000046
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 521
              Relay_Log_Space: 1038
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1940910623
                  Master_UUID: 2a111330-e15e-11e7-8d0e-0a57ab429cea
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: master1
           Master_TLS_Version: 
*************************** 2. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: test-master02.ckudyu9ubkf5.ap-northeast-1.rds.amazonaws.com
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin-changelog.000045
          Read_Master_Log_Pos: 154
               Relay_Log_File: ip-172-22-246-193-relay-bin-master2.000050
                Relay_Log_Pos: 387
        Relay_Master_Log_File: mysql-bin-changelog.000045
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 671
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1018574732
                  Master_UUID: bdeace00-e15e-11e7-b0c2-067018182636
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: master2
           Master_TLS_Version: 
2 rows in set (0.00 sec)

テスト

master01とmaster02にINSERTを行い、ReplicaDBに反映されるかを確認します。

master1
mysql> INSERT INTO item (id,name) VALUES (1,"master1");
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO item (id,name) VALUES (4,"master1");
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM item
    -> ;
+------+---------+
| id   | name    |
+------+---------+
|    1 | master1 |
|    4 | master1 |
+------+---------+
2 rows in set (0.04 sec)
master2
mysql> INSERT INTO item (id,name) VALUES (2,"master2");
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO item (id,name) VALUES (3,"master22");
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM item ;
+------+---------+
| id   | name    |
+------+---------+
|    2 | master2 |
|    3 | master2 |
+------+---------+
2 rows in set (0.05 sec)

mysql> 
replicaDB
mysql> SELECT * FROM item;
+------+---------+
| id   | name    |
+------+---------+
|    2 | master2 |
|    3 | master2 |
|    1 | master1 |
|    4 | master1 |
+------+---------+
4 rows in set (0.00 sec)

mysql>

無事反映されてることを確認できました。

まとめ

最近のタスクでDB周りをやっていて、RDS周りで調査がスムーズにできないために外だししたくて試してみました。
思ったほど、癖があるわけではなくすんなりとレプリケーションを組むことができました。
しかし、検証環境や調査環境で使う分にはいいですが、本番はあまり使いたくないなと思っている所存です!!

明日は captain( @takaaki-suzuki ) の NVIDIA DGX Station を試してみた です。お楽しみに〜

続きを読む

Amazon Linux 2を見る

Amazon Linux 2


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|___|___|

https://aws.amazon.com/amazon-linux-2/

Amazon Linux 2が発表されました。
https://aws.amazon.com/jp/about-aws/whats-new/2017/12/introducing-amazon-linux-2/

ec2-metadata

[root@ip-10-5-32-70 ~]# ec2-metadata
ami-id: ami-2a34b64c
ami-launch-index: 0
ami-manifest-path: (unknown)
ancestor-ami-ids: not available
block-device-mapping:
         ami: /dev/xvda
         root: /dev/xvda
instance-id: i-071c4a39e70ae745b
instance-type: t2.nano
local-hostname: ip-10-5-32-70.ap-northeast-1.compute.internal
local-ipv4: 10.5.32.70
kernel-id: not available
placement: ap-northeast-1a
product-codes: not available
public-hostname: ec2-13-112-183-81.ap-northeast-1.compute.amazonaws.com
public-ipv4: 13.112.183.81
public-keys:
keyname:galaxy
index:0
format:openssh-key
key:(begins from next line)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCehg0RkIeCPg94jpFM7hqQXYWD8BdVyewE3836SnSA2lKsiHKmo+dhzZg8u70eDaevOXvQNrumXdJUWN76gemO9JB1IfjNjECZqRXOFc3yHheQMWbimcLAT3W39/MjXja2Amjy539qjfJ5blknQUPi3InnGae0TDutXQN1UX6oU3y5JBZOoi1kQi8Jth34LpoS5qXs/+i7DFlhNA7YXNzAqTnksbXPA6G7Ww0+xFLLTaXUfbhQydM3rkCU7ABGEUlodhU6BKFMmDltXEC9Q7nCghETZdFgF3lVTOOM3Tsb+e890+OcW7Nf3CGR57LABX+FwxvW2jGNarhWP9oR/8T1 galaxy
ramdisk-id: not available
reservation-id: r-0f55ec655c1e51a0b
security-groups: lithium-prod-web
user-data: not available

ami-id: ami-2a34b64c

uname

[root@ip-10-5-32-70 ~]# uname -a
Linux ip-10-5-32-70.ap-northeast-1.compute.internal 4.9.62-10.57.amzn2.x86_64 #1 SMP Wed Dec 6 00:07:49 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

amzn2

systemd support

[root@ip-10-5-32-70 ~]# ps u -p 1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.8  1.0 125280  5256 ?        Ss   04:28   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

Python

記事にはこう書いてあります。

Additional software packages, including the newer versions of popular software packages such as Python, MariaDB, Node.js, are available for installation using the Amazon Linux Extras repository.

さぞ新しいバージョンが入っていることでしょう。

the newer versions

[root@ip-10-5-32-70 ~]# python --version
Python 2.7.5

これだから…

続きを読む

AWS 上に JobScheduler を構築した話

AWSには自前でジョブ実行用のサービスがあるので、こういうのはあまりやらないと思いますが、色々とハマったのでメモ。

インストール

JobScheduler インストール

  1. インストーラーをここからダウンロードします。

    スクリーンショット 2017-06-08 0.33.37.png

  2. 解凍した中にある jobscheduler_install.xml を以下の形に修正します。

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!--
    XML configuration file for JobScheduler setup
    
    The JobScheduler is available with a dual licensing model.
    - GNU GPL 2.0 License (see http://www.gnu.org/licenses/gpl-2.0.html)
    - JobScheduler Commercial License (see licence.txt)
    
    The setup asks you for the desired license model
    (see <entry key="licenceOptions" .../> below).
    
    If you call the setup with this XML file then you accept
    at the same time the terms of the chosen license agreement.
    -->
    <AutomatedInstallation langpack="eng">
    <com.izforge.izpack.panels.UserInputPanel id="home">
        <userInput/>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="licences">
        <userInput>
    
            <!-- Select the license model (GPL or Commercial) -->
            <entry key="licenceOptions" value="GPL"/>
    
            <!-- If you selected GPL as license model than the licence must be empty.
                 Otherwise please enter a license key if available.
                 It is also possible to modify the license key later. -->
            <entry key="licence" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.HTMLLicencePanel id="gpl_licence"/>
    <com.izforge.izpack.panels.HTMLLicencePanel id="commercial_licence"/>
    <com.izforge.izpack.panels.TargetPanel id="target">
    
        <!-- SELECT THE INSTALLATION PATH FOR THE BINARIES AND LIBRARIES
             The installation expands this path with the Scheduler ID as subdirectory.
             The path must be absolute!
             Default paths are
             /opt/sos-berlin.com/jobscheduler for Unix
             C:Program Filessos-berlin.comjobscheduler for Windows -->
        <installpath>/opt/sos-berlin.com/jobscheduler</installpath>
    
    </com.izforge.izpack.panels.TargetPanel>
    <com.izforge.izpack.panels.UserPathPanel id="userpath">
    
        <!-- SELECT THE DATA PATH FOR CONFIGURATION AND LOG FILES
             The installation expands this path with the Scheduler ID as subdirectory.
             The path must be absolute!
             Default paths are
             /home/[user]/sos-berlin.com/jobscheduler for Unix
             C:ProgramDatasos-berlin.comjobscheduler for Windows -->
        <UserPathPanelElement>/home/joc/jobscheduler</UserPathPanelElement>
    
    </com.izforge.izpack.panels.UserPathPanel>
    <com.izforge.izpack.panels.PacksPanel id="package">
    
        <!-- SELECT THE PACKS WHICH YOU WANT INSTALL -->
    
        <!-- Package: JobScheduler
             JobScheduler Basic Installation
             THIS PACK IS REQUIRED. IT MUST BE TRUE -->
        <pack index="0" name="Job Scheduler" selected="true"/>
    
        <!-- Package: Database Support
             Job history and log files can be stored in a database. Database support is
             available for MySQL, PostgreSQL, Oracle, SQL Server, DB2.
             THIS PACK IS REQUIRED. IT MUST BE TRUE -->
        <pack index="2" name="Database Support" selected="true"/>
    
        <!-- Package: Housekeeping Jobs
             Housekeeping Jobs are automatically launched by the Job Scheduler, e.g. to send
             buffered logs by mail, to remove temporary files or to restart the JobScheduler. -->
        <pack index="5" name="Housekeeping Jobs" selected="true"/>
    
    </com.izforge.izpack.panels.PacksPanel>
    <com.izforge.izpack.panels.UserInputPanel id="network">
        <userInput>
            <!-- Network Configuration -->
    
            <!-- Enter the name or ip address of the host on which the JobScheduler is operated -->
            <entry key="schedulerHost" value="localhost"/>
    
            <!-- Enter the port for TCP communication -->
            <entry key="schedulerPort" value="4444"/>
    
            <!-- Enter the port for HTTP communication -->
            <entry key="schedulerHTTPPort" value="40444"/>
    
            <!-- To enter a JobScheduler ID is required.
                 The IDs of multiple instances of the JobScheduler must be unique per server.
                 The JobScheduler ID expands the above installation paths as subdirectory.
                 Please omit special characters like: /  : ; * ? ! $ % & " < > ( ) | ^ -->
            <entry key="schedulerId" value="schedulerId_XXXX"/>
    
            <!-- It is recommended to enable TCP access for the host where the JobScheduler will install,
                 optionally enter additional host names or ip addresses. To enable all hosts in your
                 network to access the JobScheduler enter '0.0.0.0'. -->
            <entry key="schedulerAllowedHost" value="0.0.0.0"/>
    
            <!-- Choose (yes or no) wether the JobScheduler should be started at the end of the installation -->
            <entry key="launchScheduler" value="yes"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="cluster">
        <userInput>
            <!-- Cluster Configuration -->
    
            <!-- The JobScheduler can be installed independent of other possibly JobSchedulers,
                 as a primary JobScheduler in a backup system or as a backup JobScheduler.
                 Use '' for a standalone, '-exclusive' for a primary
                 or '-exclusive -backup' for a backup JobScheduler.
                 A database is required for a backup system. All JobSchedulers in a backup system
                 must have the same JobScheduler ID and the same database.
                 Further you can set '-distributed-orders' for a load balancing cluster.
                 For more information see
                 http://www.sos-berlin.com/doc/de/scheduler.doc/backupscheduler.xml
                 http://www.sos-berlin.com/doc/de/scheduler.doc/distributed_orders.xml -->
            <entry key="clusterOptions" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="smtp">
        <userInput>
            <!-- Mail Recipients Configuration / SMTP Authentication -->
    
            <!-- Enter the ip address or host name and port (default: 25) of your SMTP server -->
            <entry key="mailServer" value=""/>
            <entry key="mailPort" value="25"/>
    
            <!-- Configure the SMTP authentication if necessary. -->
            <entry key="smtpAccount" value=""/>
            <entry key="smtpPass" value=""/>
    
            <!-- Enter the addresses of recipients to which mails with log files are automatically
                 forwarded. Separate multiple recipients by commas -->
    
            <!-- Account from which mails are sent -->
            <entry key="mailFrom" value=""/>
    
            <!-- Recipients of mails -->
            <entry key="mailTo" value=""/>
    
            <!-- Recipients of carbon copies: -->
            <entry key="mailCc" value=""/>
    
            <!-- Recipients of blind carbon copies -->
            <entry key="mailBcc" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="email">
        <userInput>
            <!-- Mail Configuration / Event Handler -->
    
            <!-- Choose in which cases mails with log files are automatically forwarded. -->
            <entry key="mailOnError" value="no"/>
            <entry key="mailOnWarning" value="no"/>
            <entry key="mailOnSuccess" value="no"/>
    
            <!-- The Housekeeping package is required for configure JobScheduler as event handler
                 Choose this option if you intend to use JobScheduler Events and
                 - this JobScheduler instance is the only instance which processes Events
                 - this JobScheduler instance is a supervisor for other JobSchedulers which submit Events -->
            <entry key="jobEvents" value="off"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="database">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Choose the database management system. Supported values are 'mysql' for MySQL,
                 'oracle' for Oracle, 'mssql' for MS SQL Server, 'pgsql' for PostgreSQL,
                 'db2' for DB2 and 'sybase' for Sybase. -->
            <entry key="databaseDbms" value="mysql"/>
    
            <!-- You can choose between 'on' or 'off' to create the database tables.
                 If you have modified the initial data of an already existing installation,
                 then the modifications will be undone. Data added remains unchanged.
                 This entry should be only 'off', when you sure, that all tables are already created. -->
            <entry key="databaseCreate" value="on"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="dbconnection">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Enter the name or ip address of the database host -->
            <entry key="databaseHost" value="the host of RDS"/>
    
            <!-- Enter the port number for the database instance. Default ports are for MySQL 3306,
                 Oracle 1521, MS SQL Server 1433, postgreSQL 5432, DB2 50000, Sybase 5000. -->
            <entry key="databasePort" value="3306"/>
    
            <!-- Enter the schema -->
            <entry key="databaseSchema" value="jobscheduler_data"/>
    
            <!-- Enter the user name for database access -->
            <entry key="databaseUser" value="databaseUser"/>
    
            <!-- Enter the password for database access -->
            <entry key="databasePassword" value="databasePassword"/>
    
            <!-- You have to provide the MySQL, MS SQL Server, Sybase or DB2 JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL, Sybase and MS SQL Server JDBC Drivers are
                 not provided. Alternatively you can use the mariadb JDBC Driver for MySQL and
                 the jTDS JDBC Driver for MS SQL Server and Sybase which is provided. -->
    
            <!-- You can choose between 'yes' or 'no' for using the jTDS JDBC Driver
                 This entry affects only MS SQL Server or Sybase -->
            <entry key="connectorJTDS" value="yes"/>
    
            <!-- You can choose between 'yes' or 'no' for using the mariadb JDBC Driver
                 This entry affects only MySQL -->
            <entry key="connectorMaria" value="yes"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="jdbc">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Configuration for JDBC Driver
                 This entry is only necessary if you selected a DBMS type such as MySQL,
                 MS SQL Server, Sybase ot DB2 in the previous <userInput> element. -->
    
            <!-- You have to provide the MySQL, MS SQL Server, Sybase or DB2 JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers are
                 not provided. Specify the JDBC Driver source (e.g. mysql-connector-java-*.jar for MySQL,
                 sqljdbc.jar for MS SQL Server, jconn3.jar for Sybase). Alternatively you can use the mariadb
                 JDBC Driver for MySQL and the jTDS JDBC Driver for MS SQL Server and Sybase which is provided. -->
    
            <!-- Select the path to JDBC Driver -->
            <entry key="connector" value="/usr/share/java/mariadb-connector-java.jar"/>
    
            <!-- Only for DB2: Select the path to DB2 license file for JDBC Driver -->
            <entry key="connectorLicense" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingDatabase">
        <userInput>
            <!-- Reporting Database Configuration
                 NOT SUPPORTED FOR SYBASE AND DB2 -->
    
            <!-- Set 'yes' if the JobScheduler and the Reporting database are the same.
                 If 'yes' then further Reporting database variables are ignored. -->
            <entry key="sameDbConnection" value="yes"/>
    
            <!-- Choose the database management system. Supported values are 'mysql' for MySQL,
                 'oracle' for Oracle, 'mssql' for MS SQL Server, 'pgsql' for PostgreSQL. -->
            <entry key="reporting.databaseDbms" value="mysql"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingDbconnection">
        <userInput>
            <!-- Reporting Database Configuration
                 NOT SUPPORTED FOR SYBASE AND DB2 -->
    
            <!-- Enter the name or ip address of the database host -->
            <entry key="reporting.databaseHost" value="qnet-jobscheduler.c58hqrvwigfw.ap-northeast-1.rds.amazonaws.com"/>
    
            <!-- Enter the port number for the database instance. Default ports are for MySQL 3306,
                 Oracle 1521, MS SQL Server 1433, postgreSQL 5432. -->
            <entry key="reporting.databasePort" value="3306"/>
    
            <!-- Enter the schema -->
            <entry key="reporting.databaseSchema" value="jobscheduler_data"/>
    
            <!-- Enter the user name for database access -->
            <entry key="reporting.databaseUser" value="reporting.databaseUser"/>
    
            <!-- Enter the password for database access -->
            <entry key="reporting.databasePassword" value="reporting.databasePassword"/>
    
            <!-- You have to provide the MySQL or MS SQL Server JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers
                 are not provided. Alternatively you can use the mariadb JDBC Driver for MySQL and the
                 jTDS JDBC Driver for MS SQL Server which is provided. -->
    
            <!-- You can choose between 'yes' or 'no' for using the jTDS JDBC Driver
                 This entry affects only MS SQL Server -->
            <entry key="reporting.connectorJTDS" value="yes"/>
    
            <!-- You can choose between 'yes' or 'no' for using the mariadb JDBC Driver
                 This entry affects only MySQL -->
            <entry key="reporting.connectorMaria" value="yes"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingJdbc">
        <userInput>
            <!-- Reporting Database Configuration
                 NOT SUPPORTED FOR SYBASE AND DB2 -->
    
            <!-- Configuration for JDBC Driver
                 This entry is only necessary if the package 'Database Support' is chosen and you
                 selected a DBMS type MySQL or MS SQL Server in the previous
                 <userInput> element. -->
    
            <!-- You have to provide the MySQL or MS SQL Server JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers are
                 not provided. Specify the JDBC Driver source (e.g. mysql-connector-java-*.jar for MySQL,
                 sqljdbc.jar for MS SQL Server). Alternatively you can use the mariadb JDBC Driver for
                 MySQL and the jTDS JDBC Driver for MS SQL Server which is provided. -->
    
            <!-- Select the path to JDBC Driver -->
            <entry key="reporting.connector" value="/usr/share/java/mariadb-connector-java.jar"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="end">
        <userInput/>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.InstallPanel id="install"/>
    <com.izforge.izpack.panels.ProcessPanel id="process"/>
    <com.izforge.izpack.panels.FinishPanel id="finish"/>
    </AutomatedInstallation>
    
    
  3. setup.sh を実行します

    ./setup.sh jobscheduler_install.xml
    

JOC インストール

  1. JobScheduler と同様に JOC をダウンロードします。

    スクリーンショット 2017-06-08 0.35.42.png

  2. joc_install.xml を修正します。

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!--
    XML configuration file for JOC
    
    If you call the installer with this XML file then
    you accept at the same time the terms of the
    licence agreement under GNU GPL 2.0 License
    (see http://www.gnu.org/licenses/gpl-2.0.html)
    -->
    <AutomatedInstallation langpack="eng">
    <com.izforge.izpack.panels.UserInputPanel id="home">
        <userInput/>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.HTMLLicencePanel id="gpl_licence"/>
    <com.izforge.izpack.panels.TargetPanel id="target">
    
        <!-- SELECT THE INSTALLATION PATH
             It must be absolute!
             For example:
             /opt/sos-berlin.com/joc on Linux
             C:Program Filessos-berlin.comjoc on Windows -->
        <installpath>/opt/sos-berlin.com/joc</installpath>
    
    </com.izforge.izpack.panels.TargetPanel>
    <com.izforge.izpack.panels.UserInputPanel id="jetty">
        <userInput>
    
            <!-- JOC requires a servlet container such as Jetty.
                 If a servlet container already installed then you can use it.
                 Otherwise a Jetty will be installed in addition if withJettyInstall=yes.
                 You need root permissions to install JOC with Jetty. -->
            <entry key="withJettyInstall" value="yes"/>
            <entry key="jettyPort" value="4446"/>
            <!-- Only necessary for Windows -->
            <entry key="jettyStopPort" value="40446"/>
            <!-- Only necessary for Unix (root permissions required) -->
            <entry key="withJocInstallAsDaemon" value="yes"/>
            <!-- Path to Jetty base directory
                 For example:
                 /homer/[user]/sos-berlin.com/joc on Linux
                 C:ProgramDatasos-berlin.comjoc on Windows -->
            <entry key="jettyBaseDir" value="/home/joc/jetty"/>
    
            <!-- Java options for Jetty. -->
            <!-- Initial memory pool (-Xms) in MB -->
            <entry key="jettyOptionXms" value="128"/>
            <!-- Maximum memory pool (-Xmx) in MB -->
            <entry key="jettyOptionXmx" value="512"/>
            <!-- Thread stack size (-Xss) in KB -->
            <entry key="jettyOptionXss" value="4000"/>
            <!-- Further Java options -->
            <entry key="jettyOptions" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingDatabase">
        <userInput>
            <!-- Reporting Database Configuration -->
    
            <!-- Choose the database management system. Supported values are 'mysql' for MySQL,
                 'oracle' for Oracle, 'mssql' for MS SQL Server, 'pgsql' for PostgreSQL. -->
            <entry key="reporting.databaseDbms" value="mysql"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingDbconnection">
        <userInput>
            <!-- Reporting Database Configuration -->
    
            <!-- Enter the name or ip address of the database host -->
            <entry key="reporting.databaseHost" value="qnet-jobscheduler.c58hqrvwigfw.ap-northeast-1.rds.amazonaws.com"/>
    
            <!-- Enter the port number for the database instance. Default ports are for MySQL 3306,
                 Oracle 1521, MS SQL Server 1433, postgreSQL 5432. -->
            <entry key="reporting.databasePort" value="3306"/>
    
            <!-- Enter the schema -->
            <entry key="reporting.databaseSchema" value="jobscheduler_data"/>
    
            <!-- Enter the user name for database access -->
            <entry key="reporting.databaseUser" value="qnet_admin"/>
    
            <!-- Enter the password for database access -->
            <entry key="reporting.databasePassword" value="7sYne7aFEsFSK7xh"/>
    
            <!-- You have to provide the MySQL or MS SQL Server JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers are
                 not provided. Alternatively you can use the mariadb JDBC Driver for MySQL and
                 the jTDS JDBC Driver for MS SQL Server which is provided. -->
    
            <!-- You can choose between 'yes' or 'no' for using the jTDS JDBC Driver
                 This entry affects only MS SQL Server -->
            <entry key="reporting.connectorJTDS" value="yes"/>
    
            <!-- You can choose between 'yes' or 'no' for using the mariadb JDBC Driver
                 This entry affects only MySQL -->
            <entry key="reporting.connectorMaria" value="yes"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="reportingJdbc">
        <userInput>
            <!-- Reporting Database Configuration -->
    
            <!-- Configuration for JDBC Driver
                 This entry is only necessary if you selected a DBMS type such as MySQL and
                 MS SQL Server in the previous <userInput> element. -->
    
            <!-- You have to provide the MySQL or MS SQL Server JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers are
                 not provided. Specify the JDBC Driver source (e.g. mysql-connector-java-*.jar for MySQL,
                 sqljdbc.jar for MS SQL Server). Alternatively you can use the mariadb
                 JDBC Driver for MySQL and the jTDS JDBC Driver for MS SQL Server which is provided. -->
    
            <!-- Select the path to JDBC Driver -->
            <entry key="reporting.connector" value="/usr/share/java/mariadb-connector-java.jar"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="database">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Set 'yes' if the Reporting and the JobScheduler database are the same.
                 If 'yes' then further JobScheduler database variables are ignored. -->
            <entry key="sameDbConnection" value="yes"/>
    
            <!-- Choose the database management system. Supported values are 'mysql' for MySQL,
                 'oracle' for Oracle, 'mssql' for MS SQL Server, 'pgsql' for PostgreSQL,
                 'db2' for DB2 and 'sybase' for Sybase. -->
            <entry key="databaseDbms" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="dbconnection">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Enter the name or ip address of the database host -->
            <entry key="databaseHost" value="qnet-jobscheduler.c58hqrvwigfw.ap-northeast-1.rds.amazonaws.com"/>
    
            <!-- Enter the port number for the database instance. Default ports are for MySQL 3306,
                 Oracle 1521, MS SQL Server 1433, postgreSQL 5432, DB2 50000, Sybase 5000. -->
            <entry key="databasePort" value="3306"/>
    
            <!-- Enter the schema -->
            <entry key="databaseSchema" value="jobscheduler_data"/>
    
            <!-- Enter the user name for database access -->
            <entry key="databaseUser" value="qnet_admin"/>
    
            <!-- Enter the password for database access -->
            <entry key="databasePassword" value="7sYne7aFEsFSK7xh"/>
    
            <!-- You have to provide the MySQL, MS SQL Server, Sybase or DB2 JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL, Sybase and MS SQL Server JDBC Drivers are
                 not provided. Alternatively you can use the mariadb JDBC Driver for MySQL and
                 the jTDS JDBC Driver for MS SQL Server and Sybase which is provided. -->
    
            <!-- You can choose between 'yes' or 'no' for using the jTDS JDBC Driver
                 This entry affects only MS SQL Server or Sybase -->
            <entry key="connectorJTDS" value="yes"/>
    
            <!-- You can choose between 'yes' or 'no' for using the mariadb JDBC Driver
                 This entry affects only MySQL -->
            <entry key="connectorMaria" value="yes"/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="jdbc">
        <userInput>
            <!-- JobScheduler Database Configuration -->
    
            <!-- Configuration for JDBC Driver
                 This entry is only necessary if you selected a DBMS type such as MySQL,
                 MS SQL Server, Sybase ot DB2 in the previous <userInput> element. -->
    
            <!-- You have to provide the MySQL, MS SQL Server, Sybase or DB2 JDBC driver respectively if you selected
                 corresponding DBMS type. For license reasons MySQL and MS SQL Server JDBC Drivers are
                 not provided. Specify the JDBC Driver source (e.g. mysql-connector-java-*.jar for MySQL,
                 sqljdbc.jar for MS SQL Server, jconn3.jar for Sybase). Alternatively you can use the mariadb
                 JDBC Driver for MySQL and the jTDS JDBC Driver for MS SQL Server and Sybase which is provided. -->
    
            <!-- Select the path to JDBC Driver -->
            <entry key="connector" value="/usr/share/java/mariadb-connector-java.jar"/>
    
            <!-- Only for DB2: Select the path to DB2 license file for JDBC Driver -->
            <entry key="connectorLicense" value=""/>
    
        </userInput>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.UserInputPanel id="end">
        <userInput/>
    </com.izforge.izpack.panels.UserInputPanel>
    <com.izforge.izpack.panels.InstallPanel id="install"/>
    <com.izforge.izpack.panels.ProcessPanel id="process"/>
    <com.izforge.izpack.panels.FinishPanel id="finish"/>
    </AutomatedInstallation>
    
  3. setup.sh を実行します

    ./setup.sh joc_install.xml
    

続きを読む

クラウドベンダーの比較

はじめに

3大クラウドと呼ばれているAWS、GCP,Azureのリソースを比べてみました。
2017年11月時点の比較となります。

インフラ・サービスレベル

比較項目 AWS GCP Azure 備考
データセンター 各地で借りている すべて自前 各地で借りている(一部自前)
仮想化技術 Xen KVM Hyper-V
リージョン(国内) 1個所 1個所 2個所
リージョン(全国) 15個所 12個所 36個所
SLA 99.95 99.95 99.95 仮想サーバ

サービス面

比較項目 AWS GCP Azure 備考
仮想サーバ Amazon EC2 Google Compute Engine Azure Virtual Machines
仮想サーバ対応OS Amazon Linux,CentOS,RedHat,Windows Server,等 CentOS,RedHat,SLES,Windows Server,等 CentOS,RedHat,Windows Server,等
仮想サーバディスク SSD,HDD SSD,HDD SSD,HDD
仮想サーバスナップショット
仮想サーバオートスケール
コンテナ Amazon ECS Container Engine Container Service
RDB RDS Cloud SQL SQL Database
RDB冗長化
RDBリードレプリカ
RDB DB種別 Aurora,MySQL,MariaDB,Oracle,SQL Server,PostgreSQL MySQL,PostgreSQL SQL Server
NoSQL DynamoDB Cloud Datastore Cosmos DB
ビックデータ Redshift BigQuery App Service
メール Amazon SES
モニタリングツール CloudWatch Stackdriver Azure Monitor
ロードバランサー(L4) CLB Network load balancing Azure Load Barancer
ロードバランサー(L7) ALB HTTP load balancing Application Gateway
CDN Amazon CloudFront Google Cloud CDN Azure CDN
VPN Amazon VPC Google Cloud VPN VPN Gateway
DNS Route53 Google Cloud DNS Azure DNS
専用線 Direct connect Dedicated Interconnect Express Route

サポート面

比較項目 AWS GCP Azure 備考
ランク低 開発者 ($29/月 or 利用料の 3%/月) シルバー ($150/月) Standard($300/月)
ランク中 ビジネス($100/月 or 利用料 の10%/月) ゴールド($400/月) Professional Direct($1,000/月)
ランク高 エンタープライズ($15,000/月 or 利用料の10%) プラチナ(問合せ) Premier(問合せ)

費用面(リージョン日本)

比較項目 AWS GCP Azure 備考
課金単位
ディスカウント リザーブドインスタンス(前払い) 継続利用割引、利用確約の割引(前払い) エンタープライズ契約(前払い)
仮想サーバ(Type) t2.medium(2vCPU,4GB) n1-standard-2(2コア,7.5GB) A2 V2(2コア,4GB)
仮想サーバ(時) $0.0464(5.336円)※1 $0.0950(10.925円)※1 $0.15(17.25円)※1
仮想サーバ(月) $33.408(3841.92円)※1 $48.17(5539.55円)※1,※2 $108(12,420円)※1
インターネットへの転送量 $0.140/GB(10TBまで) $0.12/GB(1TBまで) $0.138/GB(5GB-10TB、5GBまでは無料)
ストレージ利用料 $0.025/GB (最初の50TB/月まで) ※S3 $0.016/GB 月 ※Regional Storage $0.2/GB(最初の50TB/月まで) ※BLOG Storage

※1 $1=115円換算
※2 継続利用割引含む

総括

 AWS、GCP,Azureでのサービス面では同じようなサービスを展開していることが判明。
 インフラ・サービスレベルでは、Azureがリージョン36個とTOPに。
世界的に見て幅を利かせているように思えた。
ただ、GCPはすべて自前のセンターでクラウドサービスを展開していることから、
新しいことをやるにも制約が低いように思えた。
私のイメージ的に一番シェアが高いAWSは、インフラ面ではGCP,Azureに劣っている結果となった。
 費用面では、Azureは割高。AWSが思ったよりも頑張っているように思えた。
 イメージ的にGCPは費用は安いと思っていたが、仮想サーバ比較だと、継続利用割引を使用してもAWSのほうが安い結果となった。
 ただ、費用に関しては、日々値下げ合戦が繰り広げられているので、今後のベンダーさんの努力に期待です。

最後に、費用面での算出に使用した見積もりツールです。
【AWS】http://calculator.s3.amazonaws.com/index.html
【GCP】https://cloud.google.com/products/calculator/?hl=ja
【Azure】https://azure.microsoft.com/ja-jp/pricing/calculator

続きを読む

AmazonLinux に Zabbix3.0 をインストールした話

構成

Zabbix Server : EC2
Database : RDS(MariaDB)

EC2やRDSの構築は飛ばします

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

EC2にSSHでログインして、以下。

PHP & Apache

yum -y install httpd24 mysql php70 php70-devel php70-gd php70-mbstring php70-mcrypt php70-pdo php70-pecl-apcu-devel zlib-devel php70-mysqlnd php70-bcmath

mariadb

RDSを使うので不要

PHP の設定

vim /etc/php.ini

リポジトリのインストール

rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm

AmazonLinux は init 制御なので RHEL6 版をインストールします。
systemd に変わったら RHEL7 版に変更。

Zabbix3.0 のインストール

yum install zabbix-server-mysql.x86_64 zabbix-web-mysql.noarch zabbix-web-japanese.noarch zabbix-get zabbix-agent

設定

cp /usr/share/doc/zabbix-web-3.0.9/httpd24-example.conf /etc/httpd/conf.d/zabbix.conf
vim /etc/httpd/conf.d/zabbix.conf

以下を変更します。

  • 読み込むモジュールの変更

    変更前:<IfModule mod_php5.c>
    変更後:<IfModule mod_php7.c>

  • タイムゾーンの設定

    変更前:#php_value date.timezone Europe/Riga
    変更後:php_value date.timezone Asia/Tokyo

続きを読む