« 2008年9月 | トップページ | 2008年12月 »

2008年10月

2008年10月18日 (土)

サーバ速度比較

  • ORCA で 429件のレセプト処理にかかった時間を測定してみた
  • Core 2 Duo マシンは Pentium 4 マシンより倍くらい早かった
  • VirtualPC が思ったより速かった
  • レセプト作成で OpenVZ と Xen に倍近い差が生じた。多分,オーバーヘッドの影響が大きい処理が入っているのだろう。

 

CPU OS データチェック レセプト作成
Pentium 4 @2.6GHz Ubuntu 7.10 + Xen 3.1 1' 48" 2' 35"
C2D E6550 @2.33GHz Windows XP + VirtualPC 2007 (VT off) 1' 14" 1' 41"
C2D E6550 @2.33GHz Windows XP + VirtualPC 2007 (VT on) 1' 13" 1' 25"
C2D E4500 @2.2GHz Ubuntu 7.10(x86_64) + Xen 3.1 1' 03" 1' 18"
C2D E7200 @2.53GHz Ubuntu 8.04(x86_64) + Xen 3.2 0' 51" 1' 02"
C2D E7200 @2.53GHz Ubuntu 8.04(x86_64) + OpenVZ 0' 48" 0' 37"

-wfcwait 10 について

ORCA の起動スクリプトである /etc/init.d/jma-receipt では,panda/sbin/monitor にオプション -wfcwait 10 をつけて起動するようになっている。Ubuntu 8.04 + OpenVZ の仮想環境にインストールした ORCA では,10のままだと,激しく WFC connection retry を出した後 error socket で落ちて Stop system を出し,その後,おもむろに wfc がスタートするが,すぐに receive stop signal と言い残して終了してしまい,そのままでは ORCA が立ち上がらなかった。

 

ログ内容
Aug 19 20:08:05 orca panda/monitor[384]: Start system
Aug 19 20:08:06 orca panda/aps-orca02[389]: OpenCOBOL handlerClass invoke.
Aug 19 20:08:06 orca panda/aps-orca02[389]: WFC connection retry
Aug 19 20:08:06 orca panda/aps-orca03[390]: OpenCOBOL handlerClass invoke.
Aug 19 20:08:06 orca panda/aps-orca03[390]: WFC connection retry
・
・延々と続く
・
Aug 19 20:08:15 orca panda/aps-orca108[420]: WFC connection retry
Aug 19 20:08:15 orca panda/aps-orca00[387]: error socket
Aug 19 20:08:15 orca panda/monitor[384]: process down pid = 387(1) Command =[/usr/lib/panda/sbin/aps] 
Aug 19 20:08:15 orca panda/monitor[384]: Stop system
Aug 19 20:08:16 orca panda/wfc[385]: wfc server start
Aug 19 20:08:16 orca panda/wfc[385]: receive stop signal
Aug 19 20:08:17 orca panda/wfc[385]: wfc server end

 

そこで,-wfcwait を1にしたところ,正常に立ち上がった。-wfcwait 10 は debian woody 時代に加えられている。なぜ加えられたのか記載がないが,monitor.c のソースを見ると,wfcwait は遅い CPU 対策のようだ。syslog をみて,WFC connection retry が異常にたくさん出ているようなら,wfcwait は 1 や 0 でいいかもしれない。1 だと WFC connection retry の行数が著しく減少する。0 にすると,WFC connection retry が出なくなる。少し retry させるくらいの設定の方が,通信が確実につながるのだろうか?

OpenVZ

OpenVZ について

    OpenVZ は OS レベルの仮想化ソフトで,ハイパーバイザー型の Xen に比べてオーバーヘッドが少なく,速度的に有利。しかし,カーネルはホストのものを使用するので,ホストマシンで kernel-2.6.18 が動かないと,kernel-2.6.18 のゲスト環境は作れない。今時の最新マシンは kernel-2.6.18 では動かないので,どうしても新しいカーネルで動かすことになる。その場合,カーネルの違いにより,ORCA の動作に不具合が生じる可能性が否定できない。これは,実際の業務で運用する場合,若干の不安材料となりうる。

 

インストール方法

  • 今回インストールした環境。
    Core 2 Duo E7200 @ 2.53GHz + ubuntu 8.04 server x86_64 (kernel-2.6.24)
    
  • aptitude でインストール。なお,cups は Linux-Vserver と同じように,ホスト環境に cupsd を走らせて,ゲスト環境からは cups-client でアクセスするように設定する(省略)。
    # aptitude install linux-openvz vzctl
    
  • network を使うために,/etc/network/interfaces および /etc/sysctl.conf を変更
    # vi /etc/network/interfaces
    
    auto lo eth0
    iface eth0 inet static
           address 192.168.187.16
           netmask 255.255.255.0
           gateway 192.168.187.1
           up sysctl -w net.ipv4.conf.eth0.proxy_arp=1     # 追加した
           up sysctl -w net.ipv4.conf.eth0.forwarding=1    # 追加した
    
    # /etc/init.d/networking restart
    
    /etc/sysctl.conf には,以下の項目を最後に加える
    #-- OpenVZ begin --#
    
    # On Hardware Node we generally need
    # packet forwarding enabled and proxy arp disabled
    net.ipv4.ip_forward = 1 # <-- This line enables NAT forwarding
    net.ipv4.conf.default.proxy_arp = 0
    
    # Enables source route verification
    # Enabled above
    # net.ipv4.conf.all.rp_filter = 1
    
    # Enables the magic-sysrq key
    kernel.sysrq = 1
    
    # TCP Explict Congestion Notification
    # net.ipv4.tcp_ecn = 0
    
    # we do not want all our interfaces to send redirects
    net.ipv4.conf.default.send_redirects = 1
    net.ipv4.conf.all.send_redirects = 0
    
    #-- OpenVZ end -- 
    
  • リブートして openvz カーネルを選択すると OpenVZ が起動する。
  • http://wiki.openvz.org/Download/template/precreated から debian-4.0-i386-minimal.tar.gz を取ってきて,/var/lib/vz/template/cache に保存する。
  • Debian etch ゲストの作成
    # vzctl create 101 --name orca --ostemplate deiban-4.0-i386-minimal --ipadd 192.168.1.xxx --hostname orca
    
  • ネームサーバ,ホスト起動時に一緒にブートするかどうかの設定,ディスク容量,メモリ容量の設定。下の例では,割当メモリ 512M,メモリ再大容量 768M に設定してある。
    # vzctl set orca --nameserver 192.168.1.1 --diskspace 30G --onboot no --save
    # vzctl set orca --vmguarpages $(( 256 * 512 )) --save
    # vzctl set orca --privvmpages $(( 256 * 768 )) --save
    
  • ゲストを走らせて,ゲスト環境に入る。基本的な設定をする。
    (ホスト)
    # vzctl start orca
    # vzctl enter orca
    (ゲスト環境)
    # passwd
    # adduser orca
    # dpkg-reconfigure locales
    
  • ディスク容量は後から変更可能。
    vzctl set orca --diskspace 60G --save
    
  • ゲスト環境は /var/lib/vz/private 以下に展開される。普通のファイルと同じように,rsync でバックアップがとれる。(cp でコピーすると,owner:group が書き変わるので不可)
  • ゲスト環境の設定ファイルは /etc/vz/conf の中に入っている。

 

ゲスト環境への ORCA インストール

Xen 3.2

Xen の利点

    Xen を使うと,ゲスト環境(dom-U)の中で kernel-2.6.18 の「素debianサーバ」を構築できる。ORCA も,インストール手順書通りにインストールできる。一度「素debianサーバ」を作ってしまえば,ホストマシンを新しくしても,Xen を走らせれば,作成済みの「素debianサーバ」を持って行ってそのまま使える。それでいて,ハードウエア仮想化の VirtualPC や VMWare に比較すれば,オーバーヘッドが少ない。メモリ管理は OpenVZ や Linux-Vserver よりも厳格なようだし,ファイルは物理パーティションに配置することができるので,イメージファイルを使うより安心感がある。スピードと安定性の両立ができるバランスのよい選択だと考えている。

 

Xen のインストール

    開院当初から Ubuntu 7.10 + Xen 3.1 で運用中であったが,メインマシンを Ubuntu 8.04 + Xen 3.2 に移行した。
    以下は,Ubuntu 8.04 (x86_64) インストール後からの手順。
  • インストール
    # aptitude install ubuntu-xen-server
    
  • /boot/grub/menu.lst の編集:dom-0 のメモリ割当は 256M にしている。また,sw-iommu space を 64M にセットしている。(これをセットしないと,ファイルのコピー時に out of SW-IOMMU space エラーが出まくる[参考])
    kernel /boot/xen-3.2.gz dom0_mem=256M
    module   /boot/vmlinuz-2.6.24-18-xen root= ro console=tty0 swiotlb=64
    

 

環境の移行

  • 現在運用中のマシン(current-machine)から,新しいマシンに仮想マシン(dom-U)をコピーする。仮想マシンは物理パーティションの /media/orca/,/media/dolphin/,/media/samba/ に作ってある。--numeric-ids を付けておかないと,ユーザ名,グループ名が合うように id 番号を変えられてしまう*。
    # rsync -azH --numeric-ids root@current-machine:/media/orca/ /media/orca/
    # rsync -azH --numeric-ids root@current-machine:/media/dolphin/ /media/dolphin/
    # rsync -azH --numeric-ids root@current-machine:/media/samba/ /media/samba/
    
  • current-machine から,新しいマシンに debian 2.6.18 カーネルをコピーする。
    # scp root@current-machine:/boot/*-2.6.18-6-xen-* /boot/
    
  • current-machine から,新しいマシンに cfg ファイルをコピーする。
    # scp root@current-machine:/etc/xen/*.cfg /etc/xen/
    
  • 動作確認
    # xm create orca.cfg
    # xm create dolphin.cfg
    # xm create samba.cfg
    
  • すぐに新しいマシンで実運用してみたが,全く問題無し。マシンの更新は非常に簡単であった。

    *) 例えばマシン1で klog グループの id が 103 で,マシン2では 104 だったとする。--numeric-ids を付けてないと,rsync がグループ名の klog で合わせてしまうので,id が 103 → 104 に書き換えてられてしまう。

Linux-Vserver

Linux-Vserver について

  • Linux-Vserver は OS レベル(コンテナ方式)の仮想化ソフトで,ハイパーバイザー型の Xen に比べてオーバーヘッドが少なく,速度的に有利。しかし,業務で運用するには,メモリ・ディスク容量の管理が難しそう。
  • 新しいカーネルへの対応は遅いようで,現時点で Debian etch-and-a-half や Ubuntu 8.04 の kernel-2.6.24 では Linux-vserver は使えない。
  • 今時の新しいマシンは kernel-2.6.18 では動かないので,この選択肢ははずれた。
  • 今回は,kernel-2.6.18 の Debian Etch が動くマシンで Linux-Vserver を試してみた。

 

インストール

  • 今回インストールした環境。
    Debian Etch (kernel-2.6.18)
    
  • vserver インストール。cupsys もホスト側にインストールする。cupsd はゲスト側で立てられないので(xen の場合は問題なく dom-U で cupsd が立てられる),ホスト側に cupsd を立てて,ゲスト側からは cups-client でアクセスしなくてはならない。
    # aptitude install linux-image-2.6-vserver-686
    # aptitude install vserver-debiantool
    # aptitude install cupssys gs-esp gs-cjk-resource cmap-adobe-japan1
    # dpkg-reconfigure cmap-adobe-japan1 (3項目全てにチェックを入れる)
    
  • /etc/cups/cupsd.conf の設定
    #Only listen for connections from the local machine.
    Listen localhost:631
    Listen /var/run/cups/cups.sock
    Listen 192.168.1.XXX:631           #########  加える:自分
    DefaultEncryption IfRequested      #########  加える(これがないと ssl アクセスになる)
    
    <Location />
    Order Deny,Allow
    Allow From localhost
    Allow From 192.168.1.0/24          #########  加える 192.168.1.251 等,特定のマシンでもいい
    </Location>
    
    <Location /admin>
    # Encryption Required              #########  コメントアウト
    Order Deny,Allow
    Allow From localhost
    Allow From 192.168.1.0/24          #########  加える 192.168.1.251 等,特定のマシンでもいい
    </Location>
    
    <Location /admin/conf>
    AuthType Basic
    Require user @SYSTEM
    Order Deny,Allow
    Allow From localhost
    Allow From 192.168.1.0/24          #########  加える 192.168.1.251 等,特定のマシンでもいい
    </Location>
    
    MaxJobs 0                          #########  加える(ジョブの上限解除)
    
  • ホスト側の sshd_config で,ListenAddress をホスト側のアドレスに設定する。これを設定しないと,ゲスト側にアクセスしたつもりが,ホスト側に入ってしまう。
    /etc/ssh/sshd_config
    ListenAddress 192.168.1.xxx
    
  • reboot して,vserver カーネルを選択する。
    # uname -a
    Linux vserv-host 2.6.18-6-vserver-686 #1 SMP Tue Jun 17 23:47:22 UTC 2008 i686 GNU/Linux
    

 

ORCA サーバ作成

  • vserver 作成。ゲストサーバ環境は /var/lib/vservers/orca 以下に展開される
    # vserver orca build --hostname orca -m debootstrap --interface 1=eth0:192.168.1.yyy/24 -- -d etch
    
  • orca サーバに入って,/etc/hosts を編集。これをしておかないと,localhost にアクセスすると,ホスト側に入ってしまう。
    (ホスト側)
    # vserver orca start
    # vserver orca enter
    
    (ゲスト側)
    # vi /etc/hosts
    
    ##
    # Host Database
    #
    # localhost is used to configure the loopback interface
    # when the system is booting.  Do not change this entry.
    ##
    #127.0.0.1      localhost
    192.168.1.yyy   localhost
    255.255.255.255 broadcasthost
    #::1             localhost
    ::192.168.1.yyy  localhost
    
  • cups-client のインストール
    # adduser orca
    # aptitude install cups-client
    # su - orca
    $ echo "ServerName 192.168.1.xxx" (ホストのアドレス) > ~/.cupsrc
    
  • あとは,インストール手順書通りにインストールできる。ただし,cups は cups-client をインストール。gs 等もインストール必要。これは,印刷はホスト側に丸投げできるが,プレビューはゲスト側で作らないとならないため。
    # aptitude install postgresql-8.1
    # aptitude install jma-receipt
    # apttiude install gs-esp gs-cjk-resource 
    # aptitude install cmap-adobe-japan1
    
  • /etc/postgresql/8.1/main/postgresql.conf の設定。listen_address をゲスト側のアドレスに設定する。localhost にすると,ホスト側を listen してしまう。
    # - Connection Settings -
    
    #listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                            # comma-separated list of addresses;
                                            # defaults to 'localhost', '*' = all
    listen_addresses = '192.168.1.yyy'
    port = 5432
    
  • /etc/postgresql/8.1/main/pg_hba.conf の設定。
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          md5
    host    all         all         192.168.1.0/24        trust
    

 

OpenDolphin サーバ作成

  • vserver 作成
    # vserver orca build --hostname orca -m debootstrap --interface 2=eth0:192.168.1.zzz/24 -- -d etch
    
  • あとは,同じように localhost,listen_address に注意して設定すれば,スタンドアロンのサーバと同じ様にインストールできる。

仮想サーバ環境の構築

  • ORCA,OpenDolphin,ファイルサーバ(samba)の3つのサーバを運用している。それぞれにバックアップマシンも考えると単純計算で6台になってしまう。そんなに何台もサーバマシンを置く余裕はない。
  • そこで,それぞれのサーバを仮想化して,メイン1台,バックアップ1台,計2台のマシンで動かしている。現在は,メイン Ubuntu 8.04 + Xen 3.2,サブ Ubuntu 7.10 + Xen 3.1 で運用して,特に問題は生じていない。
  • 無料でできる仮想化手段としては,VirtualPC(Windows が必要なので完全無料ではないが),VMWare,Xen,OpenVZ,Linux-Vserver 等がある。
  • 使うサーバは Debian だけなので,ハードウエア仮想化の VirtualPC や VMWare は無駄と考えた。選択肢は Xen,OpenVZ,Linux-Vserver で実験してみた。

2008年10月17日 (金)

mac版 glclient の表示

Monsia1 Monsia2 mac版の glcleint では,ルック&フィールを Mac OS X 以外に設定すると,フォントにアンチエリアスがかからなくなってしまう。下の変更を行うとアンチエリアスがかかるようになる。左は,nimrod でフォントにメイリオを設定したところ。

 

src/jp/or/med/jma_receipt/JMAReceiptLauncher.java の編集

public static void main(String[] args) {
  ////↓ 加える
  System.setProperty("swing.aatext","true");
  ////↑ ここまで

  Launcher launcher = new JMAReceiptLauncher(Messages.getString("application.title")); //$NON-NLS-1$
  launcher.launch(args);
}

2008年10月13日 (月)

mac版 glclient の表示

Grid Windows 版の glclient では,表を表示する画面で Mac 版では表示されない罫線が表示されていた。薄く罫線が入っていると,横長の表が見やすいような気がしたので,Mac 版でも表示されるようにした。Windows 版の glclient でも,20081001 版では罫線が表示されなくなっているようだが,この変更を加えると表示されるようになる。

 

src/org/montsuqi/client/marshallers/CListMarshaller.java の編集

class CListMarshaller extends WidgetMarshaller {

  public synchronized void receive(WidgetValueManager manager, Component widget) throws IOException {
    Protocol con = manager.getProtocol();
    JTable table = (JTable)widget;

//// ↓ 加える
    table.setShowGrid(true);
    table.setGridColor(new java.awt.Color(235,235,235));
//// ↑
    DefaultTableModel tableModel = (DefaultTableModel)table.getModel();

« 2008年9月 | トップページ | 2008年12月 »