Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2017-05-29(Mon)

FreeBSDのHASTを触ってみた。

| FreeBSDのHASTを触ってみた。 - 浅倉卓司@blog風味? を含むブックマーク FreeBSDのHASTを触ってみた。 - 浅倉卓司@blog風味? のブックマークコメント

 こういうのは最近ならQiitaあたりに書いた方がいいんだろうけど。

目次

  • [FreeBSD]FreeBSDのHASTを触ってみた。
    • 特徴など
    • インストール・設定
    • hastctl による操作
    • 状態について
    • ファイルシステムについて
      • ufsで利用する場合
      • ZFSで利用する場合
    • 簡易ツール
      • dirtry値のチェック
      • Sprit-brain時の同期状態リセット

特徴など


インストール・設定

  • インストールは特に必要なし(FreeBSD 11.0)
  • 設定ファイル: /etc/hast.conf
	replication memsync
	resource shared1 {
	    local /dev/vtbd1p1
	    on host1 {
	        remote 192.168.0.102
	    }
	    on host2 {
	        remote 192.168.0.101
	    }
	}
	resource shared2 {
	    local /var/hast/shared.img
	    on host1 {
	        remote 192.168.0.102
	    }
	    on host2 {
	        remote 192.168.0.101
	    }
	}
    • replicationはmemsyncがデフォルト、fullsyncが安全で遅い
    • execでイベント発生時にプログラムの実行が可能
  • ブロックデバイスを利用する場合はそのまま指定する
    • パーティションは切っておいたほうがよいと思われる
      • サイズを一致させるため
      • ストレージのサイズが大きくなった時(仮想環境など)に後ろのブロックを利用するため
	# gpart create -s gpt vtbd1
	# gpart add -t freebsd-ufs -s 10G vtbd1
	# gpart show vtbd1
  • ファイルを使う場合は必要なサイズのファイルを作る
	# mkdir /var/hast
	# dd if=/dev/zero of=/var/hast/shared.img bs=10m count=1024
    • ※ただし、ファイルを使った場合に問題が生じるケースがある模様
      • HASTのターゲットファイルがufs上の時は問題が起こったが、ZFS上であれば問題なかった
      • HASTのターゲットファイルがufs上の時でも、HASTデバイスをZFSで扱っている時は問題なかった
      • /var/log/messages に「Unable to flush disk cache on activemap update: Inappropriate ioctl for device.」が残る(この時に問題があるかどうかは不明。今のところは問題なく同期できているようだった)
  • ブロックデバイスにしろファイルにしろ、サイズが不一致の場合は同期できない
    • /var/log/messagesにエラーが残る
    • 逆にサイズさえ合っていればブロックデバイスとファイルとの同期もされる模様

hastctl による操作

  • 初期化
	# hastctl create shared1
    • create でリソースを初期化する
    • 初めてアクセスする前に実行する
    • 問題が生じて再初期化時にも利用
  • 状態変更
	# hastctl role primary shared1
    • role primary 時に /dev/hast/{リソース名} にアクセス可能になる
    • 同時に両方primaryにできる(排他制御などはしてない模様)
	# hastctl role secondary shared1
    • role secondary にすることで、primaryと同期される
    • hastd起動時はrole init なので、secondaryにする必要がある
  • 状態確認
	# hastctl status shared1
	# hastctl list shared1
    • 同期の状態などを確認可能
  • Split-brainになった場合
    • /var/log/messages にSplit-brainを検知した旨と対象のリソース名が残る(Primary Secondary共)
      • Split-brain時にconfのexecで指定したものが起動されるので、そこで対応は可能(ただしSplit-brain時以外にも呼ばれる)
    • セカンダリ側で下記を実行すると復旧する:
	# hastctrl role init {リソース名}
	# hastctrl create {リソース名}
	# hastctrl role secondary {リソース名}

状態について

  • roleはinit, primary, secondaryの3種類
  • role initの時は動作していない
  • role primaryの時に /dev/hast/{リソース名} として参照可能になる
  • role secondaryの時にprimaryからの同期データを受信している
  • role primaryの排他制御などはしていないらしく、同時にprimaryにしてしまうことができる
    • これを回避する方法は特にない?(primaryに変えるときに注意するしかない?)
    • 切替え時には両方をsecondaryにしてから、片方をprimaryにする必要がある
      • 両方primaryにするとhastdが刺さった状態になる模様。プロセスをkillする必要がある。
		# kill -KILL `cat /var/run/hastd.pid`
  • hastctl statusでcompleteになっていても、同期は完了していない模様
    • hastctl listで表示されるdirtyが0になった時に完了している?
  • HASTデバイスを利用するサービスはrc.confで有効にしないほうがよい
    • role primary & mount後にアクセスする必要があるため
    • 上記でアクセス可能になったあとでservice {サービス名} onestart で起動
  • 起動時はrole initのため、なんらかの方法でrole secondaryにする必要がある
    • CARPを使った事例ではcarpの状態変更に合わせてroleを変更する
    • pacemaker + corosyncでの対応もおそらく可能
      • ※corosyncのports/pkgが動かなくて未検証

ファイルシステムについて

  • ufsよりZFSのほうがパフォーマンスがよさそう
  • HASTで同期している領域を拡張することはできない模様
    • 領域を増やしたい場合はhast.confに別途追加する形になりそう
    • ZFSでアクセスするようにしたほうがよいかもしれない
      • zpool replaceで大きいパーティションに変更可能
      • zpool addで領域を増やすことも可能
      • ただし、こういう運用をする場合は管理が煩雑になる可能性がある
  • ZFSは運用に注意点がある(後述)

ufsで利用する場合
  • 初期化
	# newfs -U -j /dev/hast/shared1
    • -U はソフトアップデートを有効化
    • -j はジャーナリング有効化
  • ufsの場合はmountする前にfsckでチェックする
	# hastctl role primary shared1
	# fsck -y -t ufs /dev/hast/shared1
	# mount -o noatime /dev/hast/shared1 /mnt/shared
	# application_start

ZFSで利用する場合
  • 初期化
	# zpool create hast-zfs /dev/hast/shared2
	# zfs create -o mountpoint=/mnt/shared hast-zfs/shared
  • role prymary以外にする時にzpool exportしておかないと問題が生じる
    • また、zpool exportしておかないとshutdownに失敗する(どこかで刺さっている?)
	# zpool export hast-zfs
	# hastctl role secondary shared2
  • zpool import時は正常にexportされていない可能性があるため(ダウン時のリカバリ等)、-fオプションを常に付けたほうがよいかもしれない
	# hastctl role primary shared2
	# zpool import -f -d /dev/hast/ hast-zfs
  • 異常終了時はzpool exportされていないため、zpool statusを見るとstate:UNAVAILになっている
    • この時はzpool exportしておいたほうがよいかもしれない
    • exportしていないときにrole primaryになると自動的にONLINEになる(mountはされない)

簡易ツール

dirtry値のチェック
#!/bin/sh

# check options
while getopts aq opt
do
  case $opt in
    a) option_all=1 ;;
    q) option_quiet=1 ;;
  esac
done

# target resources
shift $(($OPTIND - 1))
if [ "$*" ]; then
  resources="$*"
else
  resources=$(/sbin/hastctl dump | /usr/bin/awk '/^ *resource: / {print $2}')
fi

# view dirty
dirtycount=0
for res in $resources; do
  dirty=$(/sbin/hastctl list $res | /usr/bin/awk '/^ *dirty: / {print $2}')
  [ $dirty -ne 0 ] && dirtycount=$(($dirtycount + 1))
  [ $option_quiet ] && continue

  if [ $dirty -ne 0 -o "$option_all" ]; then
    echo "$res $dirty"
  fi
done

exit $dirtycount

  • オプションなしの場合、dirty値があるリソースとそのdirty値が表示される
  • オプション-aでdirty値がないリソース(とそのdirty値)も表示される
  • オプション-qで何も表示しない
  • リソース名を渡すと、そのリソースのみチェックする
  • 終了ステータスにdirty値があるリソースの数を返す

Sprit-brain時の同期状態リセット
#!/bin/sh

syslog_facility="user.notice"
syslog_tag="hast-event"

logger="/usr/bin/logger -p $syslog_facility -t $syslog_tag"

resource=$1

[ $resource ] || exit 1

# check role secondaryj
roletype=$( /sbin/hastctl list $resource | /usr/bin/awk '/^[\t ]*role:[\t ]+/ {print $2}' )
[ "$roletype" = "primary" ] && exit

# recover
$logger "HAST [$resource] recover"
/sbin/hastctl role init $resource
/sbin/hastctl create $resource
/sbin/hastctl role $roletype $resource

  • リソース名を渡すと、そのリソースの同期状態をリセットする
    • ただし、role primaryの時は何もしない
    • role init の時はrole secondaryに変更しないため、そのままでは同期されない(role secondaryに変更する必要がある)
トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20170529

2017-01-22(Sun)

そもそも「広いメディア」ってそんなにあるのかな?

| そもそも「広いメディア」ってそんなにあるのかな? - 浅倉卓司@blog風味? を含むブックマーク そもそも「広いメディア」ってそんなにあるのかな? - 浅倉卓司@blog風味? のブックマークコメント

 この記事を読んで違和感があって気になってたのですが、そもそもこの記事で言う「広いメディア」ってかなり特殊な存在のような気がします。

 例えばテレビを「広いメディア」としているけれど、ほとんどの番組はターゲティングされている=「狭い」ような気がしますし、ここで言われている「広いメディア」に該当するのは「テレビ・ラジオのニュース番組」くらいじゃないでしょうか。

(新聞=広いメディアというのは一般紙のみしか念頭にない思考でしょう)

 そういう意味では「広いメディア」「深いメディア」という区分けをしてもあまり意味がない気がするんですよ。


 あの記事で分けるべきはおそらく広い/深いではなく「ニュース(速報性・時事性があるもの)」と「ニュース以外」なんじゃないでしょうか。

 ニュースサイトは比較的記事の量産が可能なため、「狭い」ニュースサイトは昔から沢山成立しているわけです(例えばImpress Watch等)。対して、ニュース以外で記事を量産しようとした結果がまとめ(キュレーション)サイトだったように見えるんですよね。

(なので、僕は広さよりも時事性で分けた方がしっくりきます)


 またあの記事では雑誌を「深い」としていますが、実際の雑誌はターゲッティングしている(=狭い)うえで、雑誌によって「浅い」ものもあれば「深い」ものもあるわけです。

(深い/浅いという言い方よりも「軽い」「重い」と言った方が通じるかもしれません)

 そういう意味では「MERY」が(狭い)ターゲットにちゃんと刺さっていたのは間違いないものの、別に「深い」メディアにはなってはいなかったんじゃないかと思うんですよね。雑誌として見た場合にはおそらく「軽い」に分類される雑誌だったんじゃないかという気がしますし。

(実際にMERYの記事を分析できてはいないので、実際にどうだったのか分からないのは残念なところです)


 そんなわけで徳力さんが今後も「広い」「深い」という方向性で分析を進めていくのであれば、おそらく全然役に立たない分析になるんじゃないかな?という気がしています。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20170122

2017-01-21(Sat)

「雑誌」ってなんだ?

| 「雑誌」ってなんだ? - 浅倉卓司@blog風味? を含むブックマーク 「雑誌」ってなんだ? - 浅倉卓司@blog風味? のブックマークコメント

 雑誌にまつわるネタをいくつか見つけて「そういや以前雑誌について書きかけてなかったっけ?」と思い確認してみたら、4年前(2013年)じゃないですか。しかも当時も「3年前(2010年)に書きかけて」とか書いてて、本当に酷い(笑)。

 そんなわけで改めて「雑誌」について書いてみよう。


雑誌の要件

 そもそも「雑誌」に求めるものってなんだろう? と改めて考えてみたところ、下記が揃っていて欲しいと感じました。

  • 定期刊行されていること
  • 特定ジャンルに特化していること
  • 連載があること
  • 特集があること
  • 複数の著者がいること

 これらの要素が揃っていないとあまり「雑誌」のような感じがしません。例えば『群雛』を雑誌的に思えず、(昔からの意味での)「同人誌」のように感じたのは、上記要件のいくつかが欠けていたからのような気がします。

(そういう意味では著者達の作るネットワークをまとめたものは同人誌的であり雑誌のようになる気があまりしません)


(つづく)

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20170121
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |