技術のご紹介

このブログを購読する

IT開発センターBlog

ALLインクレ日誌ITニュース製品応用事例技術tips技術リリース

jQueryMobile1.0が正式リリース

jQueryMobile
こんにちは。仲沢です。
日経トレンディが選ぶ「2011年ヒット商品ベスト30」が発表されましたが、予想通り1位はスマートフォンでしたね。
そのスマートフォンアプリ開発をサポートするフレームワークとして注目していたjQueryMobile正式版が先日リリースされました。

jQueryMobileはjQueryのUIをベースに開発されたモバイルデバイス向けのフレームワークです。スマートフォンのみならずタブレットデバイスやデスクトップまで幅広いプラットフォームに対してHTML5やCSS3の技術をベースとしたUIを提供することを目的としています。

私も早速jQueryMobileを利用して、スマフォサイトを作ってみました。
多少のお作法が必要となりますが、慣れてくればリッチなUIを持つスマフォサイトを短時間で構築することができます。

HTML5やCSS3といった最新技術はPC向けのブラウザにはまだ対応しきれていない部分が多いので、PC向けサイトに利用することは実質的にはできません。
一方スマートフォンブラウザでは、それらの技術を実装したレンダリングエンジンを採用しているので、HTML5やCSS3をためらわず使うことができます。

新技術を利用したPC向けサイトを作る上でのノウハウを身に付けることにも繋がりますので、jQueryMobileを利用してスマフォサイトを作ってみてはいかがでしょうか?

今後はjQueryMobileを使ったスマフォサイトの作り方もご紹介していきたいと思います。

PAGE TOP

Apacheをrestartしても正常に起動しないときに確かめること

Apacheをrestartしても正常に起動しないときに確かめること

こんにちは、粟野です。

24時間365日、比較的安定して稼働してくれているapacheですが、たまに機嫌が悪くなり再起動が必要になることがあります。
そんな場合はWebサーバの再起動を行うのですが、通常は以下のコマンドで問題なく完了します。

#/etc/init.d/httpd restart

httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

普段はこれだけで再起動が完了してしまうのですが、この手順で正常に起動しない場合はちょっと面倒なことになります。

そこで今回は、そんな時どこから調べていくのかを簡単にご紹介したいと思います。

■statusを確認する
※予め「/etc/init.d/httpd status」等でプロセスIDを調べておくと役に立ちます。

# /etc/init.d/httpd status

httpd (pid  6000) を実行中...

プロセスが正常に起動しているように見えます。
正しく起動していない場合は「httpd は停止しています」「httpd は停止していますがサブシテムがロックされています」「httpd が停止していますが PID ファイルが残っています」と表示されます。

・「httpd は停止しています」の場合
何らかの原因で起動できていません。
設定ファイルが壊れている場合や、間違っている場合が考えられますので、「/etc/init.d/httpd configtest」を実施してみたり、apacheのログファイルを見て原因を探ります。

・「httpd (pid 6000) を実行中…」の場合
pidファイルとプロセスが残っているか既に立ち上がっています。
ブラウザから接続確認等を行なってみます。正しく表示されない場合は、apacheのrootプロセスが正しく終了しなかった、動作が不安定な事が考えられますので、手動でkillしてみます。(但し、再起動前のプロセスIDと同じ場合は再起動されていないという事になります。)

・「httpd は停止していますがサブシステムがロックされています」の場合
何らかの原因で起動しません。「/var/lock/subsys/httpd」にロックファイルが残っている場合もこのエラーになります。
システムに問題のない場合はstartを実施してみると、うまい具合にロックファイルを更新してくれます。

・「httpd が停止していますが PID ファイルが残っています」の場合
システムに問題のない場合はstartを実施してみると、うまい具合にPIDファイルを更新してくれます。

■再起動してみる
対応を実施し、再度再起動してみます。

#/etc/init.d/httpd restart

httpd を停止中:                                            [失敗]
httpd を起動中:                                            [  OK  ]

・起動した場合
対応完了

■起動したメッセージが表示されて実際には起動しない場合
どうしてもプロセスが起動しない場合は、エラーログ「/var/log/httpd/error.log」を確認します。

[Mon Jun 01 00:00:00 20xx] [emerg] (28)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!: Couldn't create accept lock
[Mon Jun 01 00:00:00 20xx] [emerg] (28)No space left on device: Couldn't create accept lock

これらのエラーが記録されている場合は、Apache がセマフォを使いきっていることが考えられます。

セマフォを確認します。

# ipcs -s | grep apache

0x00000000 47415398   apache    600        1
0x00000000 47448167   apache    600        1
0x00000000 47480936   apache    600        1
0x00000000 47743081   apache    600        1

起動していない状態でapacheの表記があることがおかしいので、セマフォを開放するために下記コマンドを実行。

# for semid in `ipcs -s | grep apache | cut -f2 -d" "`; do ipcrm -s $semid; done

これにより、メモリが解放された事を確認します。

# ipcs -s | grep apache

WEBサーバの起動してみます

# /etc/init.d/httpd start

httpd を停止中:                                            [失敗]
httpd を起動中:                                            [  OK  ]

■それでも起動しない場合
初心に戻って、ディスク容量、iノード、メモリの状態などを再度確認します。
この段階で起動させることができないと、本腰を入れて障害対応となりますので今回は割愛します。

以上、apacheが正しく起動できない場合の対応例でした。
Apacheが上手く起動しない場合にお役に立てれば幸いです。

※本内容はCentOS+Apache構成での対応の一例です。参考例としてご参照下さい。作業の前は必ずコンテンツ等のバックアップを取ることをお勧めします。

PAGE TOP

MySQLのレプリケーション機能

title=

こんにちは粟野です。
RDBMSを利用していると、データベースのバックアップや冗長化、負荷分散等が課題になってきますが、冗長化や負荷分散と聞くと「専用の機器が必要」「高度な設計や運用が必要」と考えてしまいます。
MySQLでは「レプリケーション」という機能が標準で利用でき、ある程度の規模までではありますが、これらの問題を比較的簡単に解決することが出来てしまいます。
今回はその、レプリケーション機能を有効にするための設定方法を書いてみたいと思います。
※本内容は新規構築用となります。既にご利用の環境への適用には適していませんのでご注意下さい。
■ サーバ環境
OS: CentOS 5.6 64bit
MySQL: 5.5.16-log
DB1(Master側) IPアドレス: 10.0.0.2
DB2(Slave側) IPアドレス: 10.0.0.3

■ 設定ファイルの編集(DB1での作業)
バイナリログを有効にし「server-id」に他のMySQLサーバのIDと重ならないような正数を設定します。

# vi my.cnf
-----
[mysqld]
log-bin
server-id=1001

■ 接続アカウントの作成(DB1での作業)
MySQLにログインし、接続用アカウントを追加します。
※「ユーザー名」「パスワード」は半角英数字に置き換えて下さい。

mysql> GRANT REPLICATION SLAVE ON *.* TO ユーザー名@10.0.0.3 IDENTIFIED BY 'パスワード';

■ データベースのバックアップ(DB1での作業)
DB2へデータの移動を行うためのアーカイブ作成の際、データベースが更新されないように書き込みをロックします。

mysql> FLUSH TABLES WITH READ LOCK;

現在のバイナリログの状態を確認(ロック中に行います)

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000001 |     1800 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

※「mysqld-bin.000001」「1800」の値は都度異なります。後から利用しますので記録しておきます。

レプリケーション対象のデータベース(テーブル)のアーカイブを作成します。

# cd /var/lib/mysql/
# tar cvf ~/データベース名.tar データベース名

ロックを解除します。

mysql> UNLOCK TABLES;

scp等の方法を利用し、上記で作成した「データベース名.tar」をDB2にコピーします。
※DB2では、ユーザー名、パーミッションを合わせます。

■ 設定ファイルの編集(DB2での作業)
DB2でもバイナリログを有効にし「server-id」をDB1とは違う正数に設定します。

# vi my.cnf
-----
[mysqld]
log-bin
server-id=1002

■ データベースアーカイブの展開(DB2での作業)
DB1から取得したアーカイブを、DB2のデータベース領域で展開します。

# cd /var/lib/mysql
# tar xvf データベース名.tar

MySQLを再起動します。

# /etc/init.d/mysqld restart

■ 接続アカウントの作成(DB2での作業)
MySQLにログインし、DB2からDB1に接続するための各種設定(ホスト名やユーザー名等)を行います。

mysql> CHANGE MASTER TO
        MASTER_HOST='10.0.0.2',
        MASTER_USER='ユーザー名',
        MASTER_PASSWORD='パスワード',
        MASTER_LOG_FILE='mysqld-bin.000001',
        MASTER_LOG_POS=1800;

※「ユーザー名」「パスワード」にはDB1で設定した内容を入力します。

■ レプリケーションの開始(DB2での作業)
レプリケーションを開始します。

mysql> START SLAVE;

■ 動作確認(DB2での作業)
動作状況を確認します。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
   Slave_IO_State: Waiting for master to send event
~
 Slave_IO_Running: Yes
Slave_SQL_Running: Yes
~

正常にレプリケーションが開始されると上記のような値になりますので、select文等を利用しデータが同期されている事を確認します。

詳細は公式サイトを参照下さい。
http://dev.mysql.com/doc/refman/5.1/ja/show-slave-status.html
※利用バージョン(MySQL 5.5)の日本語マニュアルがありませんでしたので、5.1のドキュメントをお知らせします。

以上で設定が完了となります。
既に動いているサービスへの適用は要注意ですが、今後新しく設定する際には、選択肢の1つとして検討しても良いのかもしれませんね。

PAGE TOP