2017年5月28日日曜日

CentOS 7系でSheeodogを動かす - インストール・設定編

Sheepdogをインストールする場合、ソースコードをダウンロードしてコンパイルする(それからrpmを作成するなど)の手順が必要になってきます。
Sheepdogではクラスタ管理にcorosync / zookeeperが選択できるが、今後はzookeeperを使ってスケールするような風潮が見られるため(管理上限の制限などもふくめて)、zookeeperを使ってインストールする方が望ましいです。
しかし、標準的なインストールだとcorosyncのみをサポートしていること、またzookeeperを一緒にインストールしようとするとかなり面倒くさい。
そこで、簡単に試そうとするならば、私が作成したel7用のrpmがダウンロード可能なので、使うことをお勧めします。
※これからの手順はこのblogからリンクされているパッケージインストールを元に説明します。

インストール

1.必要なパッケージをダウンロードする。
 一箇所にまとめて保存してください。md5sumを確認することをお忘れなく。

2. 全てのパッケージをインストールする。
 sheepfsを使いたい場合はsheepfsパッケージもインストールしてください。
 ※環境によってはfuse関連のパッケージのインストールが必要かもしれません。
  またzookeepkerがすでに入っている環境の場合は競合するかもしれません。

インストールは以上です。rpmインストールができると非常に簡単ですネ。

設定


大きく分けて、zookeeperの設定とsheepdogの設定があります。

zookeeperの設定

zookeeperの設定は2箇所あります。

1. /etc/zookeeper/zoo.cfg の設定
クラスタを組むサーバの設定をします。既存のzoo.cfgに追加します。書式は次の通りです。 ※後ろのポート番号の説明は省略します。
server.<サーバid>=<サーバIP address>:2888:3888
これをクラスタ分を登録します。
server.1=172.17.29.4:2888:3888
server.2=172.17.29.5:2888:3888
server.3=172.17.29.6:2888:3888

2. /var/lib/zookeeper/data/myid の設定
myidは自サーバの番号を記述します。例えば、zoo.cfgのserver.3(172.17.29.6)のサーバであれば3です。参加するクラスタ全サーバでmyidファイルを作成します。
3

Sheepdogの設定

sheepdogの設定はファイルの修正が1箇所とファイルを1つ作成します。

1. /usr/lib/systemd/system/sheepdog.service の修正
デフォルトだと環境ファイルが読み込まれないので、読み込ませるための修正を行います。
修正前:
EnvironmentFile=-/etc/sysconfig/sheepdog

修正後:
EnvironmentFile=/etc/sysconfig/sheepdog

2. /etc/sysconfig/sheepdogファイルの作成
環境変数を設定します。デフォルトではcorosyncを使うように設定されているので、zookeeperへの変更と、クラスタの登録を行います。
SHEEP_OPTS="/storage/sheepdog/ -c zookeeper:172.17.29.4:2181,172.17.29.5:2181,172.17.29.6:2181"

以上でsheepdogの設定は終了です。

2017年5月3日水曜日

CentOS 7系でSheeodogを動かす

気づけばこのBlogも放置されていますね。少なくとも私が会社を変わってから1年以上は放置されているでしょうか。
時間ができたのと、業務で必要になってきそうなので、本格的に分散ブロックストレージの検証記事を書いていきたいと思っています。

まず始めにNTTの研究所が開発を行ったSheepdogです。

Sheepdogとは?

7~8年前から開発はされていたのですが、あまり日の目を見ることがなく日本でもドキュメントが少なく、一部企業で採用された、や、NTTデータがソリューションを発表したらしいという情報しかなく、触りたい人もあまり触れていないのが実情?(そもそも知らない?)のではないかと思います。

Sheepdogは分散ストレージでもファイルベースやNFSベースではなく、ブロックデバイスとしてマウントできるのが特徴です。
具体的に何がうれしいか?って、仮想マシンのDiskに最適なのですね。
※sheepdogはKVM(qemu)を使うことを前提に設計されています。

ただインストールするのは自己満足でしかならないので、パッケージを作成してインストールを行おうと思っています。

できたパッケージは下記に公開していますので、今すぐ使ってみたいという方はどうぞ持って行ってください。

パッケージ作成・インストールから使うまで

1ページに入れるのと記事が大きくなりすぎそうなので、分割しました。
  1. [作成中]パッケージ作成
  2. [作成中]インストール・設定 (zookeeper / sheepdog)
  3. [作成中]使い方

パッケージ

今回作成したものを公開します。
※CentOS Linux release 7.3.1611 (Core)  でパッケージを作成しています。
 また、自己責任でご使用ください。

URL:
6bb56fddd39fc1cb8dea0954b4d63fa3  sheepdog-1.0_122_ge712680-1.el7.centos.x86_64.rpm
562c67e5d822ef69a54d53db4a7295af  sheepdog-sheepfs-1.0_122_ge712680-1.el7.centos.x86_64.rpm
2ffc225822ec2ad10ed4c4c3b971c956  zookeeper-3.4.10-1.x86_64.rpm
db6a9582a1c70fa01f9e74f56d81cd4f  libzookeeper-3.4.10-1.x86_64.rpm
666df47308c45bbdfa025a050b78dcae  sheepdog-zookeeper-1.0_122_ge712680-1.el7.centos.x86_64.rpm



    2015年11月14日土曜日

    VyOSとLinuxでGREトンネルを掘る

    訳あって外部VPSと自宅内ネットワークの間でトンネルを掘ることになった。

    構成はこんな感じ。太字のところが今回のブログの対象。

    外部: VPS( <-- GRE Tunnel --> VyOS <-- Private Network --> Server :内部

    スペック等:

    • VPS:
      Cloudn : vQプラン CentOS release 6.7 (Linux rice 2.6.32-431.el6.x86_64)
    • VyOS: Version: VyOS 1.1.5

    Configuration / 手順

    せっかちな人向けにConfig/手順を晒す。

    VPS:

    1. ip_greモジュールを有効に:
    2. # modprobe ip_gre
      

    3. ネットワークConfigを作成:
    4. /etc/sysconfig/network-scripts/ifcfg-tun0 : #Interfaceの設定
      DEVICE=tun0
      BOOTPROTO=none
      ONBOOT=yes
      TYPE=GRE
      PEER_OUTER_IPADDR=203.0.113.16    #相手側のGlobalIP
      PEER_INNER_IPADDR=192.168.0.250   #相手側のPrivateIP
      MY_INNER_IPADDR=192.168.0.251     #自分側のPrivateIP
      MTU=1400
      

      /etc/sysconfig/network-scripts/route-tun0: #ルーティングの設定 (必要な環境のみ)
      192.168.0.0/16 via 192.168.0.251
      

    5. Interface をUP
    6. # ifup tun0

    VyOS:

    1. 下記Configを投入:
    2. interface {
          tunnel tun0 {
              address 192.168.0.250/24
              encapsulation gre
              local-ip 203.0.113.16
              mtu 1400
              remote-ip 198.51.100.8
          }
      }
      
      

    3. 設定を有効に(Commit):
    4. # commit

    解説:

    特にコツなどはなく、上記設定がそのもの。実際私が調べてから接続まで試行錯誤もそれほどなく、すんなりと接続ができています。

    注意点はルーティングとMTU。

    上記構成ではルーティグは特に不要ですが、Private Network側に複数セグメントある場合は、VPS側、VyOS側、両方に書かないと適切に通信ができません。

    MTUも"ping -s <size> destination" 等で適切に計測して設定を行います。
    これもVPS側、Server側と両方から計測をしないとMTUブラックホール問題にぶち当たります。

    接続試験時にはMTUを上回るパケットサイズでの通信をおこなう必要がありそうです。

    尚、セキュリティに関しては一切考慮していません。
    一般的に使う場合はIPSec等で経路の保護が必要です。

    参考:
    How to configure a GRE Tunnel in CentOSGRE over IPSec Tunnel Between Cisco and VyOS

    2015年11月3日火曜日

    WindowsのiSCSI イニシエータで「ターゲット名が見つからないか、ログインに対して非表示としてマークされています」と怒られた場合

    先日クリーンインストールしたWindows10をなんとかしてiSCSI Bootしようと企んでる。

    なぜかiSCSIに接続できないナーなんて思っていた。

    Windows10上ではこんなメッセージが出てる。

    「ターゲット名が見つからないか、ログインに対して非表示としてマークされています。」
    iscsiターゲット ログオン時のエラー
    ターゲット名もあってるんだけど、なぜかナーと思って、ターゲット名を小文字にしたらすんなりと接続ができた。

    旧:
    
    # tgt-admin --dump
    default-driver iscsi
    <target iqn.2011-10.jp.example.iscsi:Windows.disk>
            backing-store /storage/images/windows7.img
    </target>
    

    新:
    
    # tgt-admin --dump
    default-driver iscsi
    <target iqn.2011-10.jp.example.iscsi:windows.disk>
            backing-store /storage/images/windows7.img
    </target>
    
    >
    そういえば、Windows7をiSCSIブートした時も同じようなワナでハマった記憶が。。。

    備忘録は必要ですね。

    2014年10月24日金曜日

    2014年8月17日日曜日

    Inifinibandを触ってみる - Install編

    随分前にヤフオクで落としたInfinibandについて触る時間ができたので触ってみました。

    今回使用する機材はこちら

    ・IA Server : i3-540 Mem:2GB 73GB SASHDD
    ・HCA : Cisco Infiniband HCA ( Topspin DDR-HCAe LX x8 )
    ・OS : CentOS 6.5 x64 - Coreパッケージのみ

    どうでもいいけれど、先日、はじめてCentOSを”セントス”と発音している人を見かけた。”セントス”が正式発音なんだけど、絶対にわからないから回りにあわせて”セントオーエス”と発音している今日この頃。
    ※せんとクンに発音が似ているのはどうでもいい話。そういえばどこに行ったのだろう。

    早速インストールからはじめる。

    いろいろなサイトでお勉強したが、どうやらCentOS 6.x以上はすでにドライバが組み込まれている様子。
    参考: http://www.srchack.org/article.php?story=20111129002752234

    ためしにクリーンインストールを行って、いきなりモジュールを有効にしてみる。

    # modprobe ib_ipoib
    # ifconfig -a
    ~省略~
    ib0       Link encap:InfiniBand  HWaddr 80:00:04:04:FE:80:00:00:00:00:00:00:00:00:00:00:00:00:00:00
              BROADCAST MULTICAST  MTU:2044  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:256
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    ~省略~

    ifconfigのなかにib0インターフェイスが突然現れたので、本当にそのままできるのだろう。
    しかし、このままでは状態監視などができないので、必要そうなパッケージをインストールすることにする。
    # yum install ibutils infiniband-diags
    # sudo ibstatus
    Infiniband device 'mthca0' port 1 status:
            default gid:     fe80:0000:0000:0000:0005:ad00:000b:c805
            base lid:        0x0
            sm lid:          0x0
            state:           1: DOWN
            phys state:      2: Polling
            rate:            10 Gb/sec (4X)
            link_layer:      InfiniBand
    ふむふむ、認識されているようだ。
    しかし、このHCAはDDR対応なので、20Gbpsでリンクアップできるはずなのだが...
    もしやと思い、Infinibandの対抗側に電源を入れてリンクアップさせる。
    # sudo ibstatus
    Infiniband device 'mthca0' port 1 status:
            default gid:     fe80:0000:0000:0000:0005:ad00:000b:c805
            base lid:        0x0
            sm lid:          0x0
            state:           2: INIT
            phys state:      5: LinkUp
            rate:            20 Gb/sec (4X DDR)
            link_layer:      InfiniBand
    うむ、20Gbpsでリンクアップしています。
    別のコマンドを打ってみる。
    # ibaddr
    ibwarn: [1594] umad_init: can't read ABI version from /sys/class/infiniband_mad/abi_version (No such file or directory): is ib_umad module loaded?
    ibwarn: [1594] mad_rpc_open_port: can't init UMAD library
    ibaddr: iberror: failed: Failed to open '(null)' port '0'
    ふむ、ib_umadも必要そうだ。
    modprobeしてみる。
    # modprobe ib_umad
    # ibaddr
    GID fe80::5:ad00:b:c805 LID start 0x0 end 0x0
    ふむ、これが正常っぽい。
    UMADは「Userspace MAnagement Datagram」の略で管理系の通信を行っているモジュールのようだ。
    参考:http://www.jipdec.or.jp/archives/icot/FTS/REPORTS/H12-reports/H1303-AITEC-Report3/AITEC0103-R3-html/AITEC0103-R3-ch3_2_2.htm
    参考:http://www.viops.jp/ibday02-BASIC-xsigo.pdf

    Infinibandでは1つ以上のサブネットマネージャが必要なのだそうだ。
    こいつもyumでインストール。
    # yum install opensm
    # service opensm
    # service opensm start
    Starting IB Subnet Manager:                                [  OK  ]
    # chkconfig opensm on
    chkconfigでOnにすることも忘れずに。

    今回はIP over IBで立ち上げるので、いつものようにifcfgを書く。
    # vi /etc/sysconfig/network-scripts/ifcfg-ib0
    DEVICE="ib0"
    BOOTPROTO="static"
    IPADDR="10.1.1.1"
    NETMASK="255.255.255.0"
    ONBOOT="yes"
    TYPE="infiniband"
    # ifup ib0
    [root@lisa01 ~]# ifconfig
    ~省略~
    ib0       Link encap:InfiniBand  HWaddr 80:00:04:04:FE:80:00:00:00:00:00:00:00:00:00:00:00:00:00:00
              inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
              inet6 addr: fe80::205:ad00:b:c805/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:2044  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:3 overruns:0 carrier:0
              collisions:0 txqueuelen:256
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    ~省略~
    もう一台、同様に設定して、疎通確認を行う。

    疎通確認はOKなようなので、早速ファイルを転送してみる。
    # scp CentOS-7.0-1406-x86_64-DVD.iso 10.1.1.2:
    root@10.1.1.2's password:
    CentOS-7.0-1406-x86_64-DVD.iso                                                   100% 3956MB 104.1MB/s   00:38    
    約800Mbps...20GbpsのLinkなのでぜんぜん満足できませんなぁ。
    暗号化セットを変えて再チャレンジ
    # scp -c arcfour CentOS-7.0-1406-x86_64-DVD.iso 10.1.1.2:
    CentOS-7.0-1406-x86_64-DVD.iso                                                   100% 3956MB 141.3MB/s   00:28 
    まだぜんぜん満足できませんなぁ。

    納得はいきませんが、とりあえずInstall編はここまで。

    2014年5月16日金曜日

    作業ログを確実にとる

    最近仕事で後輩に対しても作業ログをしっかりとることを指導している。
    クライアントのロガー機能でとるのもそうなんだけど、どうも忘れがち。
    そこでteeを使って、作業ログを取ることを提案した。
    ssh user@server | tee -a work-20140516.log
    これで作業ログを残してかつ、遠隔地でのダブルチェックをすることができる。
    作業者: $ ssh user@server | tee -a work-20140516.log
    ダブルチェック者: $ tail -f work-20140516.log
    これでもいいんだけど、たまに忘れてしまうので、下記のコマンドを踏み台サーバの/etc/bashrcに入れる。
    おまけでReadonlyにすることで確実に記録がのこる。
    $ function ssh () { command ssh $@ |tee -a `whoami`-`date +%Y%m%d%H%M%S`.log ;}$ readonly -f ssh
    簡易的なトレースアビリティの確保にはちょうどいいかもしれない。

    Nginx - https 2GB以上POSTできない(curl: (56) SSL read: errno -5961)

    特異な事象にぶち当たったので、自分用メモと解決方法をメモしておきます。

    事象はNginxのSSL通信において、2GB以上のPOSTができない。
    POSTをしようとすると以下のようなエラーが出てClientから切断される。
    非SSLの場合は転送ができるのでよくわからない。

    $ curl -ikv -X PUT -T test4GB.img "https://server/upload/test.txt" 
    HTTP/1.1 100 Continue
    * SSL read: errno -5961* Closing connection #0curl: (56) SSL read: errno -5961
    Nginxのログを見ても以下の通り。

    2014/05/10 14:56:44 [info] 16121#0: *973320 client prematurely closed connection, client: client01, server: server001, request: "PUT /upload/test.txt HTTP/1.1", host: "server001"
    原因はNginxの client_body_buffer_size の設定。この設定値が大きかった。
    client_body_buffer_size    3096m;

    パフォーマンス向上になるかと値を大きくしたのだが、この設定はそれだけメモリを食う様子。
    しかし、なぜかOut of MemoryにもならずNginxが起動してしまったので、これでいいかと思っていたが、そうではなかった。
    おまけに、この値大きく変えても、POSTできないサイズは2GBで固定だったのでわからなかった。

    設定値を小さくしてNginxをReload。これで解消された。
    client_body_buffer_size    256k;
    何が起こっていたかは、これは予想だが以下の通りだと思われる。

    • Nginxは正常に起動、しかしメモリがいっぱいいっぱい。
    • SSL通信時にOpenSSLのライブラリがラージファイル用にメモリを確保?
    • 確保できないのでハンドシェイクでエラーを返す?
    • クライアントが通信を切断。
    直ってしまったのでこれ以上の調査はしないけれど、この予想、間違ってたらだれか教えてください。

    2014年3月9日日曜日

    改行コードに^M(DOS改行)がある場合の対処法

    古いCGIプログラムをダウンロードしていざ、動くかなーと試したときに、
    「-bash: ./admin.cgi: /usr/local/bin/perl^M: bad interpreter: そのようなファイルやディレクトリはありません」
    と改行コードに”^M”がついて変換に萎えることがある。

    そんなときに、「dos2unix」コマンドを使うと何も考えずに一発コマンドで変換してくれるので超便利。

    $ dos2unix <filename>

    参考: http://ratememo.blog17.fc2.com/blog-entry-824.html

    2013年12月21日土曜日

    CentOS6.5のRPM版PHP5.3.xでpdo_mysql.soが無いといわれた時の対処法

    CentOS6.5のRPM版PHPを使うとき、pdo_mysql.soをphp.iniで有効にすると、そんなファイルは無いと怒られる。
    peclでインストールしようとするとエラーを吐くので調べていたら、以下の方法でインストールできる。

    # yum install pdo php-mysql