このブログは99%ののほほんと1%のお菓子でできています。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こんちゃ(´・ω・)ノ
今回はnfsマウントについてです。
nfsはサーバ間などでディレクトリを共有したい場合などに用いるものです。
例えば、
・サーバ1からサーバ2の/usr/local/mntディレクトリを参照したい!
・サーバ1とサーバ2で同じ情報を参照して、同期をとりたい!
などといったときに使います。
◆NFSのインストール
・yumでダウンロード
# yum -y install nfs-utils
・OSのisoファイルやCD-Rなどでインストール
◆NFSサーバ側の設定(マウントされる側)
1.NFSマウント設定
# vi /etc/exports
ディレクトリ:NFSクライアント側のIPアドレスなど (権限)
【例】
/usr/local/mnt/ 192.168.100.10/255.255.255.0 (rw)
/usr/local/mnt/ 192.168.100.11/255.255.255.0 (rw)
/usr/local/mnt/ 192.168.100.12/255.255.255.0 (rw)
※(rw)は読み書きOK 、(ro)読み込みOK
2.portmapの起動
【portmap起動】
# /etc/init.d/portmap start
【portmap起動確認】
# ps -ef |grep portmap
3.nfsの起動
【nfs起動】
# /etc/init.d/nfs start
NFS サービスを起動中: [ OK ]
NFS クォータを起動中: [ OK ]
NFS デーモンを起動中: [ OK ]
NFS mountd を起動中: [ OK ]
【nfs起動確認】
# ps -ef |grep nfs
◆NFSクライアント側の設定(マウントする側)
1.マウント
【NFSマウントコマンド】
mount -t nfs 192.168.100.10:/usr/local/mnt/ /mnt/
【マウント確認】
# df -k
192.168.100.10:/usr/local/mnt/ 10079104 1716056 4325088 28% /opt/mnt/
【アンマウント】
# df -k
192.168.100.10:/usr/local/mnt/ 10079104 1716056 4325088 28% /opt/mnt/
# umount 192.168.100.10:/usr/local/mnt/
【自動NFSマウント】
# vi /etc/fstab
・以下を追加
192.168.100.10:/usr/local/mnt/ /opt/mnt/ nfs defaults 0 0
◆まとめ
注意する箇所としては、
・nfsがインストールされていること。
・portmapが起動していること
・pingで疎通確認ができていること。
・ディレクトリ権限、nfs権限に気をつけること。
です。これだけ守れば多分できると思います。
nfsマウントはIT基盤系のお仕事をしている方ならば、
結構お世話になるかなぁと思います。
冗長化などでNASや共有ディレクトリが用意できない場合に、
サーバ間でNFSマウントして代用したりなど用途は色々あると思います。
こんちゃ(´・ω・)ノ
今回はリフレクションについてです。
リフレクションとは、クラスの情報を取得して
クラスの生成やメソッドを利用したりするAPIです。
なかなかJavaの中でも難しいところだったりします。
◆例
public class Sample{
public int getCount(){
return 10;
}
}
【サンプル】通常
Sample sample = new Sample();
int count = sample.getCount();
【サンプル】リフレクション
//インスタンス作成
Object instance = Sample.class.newInstance();
//メソッド取得
Method method = Sample.class.getMethod("getCount", new Class[0]);
//メソッド実行
Integer count = (Integer)method.invoke(instance, new Object[0]);
となります。
「え?なんか色々書いてるし通常のほうが簡単でいいんじゃないか?」
と思うかもしれませんが、
これの重要なところは"文字列でメソッドを取得"しているところです。
文字列指定のため、文字列を引数などで動的に変わるようにするだけで、
動的に実行したいメソッドを決定できるのです。
また「Sample.class」の部分は「Class.forName("Sample")」とも書き換えられるため、
クラスもメソッドも動的に決定できるわけです。
◆リフレクションを使って取得できる情報または処理
・クラス名とクラスのインスタンス
・メソッドとメソッドの実行
・フィールドの名前と値
・コンストラクタ
などなど。まだ色々あると思います。
◆メリッド
リフレクションを使用することにより、
動的に使用するクラスやメソッドを変えることができる。
◆デメリット
・クラスやメソッドが変わるため例外がcatchしずらい。
・実行されるまでどのクラスやメソッドを使用するのかわからないため、処理の流れがわかりにくい。
・インタプリタ実行のため処理速度が遅い。
→ループ文などで何度も呼ばなければ全然気にならない程度。
◆使用されている機能
一般的なプログラミングではあまり使用しませんが、
StrutsなどのWebアプリケーションのフレームワークなどで多く使用されています。
こんちゃ(´・ω・)ノ
今回は共通化。
機能の共通化とも言えるかな。
プログラミングするとき、
同じような機能を何度も書いていませんか?
【例】共通化前
public class Sample{
private static final String METHOD1 = "メソッド1";
private static final String METHOD2 = "メソッド2";
public static void main(String[] args){
Sample sample = new Sample();
sample.method1();
sample.method2();
}
public void method1(){
System.out.println(METHOD1);
}
public void method2(){
System.out.println(METHOD2);
}
}
【例】共通化後
public class Sample{
private static final String METHOD1 = "メソッド1";
private static final String METHOD2 = "メソッド2";
public static void main(String[] args){
Sample sample = new Sample();
sample.methodPrint(METHOD1);
sample.methodPrint(METHOD2);
}
public void methodPrint(String str){
System.out.println(str);
}
}
このように引数で表示するものを変えるようにした。
◆メリット
・修正箇所が減少する。
・問題が発生した場合に、参照する場所が少なくなる。
・コーディング量が減少する。
◆デメリット
・メソッド名に意味固有の意味を持たせることができない。
→定数名や変数名、メソッド名である程度意味はわかる。
・引数によって条件文などを使用するケースが多くなる。
◆まとめ
デメリットもあるにはあるが、そこまでのものではない。
それよりもメリットのほうが価値が高い。
システムの運用面や修正面などで共通化はかなり重要である。
よくDAOとかで同じようなメソッドを作成するが、
中に条件文を用いて共通化したほうがいいのか、
しないほうがいいのか検討が必要。
また、開発だとクラス設計書などもあって、
共通化しないと設計の修正部分も多くなる。
「一度書いたソースは二度書かない」
こんちゃ(´・ω・)ノ
よくjavaプログラムの上のほうに
private static final NUMBER = "1"
などとprivate static finalでフィールドを記述することがある。
この値はよくリテラル値(定数)として用いられる。
例えば1から10までを表示したいプログラムがあったとする。
この10は今後仕様や修正で変わる予定のないものとする。
プログラム例1
public class Sample {
public static void main (String[] args){
for(int i=1 ; i <= 10 ; i++){
System.out.println(i);
}
}
}
プログラム例2
public class Sample {
private static fainal int MAX = 10;
public static void main (String[] args){
for(int i=1 ; i <= MAX ; i++){
System.out.println(i);
}
}
}
◆メリット
・同じリテラル(定数)を使用していた場合、修正箇所が一行で済む。
・変数名に意味を持たせることができる。
今回は「MAX」。最大値というのがすぐに想像できる。
◆使用方法
・クラスごとに使用する定数を宣言して使用する。
・機能ごとに使用する定数を、専用のクラスを作成して使用する。
・システム全体で使用する定数を、専用のクラスを作成して使用する。
※クラス内だけでの使用だとprivate、機能に関係するクラスで共通に使用する場合はpublicで宣言する。