Sympaの冗長化(active-active)¶
SympaをActive-Active構成で冗長化する。
リストデータと各種認証要求のみ共有し、キュー処理は各ノードで個別に行う。
設定変更¶
概要¶
- 次のディレクトリを共有フォルダ(/mnt/nfs/{元のパス名}に仮定)に移動する
- /var/lib/sympa 以下の次のディレクトリ
- arc
アーカイブ(投稿保管庫) - list_data
リストデータ(設定ファイル) - bounce
バウンスメール
- arc
- /var/spool/sympa 以下の次のディレクトリ
- auth
保留メールスプール - digest
ダイジェストスプール - moderation
モデレーション待ちスプール - subscribe
購読要求スプール - tmp
一時ファイル - topic
トピック
- auth
- /etc/sympa
設定ファイル
- /var/lib/sympa 以下の次のディレクトリ
設定作業¶
- ディレクトリの作成・移動
mkdir -p /mnt/nfs/var/lib/sympa chown sympa.sympa /mnt/nfs/var/lib/sympa mkdir -p /mnt/nfs/var/spool/sympa chown sympa.sympa /mnt/nfs/var/spool/sympa mkdir -p /mnt/nfs/etc mv /var/lib/sympa/list_data /mnt/nfs/var/lib/sympa mv /var/lib/sympa/bounce /mnt/nfs/var/lib/sympa mv /var/lib/sympa/arc /mnt/nfs/var/lib/sympa mv /var/spool/sympa/moderation /mnt/nfs/var/spool/sympa mv /var/spool/sympa/digest /mnt/nfs/var/spool/sympa mv /var/spool/sympa/auth /mnt/nfs/var/spool/sympa/auth mv /var/spool/sympa/subscribe /mnt/nfs/var/spool/sympa mv /var/spool/sympa/topic /mnt/nfs/var/spool/sympa mv /var/spool/sympa/tmp /mnt/nfs/var/spool/sympa mv /etc/sympa /mnt/nfs/etc
- 元のパスにリンクを作成する
ln -s /mnt/nfs/var/lib/sympa/list_data /var/lib/sympa/list_data ln -s /mnt/nfs/var/lib/sympa/bounce /var/lib/sympa/bounce ln -s /mnt/nfs/var/lib/sympa/arc /var/lib/sympa/arc ln -s /mnt/nfs/var/spool/sympa/moderation /var/spool/sympa/moderation ln -s /mnt/nfs/var/spool/sympa/digest /var/spool/sympa/digest ln -s /mnt/nfs/var/spool/sympa/auth /var/spool/sympa/auth ln -s /mnt/nfs/var/spool/sympa/subscribe /var/spool/sympa/subscribe ln -s /mnt/nfs/var/spool/sympa/topic /var/spool/sympa/topic ln -s /mnt/nfs/var/spool/sympa/tmp /var/spool/sympa/tmp ln -s /mnt/nfs/etc/sympa /etc/sympa
- 上記設定ファイルのパスを変更
vi /etc/sympa/sympa.conf -------------------- home /mnt/nfs/var/lib/sympa/list_data queuemod /mnt/nfs/var/spool/sympa/moderation queuedigest /mnt/nfs/var/spool/sympa/digest queueauth /mnt/nfs/var/spool/sympa/auth queuesubscribe /mnt/nfs/var/spool/sympa/subscribe queuetopic /mnt/nfs/var/spool/sympa/topic tmpdir /mnt/nfs/var/spool/sympa/tmp bounce_path /mnt/nfs/var/lib/sympa/bounce arc_path /mnt/nfs/var/lib/sympa/arc
- 上記を変更後、サービスをリスタートする。
systemctl restart sympa systemctl restart wwsympa
共有ディスクにファイルを置くことによる問題¶
共有ディスクにファイルを配置することにより、(ローカルディスクに比べると)ファイルの読み書きが遅くなったり
NFSキャッシュを参照してしまうことで、両ノードから高頻度で書き換えられる次のファイルで問題が起きる可能性がある。
- リストごとのシーケンス番号ファイル
- リストへのエイリアスが書かれた配送テーブルファイル
リストごとのシーケンス番号ファイルに関する問題¶
- list_data/stats
リストごとのシーケンスファイル- 読み取り時のファイルロックがタイムアウトして、Subjectに付加するシーケンス番号が欠損する可能性がある
- 読み取り時のファイルロックがタイムアウトして、Subjectに付加するシーケンス番号が重複する可能性がある
- 書込み時のファイルロックがタイムアウトして、シーケンス番号が更新されない可能性がある
- ファイルロックが短く両ノードからのアクセスが衝突して、ファイルが破損する可能性がある
- 対策
- 次のファイルにパッチをあてて、シーケンスファイルの読み書きのタイムアウトを伸ばす。
※アップデート時に元に戻ってしまうため注意が必要vi /usr/share/sympa/lib/Sympa/List.pm -------------------- sub get_stats { my $self = shift; my @stats; my $lock_fh = Sympa::LockedFile->new($self->{'dir'} . '/stats', 20, '<'); ←20に伸ばす if ($lock_fh) { @stats = split /\s+/, do { my $line = <$lock_fh>; $line }; $lock_fh->close; } … … sub update_stats { $log->syslog('debug2', '(%s, %s, %s, %s, %s)', @_); my $self = shift; my @diffs = @_; my $lock_fh = Sympa::LockedFile->new($self->{'dir'} . '/stats', 40, '+>>'); ←40に伸ばす unless ($lock_fh) { $log->syslog('err', 'Could not create new lock'); return; } … …
- 次のファイルにパッチをあてて、シーケンスファイルの読み書きのタイムアウトを伸ばす。
- サービスの再起動を行う
systemctl restart sympa
リストへのエイリアスが書かれた配送テーブルファイルに関する問題¶