2011年12月27日火曜日

mysql-cluster ndb_mgmd 2台構成

サーバ2台でndb_mgmd, ndbd, mysqlを動かした際のメモ

 sv1      sv2
+----------+ +----------+
| ndb_mgmd | | ndb_mgmd |
|  ndbd  | |  ndbd  |
|  mysql | |  mysql |
+----------+ +----------+

*****************************************************

// sv1, sv2共通
# vi /var/lib/mysql-cluster/config.ini

-----------------------------------------------------
# Example Ndbcluster storage engine config file.
#
[ndbd default]
NoOfReplicas= 2
ServerPort = 63132
MaxNoOfConcurrentOperations= 10000
# DataMemory= 1G
# IndexMemory= 64M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512

[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster

[ndb_mgmd]
Id = 1
HostName = sv1.kickitout.net

[ndb_mgmd]
Id = 2
HostName = sv2.kickitout.net

[ndbd]
Id = 11
HostName = sv1.kickitout.net

[ndbd]
Id = 12
HostName = sv2.kickitout.net

[mysqld]
Id = 21
HostName = sv1.kickitout.net

[mysqld]
Id = 22
HostName = sv2.kickitout.net

# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132
-----------------------------------------------------


// sv1 抜粋
# vi /etc/my.cnf

-----------------------------------------------------
[mysql_cluster]
ndb-connectstring = sv1.kickitout.net

[mysqld]
ndbcluster
ndb-connectstring = sv1.kickitout.net

[ndb_mgmd]
config_file=/var/lib/mysql-cluster/config.ini
-----------------------------------------------------


// sv2 抜粋
# vi /etc/my.cnf

-----------------------------------------------------
[mysql_cluster]
ndb-connectstring = sv2.kickitout.net

[mysqld]
ndbcluster
ndb-connectstring = sv2.kickitout.net

[ndb_mgmd]
config_file=/var/lib/mysql-cluster/config.ini
-----------------------------------------------------


*****************************************************

あとはiptablesで該当ポート1186,63132を開けておく
(忘れていてこれにはまった)

起動はndb_mgmd(sv1,sv2) -> ndbd(sv1,sv2) -> mysql(sv1,sv2)で順に行う

2011年12月14日水曜日

gitメモ

git config --add receive.denyCurrentBranch ignore

jsvcメモ

jsvcを必要とする機会があったのでその際のインストールメモ

//最初にopenjdkを準備
# yum install java-1.6.0-openjdk.x86_64 java-1.6.0-openjdk-devel.x86_64

$ wget http://ftp.riken.jp/net/apache//commons/daemon/source/commons-daemon-1.0.8-src.tar.gz
$ tar xzf commons-daemon-1.0.8-src.tar.gz
$ cd commons-daemon-1.0.8-src/src/native/unix/
//configure作成(既にあるけど)
$ ./support/buildconf.sh

//configure
$ CC=gcc44 CXX=g++44 \
CFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mmmx -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mmmx -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2" \
./configure \
--host=x86_64-redhat-linux-gnu \
--build=x86_64-redhat-linux-gnu \
--target=x86_64-redhat-linux \
--program-prefix= \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib64 \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--cache-file=./config.cache \
--with-libdir=lib64 \
--with-java=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/

$ make -j4

//同じ場所にjsvcが作成されるので利用する

2011年11月14日月曜日

D-ITG インストールメモ

訳あってD-ITGを入れる必要があったのでその際のメモ

$ wget http://www.grid.unina.it/software/ITG/codice/D-ITG-2.7.0-Beta2.tgz

$ tar xvf D-ITG-2.7.0-Beta2.tgz

$ CC="gcc" \
GCC="gcc" \
CXX="g++" \
CFLAGS="-march=native -O2 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O2 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CPPFLAGS=-I/usr/lib/x86_64-redhat-linux5E/include \
make

//stropts.hが無いといわれたら…

# yum provides */stropts.h
# yum install compat-glibc-headers-2.5-46.2.x86_64


CPPFLAGS=-I/usr/lib/x86_64-redhat-linux5E/include
を追加して再度makeする

2011年10月12日水曜日

AMFフォーマットからPHPで値を抜き出す方法

AMFファイルから必要な値だけ出す方法がなかなか見つからなかったので調べてみた
Zend FrameworkにはZend_Amfがあり、この中にAMFフォーマットを処理する部分があることを
睨んで調べてみたら簡単にできた

これでUstreamのamfが読めるようになった

$url = "http://cdngw.ustream.tv/Viewer/getStream/1/7811835.amf";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch );
curl_close($ch);

$request = new Zend_Amf_Request();
$request->initialize($result);
var_dump($request->getAmfBodies());

後はdump結果から欲しい値のキーを探して取得するだけ

2011年9月27日火曜日

Ustream Liveの録画メモ

HINATABOCCOを録画した際に、(一部)うまく行ったのをメモ
・CDN(LimeLight)利用時なのでほかは不明
・rtmpdumpを利用
・解析はStreamTransportを利用
(StreamTransport自体はダウンロードできなかった)
・帯域が安定している自宅Linuxサーバより遠隔でダウンロード実施

rtmpdump -v -r "rtmp://ustreamvip.fc.llnwd.net:1935/ustreamvip/ustreamvip_llnw_live_1_76452776" \
-s "http://cdn1.ustream.tv/swf/4/viewer.381.swf" \
-p "http://www.ustream.tv/channel/hinatabocco1" \
-o HINATABOCCO5.flv

これで録画は可能

-rにはStreamのURL(StreamTransportで解析可能)
-sにはPlayerUrl(不要?)
-pには視聴していたchannelURL(不要?)

あとはnohupしておくべきだったと後悔
(この後PCが切断→SSHセッション断→dump失敗に)

----------------------------------------
[チラシの裏]
これうまく使って録画サーバできないかな…
・外出先等でUstLiveが見たくても見れない時に
 後から録画
・でも著作権の保護観点から予約した人しか見れない
・同じ番組を予約した人がいたら、一番最初の人が予約した動画を共有
・できれば友人間だけは録画した動画を共有
 (URLで共有するとか)
・一週間ほどで削除

・同じチャンネルでも時間によって放送してたり、StreamURLが変わったりする
 どうやってそれを監視するか

結構Ustreamのみたい番組が多いのだが、
忘れてたりそもそも見れる環境じゃない(場所or勤務中)だとすごく困る
ソフトを使うにしても自宅のPCじゃないといけないので、
なんとか外出先からも録画できるといいなと思う

2011年8月11日木曜日

z_X10_audio_stutter_fix

z_X10_audio_stutter_fix.zipを手に入れたのでその時のメモ

> adb shell
$ su -
//ここでandroidでroot権限を許可させる

# mount -o remount,rw /dev/block/mtdblock3 /system

# cd /system/lib/
# cp -p libaudio.so libaudio.so.org
# cp -p libaudioflinger.so libaudioflinger.so.org
# cp -p libaudiopolicy.so libaudiopolicy.so.org
# cp -p libmedia.so libmedia.so.org

# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudio.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudioflinger.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudiopolicy.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libmedia.so /system/lib/

// mount -o remount,ro /dev/block/mtdblock3 /system
// roに戻せないので再起動

これで音質良くなるのだろうか…

2011年5月29日日曜日

Muninでnginxを監視するためのメモ

プラグインがあるので導入

/usr/share/munin/plugins
wget http://exchange.munin-monitoring.org/plugins/nginx_status/version/3/download -O nginx_status
wget http://exchange.munin-monitoring.org/plugins/nginx_request/version/2/download -O nginx_request
wget http://exchange.munin-monitoring.org/plugins/nginx_vhost_traffic/version/2/download -O nginx_vhost_traffic
chmod 755 nginx_*

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/nginx_request .
ln -s /usr/share/munin/plugins/nginx_status .
ln -s /usr/share/munin/plugins/nginx_vhost_traffic .

service munin-node restart

2011年5月8日日曜日

MySQL + HandlerSocket Pluginのメモ

//HandlerSocket

yum install -y git
cd /usr/local/src
git clone http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL.git
cd HandlerSocket-Plugin-for-MySQL

./autogen.sh

CC="gcc44" \
GCC="gcc44" \
CXX="g++44" \
CFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
./configure \
--host=x86_64-redhat-linux-gnu \
--build=x86_64-redhat-linux-gnu \
--target=x86_64-redhat-linux \
--program-prefix= \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib64 \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-mysql-source=/usr/local/src/mysql-5.5.8 \
--with-mysql-bindir=/usr/bin \
--with-mysql-plugindir=/usr/lib64/mysql/plugin

make -j4
sudo make install

vi /etc/my.cnfに下記を追記
[mysqld]
handlersocket_port = 9998
# handlersocketが接続を受け付けるポート(参照系リクエスト用)
handlersocket_port_wr = 9999
# handlersocketが接続を受け付けるポート(更新系リクエスト用)
handlersocket_address =
# handlersocketがバインドするアドレス(空のままでOK)
handlersocket_verbose = 0
# デバッグ用
handlersocket_timeout = 300
# 通信タイムアウト(秒)
handlersocket_threads = 16
# handlersocketのワーカースレッド数
thread_concurrency = 128
# handlersocketが幾つかのスレッドを占有するため、大きめの
# 値を指定してください
open_files_limit = 65535
# ソケットを大量に開けるようにするため、大きめの値を指定し
# てください

//プラグインを適用
mysql -uroot -p

mysql> install plugin handlersocket soname 'handlersocket.so';
Query OK, 0 rows affected (0.06 sec)
mysql> show plugins;

// HandlerSocket php
OpenPearにあるのでインストール
# pear channel-discover openpear.org
# pear install openpear/Net_HandlerSocket-alpha

2011年4月28日木曜日

NEC IX2000でTokyo6to4を利用する

家ではルータにIX2105を利用しているが、
そこでTokyo6to4を利用してIPv6環境を構築したのでその際の設定をメモする。
(ix2005,ix2015,ix2025なら利用できると想定)

Tokyo6to4
http://www.tokyo6to4.net/

! WAN(6over4) 側
interface Tunnel0.0
tunnel mode 6-over-4
! Tokyo6to4
tunnel destination 192.88.99.1
! source interfaceは環境に合わせて
tunnel source GigaEthernet0.1
no ip address
ipv6 enable
ipv6 tcp adjust-mss auto
! ACL in
! ipv6 filter ipv6_wan-in 100 in
! ACL out
! ipv6 filter ipv6_wan-out 100 out
no shutdown
!

! LAN側
interface GigaEthernet1:1.1
encapsulation dot1q 1 tpid 8100
auto-connect
ipv6 enable
! ルータに対して6over4のIPアドレスを固定で設定
! 64bit以降は環境に合わせて自由に設定できる
ipv6 address 2002:XXXX:XXXX:0:192:168:1:1/64
ipv6 nd ra enable
ipv6 nd ra min-interval 60
ipv6 nd ra managed-config-flag
ipv6 nd ra other-config-flag
no shutdown
!

6to4アドレス例
printf "2002:%02x%02x:%02x%02x::1\n" 192 0 2 1