2015年1月28日水曜日

Windowsな人へ、AzureのCentOSをアップデートしましょう

めっちゃ簡単なので、セキュリティパッチの適用をお願いします。

1.sshでログインする
Puttyとかなんでもいいのでログインしましょう。

2.yumコマンドでアップデートしましょう。
$ sudo yum -y update
※ "-y"オプションは、勝手にアップデートをする際に必要

3.再起動
$ sudo shutdown -r now

アップデート方法がわからないのに、コンパイルしてアプリケーションをインストールしてる場合はちょっと困りますね...

なお、Ubuntuの場合はこれで。
$ sudo apt-get upgrade




2015年1月26日月曜日

MySQL Percona XtraDB Cluster を Azure上で動かしてみる

Percona XtraDB Cluster は、MySQLでマルチマスター型レプリケーションを実現するものです。

こちらの記事を読んでいたら、「別にAzureでできるじゃん」と思ったのでやってみることに。
http://qiita.com/nownabe/items/462f46f2702ce1ad4b6d#percona-xtradb-cluster-1

ClearDBもPercona使ってるのかな?
https://www.cleardb.com/blog/entry?id=press-release/april-18-2013/cleardb-ceo-to-speak-at-percona-live-santa-clara

Azureでのポイントは以下の3つ。
・仮想ネットワークを作成し、同一の仮想ネットワーク内に仮想マシンを置く。
・仮想マシンに可用性セットを設定し、メンテナンスなどの停止に備える。
・エンドポイントに負荷分散セットを設定し、ロードバランシングする。

今回はCentOS7でやってみましたが、もちろんハマるところはこの2つ。
・firewalldを止める(ほんとはきちんとポートの設定をしてOnにしましょう!今回だけですよ!!)
・SELinuxをオフにする

ざっくり手順を。
まずは管理ポータルでの設定。

1.仮想ネットワークの作成
名前を「percona」、場所を「日本(東)」にした。

2.仮想マシンの作成(1台目)
ギャラリーから「CentOSベース」→「OpenLogic 7.0」を選択。
仮想マシン名を「percona1」、サイズは「標準、A1」に。
新しいクラウドサービスを作成、DNS名は「percona0」、作成した仮想ネットワークを指定、可用性セットを「percona」という名前で作成。

3.仮想マシンの作成(2台目、3台目)
ギャラリーから「CentOSベース」→「OpenLogic 7.0」を選択。
仮想マシン名を「percona2(percona3)」、サイズは「標準、A1」に。
作成したクラウドサービス「percona0」を選択、作成した仮想ネットワークを指定、作成した可用性セット「percona」を選択。

4.MySQLのエンドポイントの追加(percona1)
まず、percona1でエンドポイントを作成します。
「スタンドアロン エンドポイントの作成」を選択し、次へ。
エンドポイントの詳細で、名前を「MySQL」に、「負荷分散セットの作成」にチェック。

5.MySQLのエンドポイントの追加(percona2、percona3)
「既存の負荷分散セットにエンドポイントを追加する」を選択し、次へ。
エンドポイントの詳細で、名前を「MySQL」に、「負荷分散セットの再構成」にチェック。

ここまでで、管理ポータルの設定は完了。
なお、各IPアドレスは、percona1(10.0.0.4)、percona2(10.0.0.5)、percona3(10.0.0.6)です。

各サーバーの設定は参照記事の通りですが、ざっくりと。

1.アップデートとSELinuxとfirewalldの無効化
sshでログインして、以下のコマンドをどうぞ。
$ sudo yum -y upgrade
$ sudo vi /etc/sysconfig/selinux
SELINUX=disabled
$ sudo systemctl disable firewalld
$ sudo shutdown -r now

2.Percona XtraDB Cluster のインストール
$ sudo yum -y install epel-release
$ sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
$ sudo  yum -y install Percona-XtraDB-Cluster-56

3.my.cnfの編集(percona1)
$ sudo vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
user=mysql

binlog_format                  = ROW
innodb_buffer_pool_size        = 100M
innodb_flush_log_at_trx_commit = 0
innodb_flush_method            = O_DIRECT
innodb_log_files_in_group      = 2
innodb_log_file_size           = 20M
innodb_file_per_table          = 1

wsrep_cluster_address          = gcomm://10.0.0.4,10.0.0.5,10.0.0.6
wsrep_provider                 = /usr/lib64/galera3/libgalera_smm.so

#wsrep_slave_threads            = 8
wsrep_cluster_name             = Cluster
wsrep_node_address=10.0.0.4

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cret"
default_storage_engine=InnoDB

innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode       = 2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file = /run/mysqld/mysql.pid

!includedir /etc/my.cnf.d
※percona2、percona3の場合は、「wsrep_node_address」を自分のIPアドレスに変更

4.percona1の起動(起動後はMySQLの管理者パスワードを設定すること)
$ sudo systemctl start mysql@bootstrap

5.SST用ユーザーの作成
$ sudo mysql -u root -p
Enter password:
mysql> create user 'sstuser'@'localhost' identified by 's3cret';
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'sstuser'@'localhost';
mysql> flush privileges;

6.percona2、percona3の起動
$ sudo systemctl start mysql

あとは、参照記事の通りSQLを実行して確認できるかと思います。

性能検証は誰かやってるのかなー。
案件で困ってたら弊社へw
http://www.pnop.co.jp/













2015年1月19日月曜日

年明けたけど、Azure SDK for PHP を新しいバージョンのストレージAPIに対応してみる(適当編)

Azureの古いストレージAPI(2012-02-12以前)が削除されるのですが(以下参照)、

http://blogs.msdn.com/b/windowsazurej/archive/2014/08/12/blog-microsoft-azure-storage-service-version-removal.aspx

PHP向けSDKはまだ対応できてないのです。

せっかちな私は、ちょっとした変更で対応してみようと思います。
良い子は正式なSDKが出るのを待ちましょう。

まず、SDKのバージョンを定義してる定数は、「WindowsAzure/Common/Internal/Resources.phpの248行目の「STORAGE_API_LATEST_VERSION」にあります。

https://github.com/Azure/azure-sdk-for-php/blob/master/WindowsAzure/Common/Internal/Resources.php

ここを、最新の「2014-02-14」に変更します。

次に、動作させるバージョンによってはエラーが出るので、WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php」の一部を変更します。
どうもインターフェースのメソッドを全て実装してないっぽいですが ...
42行目のimplements以降を消します。

https://github.com/Azure/azure-sdk-for-php/blob/master/WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php

なんか嫌な感じですが、これでストレージの読み書きはできました。

やっぱり、正式に対応していただきたいです。