2013年8月20日火曜日
2013年8月19日月曜日
プロセスをkillする
select username , sid , serial# from v$session;
で特定し、
alter system kill session '<上記sid>,<上記serial#>';
でシグナル送信。
changePerm.sh
UNIX系OS上でOracleをインストールした場合、基本的にはインストールしたOSユーザでしかSQL*Plus等のユーティリティを実行できない。
別のOSユーザから上記Oracleユーティリティを使いたい時は、
1.Oracleソフトウェアをインストールしたユーザのグループに入れてやる
2.changePerm.shシェルを実行してパーミッションの設定を変えてやる
をしなければならない。と思った。
1番目が一番楽な気がしますが、インフラチームで明確にOSユーザを設定してあると何かと面倒だしプロジェクトのセキュリティポリシー等で引っかかったり…。
なので、そういう場合は2で対処。
どちらも、ユーザの環境変数は設定しなければならない(ORACLE_SIDとかORACLE_BASEとか。PATHもやると便利かな、と)。
changePerm.shは、$ORACLE_HOME/installの下にあったと思います。
Oracleのマニュアルでは、HPか何かの『管理者リファレンス』に記載されていたと思いますがその他は未確認です。
2009-11-06
だいぶ間が空いてしまいました…。
最近はOracleにはあまり触っておらず、SQL ServerとMySQLが多いです。
SQL Serverは、bcpとかosqlとか意外と便利に思う今日この頃。
ネットワーク越しのエクスポート/インポート
Windows認証を用いてローカルサーバのSQL Server 2005のテーブルデータをエクスポートし、
ネットワーク越しに別サーバのSQL Serverのテーブルにインポートする一例です。
諸々環境依存の所はありますが、その辺がクリアになっているとコマンドプロンプト上のみからで行えます。
bcp <データベース名>.<スキーマ名>.<テーブル名> out "<フルパスでファイル名>" -n -T
bcp <データベース名>.<スキーマ名>.<テーブル名> in "<フルパスでファイル名>" -n -S <インポートしたいサーバのIPとかホスト名> -T
テーブルデータを消したい場合は、同様にコマンドプロンプトから以下のようにしたり。
osql -E -S <サーバ名(ローカルなら[localhost])> -d <データベース名> -Q "TRUNCATE TABLE <スキーマ名>.<テーブル名>"
トランザクションログを消したい場合は、、、
osql -E -S <サーバ名(ローカルなら[localhost])> -d <データベース名> -Q "BACKUP LOG <データベース名> WITH TRUNCATE_ONLY"
データベースのエディションによっては使えない?
bcpコマンド及びosqlコマンドの詳細オプションはMSDNを参照してください。
osqlコマンドは未来のバージョンでは削除予定らしいので、sqlcmdコマンドの使用が推奨みたいです。
大文字小文字
MySQLではcharとvarcharの、(少なくとも半角英数字の。それ以外は試していません)大文字小文字を
区別してくれないようです。
ただし、「BINARY」属性を付けると大文字小文字を区別してくれます。
マニュアルを読みましょうって話だと思いますが…こういう仕様なんですねぇ…。
「show create table」コマンドを用いるとテーブルの違いが明らかになりますが、
「desc」コマンドでは属性情報までは出ないようです。
例:
C:\xampp\mysql\bin>mysql -u ***** -p ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.37 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test;
Database changed
mysql>
mysql>
mysql>
mysql> create table test_table_01 (
-> name varchar(10)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql>
mysql> insert into test_table_01 values ('AAA');
Query OK, 1 row affected (0.06 sec)
mysql> insert into test_table_01 values ('aaa');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test_table_01\G;
/*************************** 1. row ***************************
name: AAA
/*************************** 2. row ***************************
name: aaa
2 rows in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql> select * from test_table_01 where name = 'aaa'\G;
/*************************** 1. row ***************************
name: AAA
/*************************** 2. row ***************************
name: aaa
2 rows in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql> select * from test_table_01 where name = 'AAA'\G;
/*************************** 1. row ***************************
name: AAA
/*************************** 2. row ***************************
name: aaa
2 rows in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql>
mysql>
mysql> show create table test_table_01\G;
/*************************** 1. row ***************************
Table: test_table_01
Create Table: CREATE TABLE `test_table_01` (
`name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql>
mysql> alter table test_table_01 modify name varchar(10) binary;
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
mysql> select * from test_table_01 where name = 'aaa'\G;
/*************************** 1. row ***************************
name: aaa
1 row in set (0.02 sec)
ERROR:
No query specified
mysql>
mysql>
mysql> select * from test_table_01 where name = 'AAA'\G;
/*************************** 1. row ***************************
name: AAA
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
mysql>
mysql> show create table test_table_01\G;
/*************************** 1. row ***************************
Table: test_table_01
Create Table: CREATE TABLE `test_table_01` (
`name` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
Oracle ORION
Oracle ORIONという、データベースへ疑似的なトランザクションを発生させて
ディスクに関するパフォーマンス情報を提供してくれるツールがあるようです。
http://www.oracle.com/technology/software/tech/orion/index.html
上記からダウンロード可能。
使ったことがないので分かりませんが、ディスクデバイスを設定ファイルに記述
して実行するとシーケンシャルI/OやランダムI/Oを生成してくれるとか。
使ったことがなく、よく分からないので今度遊んでみようと思います…。
バグ?
http://bugs.mysql.com/bug.php?id=23069
MySQLで文字コードをUTF8にしていると、カラムのデータ型がvarcharの時、
1文字で3バイト使用してしまう。
なので、データベースエンジンがInnoDBの場合はPrimary KeyやUnique制約に
指定したカラムのバイト数(文字数)の最大値は255になってしまう。
バージョンが5.1.38ではこの現象が起きますが、最新のは調べてないので再現
するか不明です。
対応としては、
- カラムのバイト数(文字数)を減らす。
- 文字コードを変える。
- データベースエンジンを変える。
- そもそもインデックスを張らない。
- ソースを編集して再コンパイル(?)。
辺りなんでしょうか…。
営業電話
たまにOracleさんからお電話頂くんですが、これって営業として入社した方の研修の一環なんでしょうか?
大体が新規にOracleを導入する予定がありますか?みたいな感じなんですが、皆さん非常にたどたどしくて…。
何がどうとか言うわけじゃないのですが、なんとなく気になったもので。
今日は『Ask Tom』に行ってきます!!
非常に楽しみです。
Statspack
パフォーマンスが悪化しているシステムの原因がSQLにある事を前提とした、Statspackを用いたチューニング概要資料を会社の勉強会の為に作成中…。
最近知ったのですが、Oracle 9i辺りから使える機能に「仮想インデックス」というものがあるのですね。
セグメントは使用しないが、メモリ上には乗っててalter session文で隠しパラメータをセットすると使用できるっていう。
ちょっとインデックス張って効果を試したいって場合には有用かもしれません。
詳しい情報は「virtual index」とかでググると出てきます。
自分用メモ
全部自分用メモなんだけれど。
PostgreSQLのロケールの設定がイケてないとLIKEでの前方一致検索時にインデックスが効かない。
データベース名は「test001」。
データベース作成時にはロケールの指定を行わない。
OSはWindows XP。
インデックス作成時にtext_pattern_opsを付けてやることで前方一致の時もインデックスが使用される。
データベース作成時にロケールを「C」とかにしていれば上記オプション(?)は必要ない。
以下、ちょっとしたお試し。
test001=#
test001=# select version();
version
-------------------------------------------------------------
PostgreSQL 8.4.3, compiled by Visual C++ build 1400, 32-bit
(1 行)
test001=#
test001=#
test001=#
test001=# select name, setting, context from pg_settings where name like 'lc%';
name | setting | context
-------------+-----------------+-----------
lc_collate | Japanese, Japan | internal
lc_ctype | Japanese, Japan | internal
lc_messages | Japanese, Japan | superuser
lc_monetary | Japanese, Japan | user
lc_numeric | Japanese, Japan | user
lc_time | Japanese, Japan | user
(6 行)
test001=#
test001=#
test001=#
test001=# create table locale_test1(name varchar(10));
CREATE TABLE
test001=# create table locale_test2(name varchar(10));
CREATE TABLE
test001=#
test001=#
test001=# create index idx_test1 on locale_test1(name);
CREATE INDEX
test001=#
test001=# create index idx_test2 on locale_test2(name text_pattern_ops);
CREATE INDEX
test001=#
test001=#
test001=# \d locale_test1
テーブル "public.locale_test1"
カラム | 型 | 修飾語
--------+-----------------------+--------
name | character varying(10) |
インデックス:
"idx_test1" btree (name)
test001=#
test001=#
test001=# \d locale_test2
テーブル "public.locale_test2"
カラム | 型 | 修飾語
--------+-----------------------+--------
name | character varying(10) |
インデックス:
"idx_test2" btree (name text_pattern_ops)
test001=#
test001=#
test001=# CREATE FUNCTION test1() RETURNS INTEGER AS
test001-# $$
test001$# DECLARE
test001$# CNT INTEGER;
test001$# BEGIN
test001$# FOR CNT IN 1..1000 LOOP
test001$# INSERT INTO locale_test1 VALUES (CNT);
test001$# END LOOP;
test001$# RETURN CNT;
test001$# END;
test001$# $$
test001-# LANGUAGE plpgsql;
CREATE FUNCTION
test001=#
test001=#
test001=#
test001=#
test001=# SELECT test1();
test1
-------
0
(1 行)
test001=#
test001=# select count(*) from locale_test1;
count
-------
1000
(1 行)
test001=# select * from locale_test1 limit 10;
name
------
1
2
3
4
5
6
7
8
9
10
(10 行)
test001=#
test001=#
test001=# explain analyze
test001-# select * from locale_test1 where name='1';
QUERY PLAN
---------------------------------------------------------------------------------------------------
--------------------
Index Scan using idx_test1 on locale_test1 (cost=0.00..8.27 rows=1 width=3) (actual time=0.043..0
048 rows=1 loops=1)
Index Cond: ((name)::text = '1'::text)
Total runtime: 0.112 ms
(3 行)
test001=#
test001=#
test001=# explain analyze
test001-# select * from locale_test1 where name like '100%';
QUERY PLAN
---------------------------------------------------------------------------------------------------
---
Seq Scan on locale_test1 (cost=0.00..17.50 rows=1 width=3) (actual time=0.081..0.545 rows=2 loops
1)
Filter: ((name)::text ~~ '100%'::text)
Total runtime: 0.607 ms
(3 行)
test001=#
test001=#
test001=#
test001=#
test001=#
test001=# CREATE FUNCTION test2() RETURNS INTEGER AS
test001-# $$
test001$# DECLARE
test001$# CNT INTEGER;
test001$# BEGIN
test001$# FOR CNT IN 1..1000 LOOP
test001$# INSERT INTO locale_test2 VALUES (CNT);
test001$# END LOOP;
test001$# RETURN CNT;
test001$# END;
test001$# $$
test001-# LANGUAGE plpgsql;
CREATE FUNCTION
test001=#
test001=#
test001=#
test001=# SELECT test2();
test2
-------
0
(1 行)
test001=#
test001=# select count(*) from locale_test2;
count
-------
1000
(1 行)
test001=#
test001=# select * from locale_test2 limit 10;
name
------
1
2
3
4
5
6
7
8
9
10
(10 行)
test001=#
test001=#
test001=#
test001=#
test001=# select * from locale_test2 where name='1';
name
------
1
(1 行)
test001=# explain analyze
test001-# select * from locale_test2 where name='1';
QUERY PLAN
---------------------------------------------------------------------------------------------------
--------------------
Index Scan using idx_test2 on locale_test2 (cost=0.00..8.27 rows=1 width=3) (actual time=0.031..0
035 rows=1 loops=1)
Index Cond: ((name)::text = '1'::text)
Total runtime: 0.095 ms
(3 行)
test001=#
test001=#
test001=#
test001=# explain analyze
test001-# select * from locale_test2 where name like '100%';
QUERY PLAN
---------------------------------------------------------------------------------------------------
--------------------
Index Scan using idx_test2 on locale_test2 (cost=0.00..8.27 rows=1 width=3) (actual time=0.040..0
052 rows=2 loops=1)
Index Cond: (((name)::text ~>=~ '100'::text) AND ((name)::text ~<~ '101'::text))
Filter: ((name)::text ~~ '100%'::text)
Total runtime: 0.118 ms
(4 行)
test001=#
Data Guardフィジカルスタンバイ小ネタ
Oracleでフィジカルスタンバイのデータガード構成を取っているとき、プライマリ側でログイン時にパスワードを失敗したログがスタンバイ側に適用されると、スタンバイ側ではそのログインに失敗したユーザでアクセスできない。
これは、ログイン成功時にパスワード失敗入力回数を0に戻す処理が走るが、スタンバイ側が読み取り専用になっているので0に戻せず怒られてしまうことによる。
同様に、expdp/impdpも読み取り専用のDBに対して実行した場合内部のデータを更新しようとするが怒られて出来なかったりする。
ログインに関するものは、プライマリ側で正しくログインし、そのログをスタンバイ側に適用してやることで解決。
expdp/impdpについては解決策があるのか不明。
どなたか知ってたら教えて下さい。
ちょっと仕事が落ち着いたので11月はいくつか勉強会に参加予定。
■gumiStudy#6(11/2)
Scala + Lift + Cassandraということで、ScalaをHello,Worldしたぐらいしか触っていないけど参加。
■Hadoopを中心とした分散環境での開発方法論・モデリング・設計手法等についての座談会(11/19)
■全文検索エンジンgroongaを囲む夕べ #1(11/29)
補欠だけど。
全文検索エンジンというか全文検索システムというと、以前ちょっとしたCMSを作った時にNamazuを使用した記憶が。
OracleだとOracle Textっていうのがあって、中間一致でも速度が出るようなインデックスを張れたりしますね。
(http://blogs.oracle.com/oracle4engineer/column/technical/022292.html)
アルゴリズム的なお話が聞ければいいなと思ってます。
補欠だけど。
gumiStudyに行ってきた。
MessagePackのお話を聞いてきました。
会社用のツールに使いたいなーと思っていて、公開されてるスライドやWikiで予習しコードもちょろっと読んでいたので話の内容にはついていけたかなと思う。
お話を聞けば聞く程に素晴らしい設計で、非常に勉強になりました。
最近興味のあるソフトウェアはだいたいC++だけど今まできちんと勉強してきていないので、ちゃんとやらねば…との思いを強くした。
色々行ってきた。
- Hadoop座談会(11/19)
日にちが空いてしまいましたが。
モバイルエージェントのデモに胸熱でした。
データのあるところに移動して処理をするという考え方はデータが分散され、かつ並行に処理を行わなければならないような環境では非常に効率的な考え方に感じた。
Hadoopを全く勉強していないので分からないが、今までの逐次的なものすごく時間のかかる夜間バッチみたいなのがRDBMSなストレージ側の変化と処理を実行するプログラム側の変化とからだいぶ変わっていきそうに思えた。
- hbstudy(11/26)
BPStudyで使用されたスライドと今回のhbstudy用に公開された事前版のスライドを見ていたせいか、お話を集中して聴く事ができた。
僕はQEMUは「amazon:30日でできる! OS自作入門」で知りました。
去年振返、今年目標
年明け後に記事書いて下書き保存したら消えてた。
保存しておいてくれる日数って決まってるのかな?
今更ながら去年の振り返りと今年の抱負。
去年は勉強会の存在を知って参加し始める事となった。色んな人の話を聞いて自分の技術力の低さを実感したり…。
未経験でこの業界に入って丸3年が経過、それなりに仕事出来てるかと思い始めていたけれどまだまだなんだと改めて思い知らされ。
今年は新しい技術情報へのアンテナを高めつつ、基礎的な知識を体系的に学んで理解を深めていきたい。
仕事の方はインフラ系をメインにたまにコード書いたりしていた。
今年はもうちょっと仕事としてもコードを書きたいなぁと思っている。
なので営業も考えていかなければならない。
Linux-HA Japan勉強会に行ってきた。
ブログを更新するまでが勉強会ということで。
僕の前提知識は、最近Heartbeat2.0.*検証を依頼されて3日触ったぐらいです。
以下、勉強会中に書いたメモ。
1.Pacemakerを使ってみよう
サービス継続できないサーバを強制的にクラスタリソースから排除する。(シャットダウン? or リブート)(フェンシング)
IPMI2.0対応のHW制御ボードなら使える(?)
お互いをフェンシングしてしまうこともあるが、STONITHプラグインを入れると防げる。
デモではXen0のSTONITHプラグイン(?)を使う。
Linux-Ha Japanが作ったツールがある。
yumでインストールするとユーザが追加される。
SFEX(共有ディスク排他制御機能)
フェイルカウントを0にしないとフェイルオーバーしてもリソースが上がらないようになっている。
STONITHの機能によって、スプリットブレイン発生時にはリソースがあった方が生き残る。
corosyncにシフトしていきたいと思っている。
2.リソースエージェントの中身を見てみよう
OCFスクリプトを適切に書き換える必要あり。
OCFはバージョンによってかなり違うのできちんと内容を見る必要がある。
$OCF_CHECK_LEVELの値でステータスのチェック方法とかはだいぶ変わる。
以上メモ。
auto_failbackについて「設定できなくなりました?」みたいな質問があったと思うのですが、以下の注のところにちょろっと書いてあります。
auto_failback命令 - フェイルバックポリシーの設定
設定するにはcib.xmlの<crm_config>の中に
<nvpair id="default_resource_stickiness" name="default_resource_stickiness" value="-INFINITY"/>
とか書いてやる必要があるかと思われます。
自分が検証した時は、なんか上手くいったりいかなかったりで原因を特定することなく時間切れとなりました。。
あとHeartbeat2系だと「STONITHは上手く動かないから設定しない方が多重障害時にお互いぶっ壊れるとかいうリスクは無くせるよ」みたいな記述をどっかで見かけたのですが、この記述が真ならPacemaker(ってかHeartbeat3)ではちゃんと動くようになったんですかね。
cib.xmlのスコアとかノードの優先順位の設定とかharesources2cib.pyって今も使えるのかとか2系でも2.0と2.1でだいぶ違うが変更点一覧とかあるんですかとか2系のまとまったドキュメントとかパラメータ一覧とかあるんですかとかcrm_verifyのcib.xmlチェック方法とか色々訊きたい事があったけれど帰社する予定だったので懇親会には参加せず。
結局は帰社しなくていいと言われたので、まっすぐ帰ってサッカー観ましたが。
総括としては、STONITH周りのお話と対話型cib.xml設定インターフェイスのデモを見れたところが「おぉっ!」って感じでした。
上で列挙した訊きたかった事は、ソースやスクリプト読んだりデバックモードにしてログをtail -fしてれば分かることなんだろうけど、僕みたいな利用者視点だと結構敷居は高いかなー。正直。
PyCon mini JPに行ってきた。
1/29(土)に楽天タワーで開催されたPyCon mini JPに行ってきました。
https://sites.google.com/site/pyconminijp/
水曜の夜に39℃超の熱が出た時はインフルエンザだと思い欠席連絡しようかと思ったけれど、普通(?)の風邪で熱も下がったので参加してきた。
聞いたお話の中で一番印象に残ったのは
「テンプレートエンジンの高速化と失敗談について」
https://sites.google.com/site/pyconminijp/talks#TOC-1
今までほぼ関係することがなく、興味が湧いたお話は
・Sphinx(ちゃんと使ったことない)
・翻訳プロジェクト
・ハードウェア制御
翻訳に関しては、Python関連だけでなくOSS系のプロダクトだとどうしても日本語の情報が少ないので何らかの形で貢献できればと最近強く思う。
僕は論文を読まなきゃならない環境にいたことがあるので英語にはそんなに抵抗ないけど、同僚を見てると本当に英語が嫌で嫌で仕方ないって人もいるし。
講演、LTされた皆さん、そして運営の皆さんお疲れ様でした。
次回は夏頃に開催したいということでしたが、何かお手伝い出来る事があれば積極的に関わりたいなと思います。
あと先日の帰ってきたPython Workshopに参加した時も思ったが、インフラ系の人がほとんどいないような気が。
最近だとPerlは入ってなくてもPythonは標準で入ってたりするし、色々とインフラ系なツールもPython製が多いし…という事でその辺の話を自分が出来るようになりたいなと思った。
ちなみにUbuntu 10.10(の標準インストール状態からちょろっと変更してる)のコマンドでPython製と思われるものをテキトーに調べた結果は以下。
aptd
computer-janitor
computer-janitor-gtk
gconf-schemas
hpssd
ufw
update-apt-xapian-index
update-python-modules
update-software-center
2to3
2to3-2.6
X11
add-apt-repository
alacarte
apport-cli
apport-unpack
apt-add-repository
apt-mark
aptdcon
apturl-gtk
axi-cache
byobu-config
byobu-select-session
check-language-support
couchdb-dump
couchdb-load
couchpy
dh_python2
do-release-upgrade
dviasm
fontconfig-voodoo
gmenu-simple-editor
gnome-about
gnome-codec-install
gnome-language-selector
gsettings-schema-convert
gst-install
gstreamer-codec-install
gwibber
gwibber-accounts
gwibber-error
gwibber-poster
gwibber-preferences
gwibber-service
hp-align
hp-check
hp-clean
hp-colorcal
hp-firmware
hp-hpdio
hp-info
hp-levels
hp-makeuri
hp-pkservice
hp-plugin
hp-probe
hp-query
hp-scan
hp-setup
hp-testpage
hp-timedate
hp-unload
invest-chart
jockey-gtk
jockey-text
lsb_release
mako-render
manhole
mktap
nvidia-detector
ods-server
onboard
onboard-settings
pdb
pdb2.6
pitivi
protoc
purple-remote
purple-url-handler
py3_compilefiles
py_compilefiles
pycentral
pyclean
pycompile
pydoc
pydoc2.6
pygettext
pygettext2.6
pyhtmlizer
pyversions
rdfpipe
session-installer
software-center
software-properties-gtk
spd-conf
tap2deb
tap2rpm
tapconvert
trial
twistd
u1sdtool
ubuntu-support-status
ubuntuone-launch
ubuntuone-preferences
unattended-upgrade
unattended-upgrades
update-gconf-defaults
update-manager
usb-creator-gtk
xml2po
RedHatかCentOSで調べないとなんか微妙な気が…。
明日結果を載せるかも。
ちなみに同OSでPerlだと以下。
aa-audit
aa-autodep
aa-complain
aa-enforce
aa-genprof
aa-logprof
aa-status
aa-unconfined
addgroup
adduser
apparmor_status
aspell-autobuildhash
audit
autodep
complain
cups-genppdupdate
delgroup
deluser
dpkg-preconfigure
dpkg-reconfigure
enforce
foomatic-addpjloptions
foomatic-cleanupdrivers
foomatic-extract-text
foomatic-fix-xml
foomatic-kitload
foomatic-nonumericalids
foomatic-preferred-driver
foomatic-printermap-to-gutenprint-xml
foomatic-replaceoldprinterids
genprof
install-docs
install-sgmlcatalog
ispell-autobuildhash
logprof
pam-auth-update
pam_getenv
popularity-contest
pppconfig
pptpsetup
remove-default-ispell
remove-default-wordlist
select-default-ispell
select-default-wordlist
sensors-detect
unconfined
update-binfmts
update-catalog
update-default-aspell
update-default-ispell
update-default-wordlist
update-dictcommon-aspell
update-dictcommon-hunspell
update-inetd
update-locale
update-mime
update-openoffice-dicts
update-pangox-aliases
update-rc.d
update-rc.d-insserv
update-xmlcatalog
validlocale
GET
HEAD
POST
X11
a2ping
aspell-import
bogoupgrade
bogoupgrade-bdb
c2ph
c_rehash
chkdupexe
ckbcomp
compose
config_data
corelist
cpan
cpan2dist
cpanp
cpanp-run-perl
debconf
debconf-apt-progress
debconf-communicate
debconf-copydb
debconf-escape
debconf-set-selections
debconf-show
defoma
defoma-app
defoma-font
defoma-hints
defoma-id
defoma-subst
defoma-user
dh_bash-completion
dh_installdefoma
dh_installtex
dh_installxmlcatalogs
dh_pycentral
dh_pysupport
dirsplit
dprofpp
e2pall
edit
enc2xs
find2perl
findhyph
findsmb
foomatic-compiledb
foomatic-configure
foomatic-datafile
foomatic-ppd-options
foomatic-ppd-to-xml
foomatic-ppdfile
foomatic-printjob
foomatic-searchprinter
gdialog
geteltorito
getnonfreefonts
getnonfreefonts-sys
gnome-terminal.wrapper
grog
gst-visualise-0.10
h2ph
h2xs
helpztags
instmodsh
isohybrid.pl
ispell-wrapper
latex2man
libnetcfg
lss16toppm
lwp-download
lwp-dump
lwp-mirror
lwp-request
lwp-rget
make_method
md5pass
mkdiskimage
mkjobtexmf
mtrace
pdfcrop
perlbug
perldoc
perlivp
perlthanks
piconv
pkfix
pkfix-helper
pl2pm
pod2html
pod2latex
pod2man
pod2text
pod2usage
podchecker
podselect
ppmtolss16
prename
prove
psed
pstruct
ptar
ptardiff
pxelinux-options
rename
rpdfcrop
run-mailcap
s2p
see
select-default-iwrap
sensors-conf-convert
sha1pass
shasum
splain
syslinux2ansi
texcount
texdiff
texdirflatten
texdoctk
texloganalyser
ucfq
w3mman
x-terminal-emulator
xpath
xscreensaver-getimage-file
xscreensaver-getimage-video
xscreensaver-text
xsubpp
chkconfig
ま、まぁ現状だとね…。
今後
募金、節電以外に何かないかと思い東北地方の宿泊施設や通販を探してみた。
当然、時期は今じゃなく、半年、一年後にでもお金を使えれば。
ササニシキ・ひとめぼれ通販サイト
食材の宅配・通販「みんなの産直」
http://watagonia.com/food/index.html
愛情倶楽部
http://www.aijyouclub.com/index.html
e-お米通販
通販一番
通販.ne.jp
株式会社中野グループ
http://www.nakano-group.jp/index.htm
プライフーズ株式会社
(株)マエダ
株式会社ユニバース
紅屋商事株式会社
マルヨ水産株式会社
八戸缶詰企業グループ
http://www.hachikan.co.jp/index.htm
さくら野百貨店
イオンスーパーセンター株式会社
http://www.aeonsupercenter.co.jp/index.html
株式会社マイヤ
http://www.maiya.co.jp/index.html
志戸平温泉 株式会社
http://www.shidotaira.co.jp/index.html
新鉛温泉 結びの宿 愛隣館
http://www.airinkan.com/index.html
株式会社やまや
http://www.yamaya.jp/index.html
株式会社ジー・テイスト
株式会社一の坊
株式会社一ノ蔵
服部コーヒーフーズ株式会社
http://www.hattori-cf.co.jp/index.html
株式会社ジクト(株式会社アトム)
http://www.atom-corp.co.jp/index.php
株式会社ウジエスーパー
http://www.ujiesuper.com/index.html
株式会社わらび座
株式会社ナイス
http://www.nices.co.jp/index.html
株式会社ソユー
株式会社タカヤナギ
http://www.e-takayanagi.com/index.php
河北町商工会
http://www.kahoku-shokokai.jp/index.html
うめや
http://www.umeya-m.jp/index.html
日東ベスト株式会社
株式会社マルハチ
佐藤株式会社
郡山シティホテル
http://www.niraku.co.jp/hotel/
スーパーマルト
どーでもいい小ネタ
SQL*Plusにて、「-S」オプション時の挙動が9iと10g以降で違う。
ナニが違うかというと、connect後、9iでは「Connected」の文字が出力されるが10g以降だとされない。
クックパッド×サイバーエージェント合同勉強会
行ってきました。
入るとまずはキッチンどーん!
後ろから始終調理音が聞こえてくる勉強会は初めてでした。
内容
OpenStack
無知だったので勉強になりました。
AWSとの差異や利点はあまり分からなかったけれど、AWSが最大公約数的な形で機能拡張していくとのことなので、色々面白そうな機能を独自路線で作っていってくれれば面白いかも?
あとPython触ってる端くれとしてはGUIがDjangoで出来てるってのもいい感じ。
以下、メモ。
プライベートクラウドをやってみたかった。
Cactusが現行バージョン
AWSとの機能比較
ロードバランシングはない
Cloud ControllerによってNovaプロセスを動かす。
デフォルトのハイパーバイザーはKVM
NW構成
FlatManaget
FlatDHCPManager
VLANManeger
novaコマンド
インスタンス起動・停止
スナップショットの作成
とか
euca2oolコマンド
Pythonで出来てる
novaコマンドとほとんど々ことができる
CloundControllerが停止してもComputeNOでとインスタンスに影響はない
ComputeNodeが停止すると稼働状況が伝わらない
デフォルトではvirtioを有効にして起動される
DjangoベースのGUIが付属している
ElasticFoxでも管理できる
WebAPIはある
CloudControllerは冗長化できる?
→出来るはず
スケールアウトする?
→多分。Eucalyptusがスケールしないから作ったという話なので
AmebaPicoとAWSについて
AmebaPiggの海外版?のAmebaPicoでのAWS運用のお話。
ZooKeeperを触ったことがないのでちょっと調べたところ、以下のページが勉強になりました。(日本語
MongoDB、ちゃんと勉強しないとな…と思いました。
以下、メモ。
サーバ構成(全部AWS
キャッシュが効く静的データはCloudFront(CDN
細かい大量のコマンド独自のバイナリプロトコル(Socketサーバで受ける
分散Lockサーバ(ZooKeeper
キャッシュサーバ(memcached
DB(MongoDB
ログ集計サーバ(ElasticMapReduce
とかとか
EBSにバックアップ
Socketサーバ
ノンブロッキングIO
ID管理サーバ
ユーザIDの発行
UIDと認証機関でのIDの対を管理
Point管理サーバ
ユーザIDにひもづくポイント(サービス内通貨)を管理
ID管理サーバが発行したトークン付きのリクエストで処理
DB
エンティティはバイナリ形式でKeyValueストア可能なインターフェイスを持たせて定義
3台構成のレプリカセットを6シャード
プライマリ・セカンダリ・セカンダリ(on EBS)
Flashについて
クライアントで最初にメインモジュールを読み込み
→必要におうじてサブモジュールをロード
サーバとのイベント部分にはデリゲートインターフェイスを用意
Flashとサーバ側との分業体制をきちんと整備
EC2について
60個ぐらい運用していて、2、3ヶ月に一回くらいで落ちる(バージニアだから?
落ちたり特定ポートが死んだらリブート
落ちやすいので、冗長性をきちんと確保する
MongoDB
コネクションプールが枯渇する
シャードを増やした
スペックの高いインスタンスを利用
オートバランシングの挙動
そもそもバランシングのされ方が微妙
レプリカセットのコンフィグ情報未反映問題
コンフィグ反映には全台再起動が必要
画像配信システム
ここからはクックパッドの方の発表。
画像変換あたりの技術とかはやったこともなければ聞いたこともないという感じなので知らない単語が多かったす。
発表途中のアンケートでは、Apacheモジュールを書いている人が結構多かったのかな?一番前に座っていたので分かりませんでしたが。
今だとmod_wsgiだし開発止まっちゃったけど、mod_pythonの勉強でもしようかな…と思ったり。
以下、メモ
以前
ユーザの画像をAPサーバでコピー・リサイズしてストレージにぶっこむ
そしてそれを配信
どの画像サイズ、形が適切か?
→新サイズを試すたびに画像を800万枚リサイズ
iPhoneアプリとかに対応するためにまたリサイズ?
リリースも遅くなる
画像800万枚
秒間7000枚のリクエスト
クラウド移行を検討中(EC2へ
NFSをやめたい
現行(TOFUシステム
ストレージには1枚だけ溜め込む
リクエストのたびにリサイズする
URLにサイズと画質をぶっこむ
実装
Apache Module(mod_tofu.so
画像変換
ImageMagick
ストレージ
S3
AKAMAI(CDN)の後ろにELBでバランスしてApache
S3での苦労
APIが変になった
Akamai OR CloudFront?
EC2をオリジンに使用できるようになった(CloudFrontが)けど、
Akamaiの方が速い。
Akamaiのキャッシュ率はそんなに良くない。
昔はVarnishをELBの後ろに置いていたけど、値段が高い。
tofuを増やした方が安いので、今はそうしていて、Varnishは使っていない。
AWS移行にむけて(分散DNS
非常に色々と網羅された内容で素晴らしいお話が聞けました。
あまり深い内容ではなかったけれど、全体像を伝え、そして現行の問題点とそれを改善するために分散DNSを作ったという話の流れは非常によくわかった。
メモを取らずに聴き入っちゃってました。
クックパッドのインフラは今回発表された方がリーダとしてまとめてるのかなぁと思った。
Heartbeatのバージョンが古かったので、そこは上げた方が…とは思いました。
まとめ
今回も色々なお話が聴けて非常に勉強になりました。
僕は仕事的にはこんな大規模Webサービスに関わっていないので、負荷分散やDB周り以外のキャッシュシステム導入みたいなことをやったことがなかった。
で、Squidはやったんですが、Varnishはやったことないのでnginxと組み合わせたWebサイト構築をやってみたいと思います。
あと、LTで聞いたtmpfsは今まであまり気にしたことがありませんでしたが、永続性を必要としないところには使ってみるのもいいかなと思いました。
最後に、クックパッドさん、サイバーエージェントさんありがとうございました!
PyConJP 2011
Pythonistaの夏の祭典PyCon JP 2011が開催されますよっ。
ということで現在CFP募集中です。
詳しくはこちらからどうぞ。
ちなみに…前回のPyCon mini JPに参加して楽しい話をいっぱい聞けたし、なんか出来ないかなーと思い今回はスタッフとして参加してます。
PyCon JP 2011
(一番何もしてない自覚はありますが)スタッフとして参加しました。
当日は会場係ということでサブトラックにずっといました。
世界のKさんの発表の時にディスプレイのトラブルがあった以外は特に大きな問題もなく良かったかな、と。
次回以降はスピーカーとか発表する側でも関われたらなぁと秘かに…。
スピーカー、参加者、スポンサー、その他関係者の皆々様方ありがとうございました!
そしてお疲れさまでした!
(一番何もしてない自覚はありますが)スタッフとして見ていた感じだと、大成功だったと思います。
既に挙げられていることが多いですが、以下自分の関係したとこら辺でのメモ:
良かったこと
- Ustreamを業者さんに頼んだこと(Twitter上でも評判よかったような)
- (サブトラックには)机の上にモニタがあったこと
- サンドイッチの提供、コーヒーブレイクが好評だったような
課題?改善点?
- 司会とタイムキーパーはやはり必要に感じた
- 誘導に関して(何時まで配置するか、看板設置有無とか)
- ぼっち回避策
今後も何かあれば参加したりお手伝いしたいと思います!
本業のインフラ系のお仕事でも何かしたいですね…。
ZABBIX-JP勉強会に行ってきた。
ブログを更新するまでが勉強会ィィィ!
というわけで一ヶ月前の勉強会ですが感想とかを。
発表資料とかはこちら
一つ一つのセッション毎に感想を書こうかなと思っていましたが、まとめて…。
既に記憶が薄れてきているのですが…Zabbix2.0での機能拡張のお話を非常に興味深く聞きました。
2.0でジョブ管理が入るって聞いていたのでその辺のお話が聞ければな~と思っていたのですけど、どうやら入らない?みたい。
SVNから引っ張ってきて1.9系のソースを軽く見てると
- インベントリの機能拡張
- 1ホストに複数IPアドレス(DNS名も?) (「マルチホームホスト」と言うみたいです。)
とかのおかげでhostsテーブルの構造が少し変わってますね。
IPアドレスが1つのhostに複数紐付けられたことにより、hostsテーブルのhostidを外部キーにするテーブルが出来てたり、hostsテーブルのプロファイル、拡張プロファイルのカラムがごそっと別テーブルになってたり。
ちなみに1.8系だと公式ドキュメントにはZabbixAPIからプロファイルの設定は出来ると書かれていませんが一箇所PHPのソースを直せば既にhost.createとかの中では処理することになってるのでZabbixAPIからプロファイルも拡張プロファイルも作成・更新できます。
まぁ2.0になるとまた色々変わりそうですが。
あと注目したのはマップでホストグループ単位で1枚のマップにアイコンを羅列してくれる機能ですかね。
これは僕もお客さんと喋ってて結構よく聞く「欲しい機能」みたいなので。
てかこれと同等(?)の機能を独自に計算してAPI叩いてマップを作る、、みたいなのを目下実装中で複雑な気持ちになったりしてました。
マップの大きさの制限とか一枚に並べられるアイコンの個数の計算とかは1.9のソースをまだ見てないので今度見ておこうかなーと。
あとは他の発表(「エージェントとSNMPだけじゃないZabbix」)とも関係しますが現在ホストはIPアドレス(DNS名)のどちらも入力なしで作成出来ますがそれが2.0でも出来るのかな…?ってところが気になるところ。
これもソース読めって話なのでそのうち自己レスするかもしれません。
今回はAPIのお話が多かったように思います。
APIは確かに便利なんですが公式ドキュメントが…ちょっと…という感じはみんな思ってるのではないかと。
例えば公式ドキュメントのマップの作成のところ、例の通りに叩いても作れなかったりします。
それは、マップのエレメント作成時に指定するidが、ホストだったらそのホストのhostid、トリガーやマップも同様だったりするのですがその辺の事とかドキュメントだけではよく分からなかったりします。
今のところまとまったサンプル集は無いようなので、もしどなたかのご要望があれば作って公開しようかなーと思います。
最後に、発表者、並びに関係者や会場ご提供、ZABBIX-JPの中の皆々様お疲れ様でした!と共にありがとうございました!
退職します。
4月中旬で退職して次の日から新しい職場となります。
現職は中小のSIerでしたが、これからはWebサービスの企画から運用までをインフラエンジニアという立場で支える仕事になります。
今の会社は初めて社会人となったので(学生が長かったので)色々と良い勉強をさせてもらいました。
最初はPHPやJavaを書いてましたがその後はOracle、ZABBIX等に基本的にインフラエンジニアとして関係しながらPythonでちょっとしたアプリを書いたりもして割と自由に裁量も与えられていたと思います。
ただ仕事を続けていく中で、SIではなく自社でサービスをしていてかつOSSをフル活用!みたいな会社で楽しそうに働く方達を勉強会等でお見かけする姿をとても羨ましく思っていました。
また、景気やエンドユーザの考え方に非常に依存した形でのビジネスのやり方に対して何かしら変えたいなと思って実際に動いたりもしましたががが…といった感じで当然ながら時間も掛かるなぁ、と。
それなら自分のやりたいような事をやってる会社に行こうと思って転職活動を始めました。
もう30だし。そんなに時間も無いと思ったし。自分が伸ばしたいと思ってるスキルを伸ばしやすい環境に身を置いてみたかったし。
というわけで今後とも宜しくどうぞ。
vmodでS3の認証を突破する
とか考えていたら
といわなちゃんさん先生に尋ねると、
なんということでしょう!
というわけで試してみました。
環境はVirtualBox上で
- CentOS 5.6(x86_64)
- Varnish 3.0.0
- libvmod-awsrest
という感じです。
公式RPMからふわっとインストールするのではなく今回試したようにrpmbuildとかやりだすと3.0.2ではどハマりして泣きそうになったので3.0.0で検証しました。
通常S3にマネジメントコンソールからファイルをアップロードすると、自身しかOpen/Downloadは出来ません。
EveryoneにOpen/Downloadを許可する設定を追加してもいいのですが、高貴な恥じらいの精神をもった紳士淑女には抵抗があるかと思われます。
そこで
な感じでヘッダを設定してやればいいのですがAWSSecretAccessKeyからハッシュ値を出してやらなければなりません。
それを簡単かつお手軽に可能にしてくれるのが今回いわなちゃんさん先生が作成したlibvmod-awsrestなのです!
それでは早速やってみましょう。
1.ソースをダウンロード
https://www.varnish-cache.org/releases/varnish-cache-3.0.0
2.展開して/usr/src/redhat/SOURCESに
必要なもの(https://www.varnish-cache.org/docs/3.0/installation/install.html#build-dependencies-on-red-hat-centos)は事前に入れておきます。rpm-buildとgccも当然必要です。
docutilsが必要なのでhttp://sourceforge.net/projects/docutils/?source=directoryからダウンロードして展開し
python setup.py install
してあげます。
3.RPM作成
とりあえずRPMだけ作成したいので、ソースディレクトリ内のredhatディレクトリから
rpmbuild -bb varnish.spec
してやります。specファイルのバージョン部分の修正が必要です。
4.インストール
適当にrpm ivhとかして下さい。
5.libvmod-awsrestインストール
mhashが必要なので事前にインストールしておきます。
ダウンロードはhttps://github.com/xcir/libvmod-awsrestから。
VARNISHSRCは/usr/src/redhat/BUILDでconfigure。
6.VCL編集
Varnishが使用するVCLを編集します。Exampleの通りで大体できると思いますが、backendの「.host」に指定するドメイン名にはバケット名を先頭につけてやらないとダメかも?
そんなこんなでAWSAccessKeyId、AWSSecretAccessKeyを記載してlookupしてやります。
お望みの通りファイルは取得できたでしょうか。
おまけ.隠蔽工作
高貴な恥じらいをもつ紳士淑女ならS3を使用していることをちょっと隠したいかもしれません。
S3からのレスポンス内のヘッダをvcl_fetchの中で
unset beresp.http.x-amz-request-id;
unset beresp.http.x-amz-id-2;
等としてやると謎めいた雰囲気をより一層醸し出せるかもしれません。
いわなちゃんさん先生本当にありがとうございました!
おまけのおまけ
Varnish 3.0.2だとvarnishtestでコケまくりました。
使用ポートのレンジを広げてもulimit -nを増やしてもsomaxconnを増やしてもテストの並列度?を1にしても(そもそもそれらが関係あるか分かってませんが)ダメでした。
GlusterFS導入でハマった話
導入方法は検索すれば豊富に出てくると思うので割愛。
軽くハマった話を。
環境は
- 3.2.21-1.32.6.amzn1.x86_64
- gluster関連パッケージは全て3.3.0-1.el6.x86_64
です。
とりあえずテスト用に導入して、良い感じだったので同じサーバにちゃんとした名前にして再作成しようとしたら
$ sudo gluster volume create <ボリューム名> <option> <peer1>:<パス> <peer2>:<パス>
<パス> or a prefix of it is already part of a volume
と怒られ作成できない。
調べてみると
gluster volume delete <ボリューム名>
とボリュームを削除しても属性までは削除してくれず、残ってしまうっぽい。
(参考:https://bugzilla.redhat.com/show_bug.cgi?id=812214)
なので、属性を削除してみる。
$ sudo getfattr -m - -d <パス>
# file: <パス>/
trusted.glusterfs.volume-id=*********************
で確認して
$ sudo setfattr --remove=trusted.glusterfs.volume-id <パス>
で削除。
trusted.gfid も表示された場合はこれも削除
もう一度。
$ sudo gluster volume create <ボリューム名> <option> <peer1>:<パス> <peer2>:<パス>
Creation of volume <ボリューム名> has been successful. Please start the volume to access data.
出来ました。
カジュアルに対応するとこんな感じでしょうか。