ubuntu16 + lsyncdで相互同期した話

lsyncdでサーバー間の相互同期をはかって色々ハマったのでその件について。
まず構成としてはrsyncd + lsyncdと一般的な同期用のミドルウェアを利用する。

ところが設定してみてもlsyncdが起動せず、しかもログにも何も出ないしstartコマンド投げたら起動OKと出ている割に起動していない。
困り果てていたのだが
これを投げ見てみてコメント部分でエラー?が出ていたようなので消したら動くようになった。
具体的にどこが原因だったのかついぞわからなかったがコメント部分に問題があったのか,の位置に問題があったのかそこら辺が原因だと推測している。

lsyncd -nodaemon -log scarce /etc/lsyncd/lsyncd.conf.lua
Error: error loading /etc/lsyncd/lsyncd.conf.lua: /etc/lsyncd/lsyncd.conf.lua:11: unexpected symbol near '?'

そして最終的には下記のようなansibleでうまく行った。
ちなみにroot同士がsshでつながるように鍵を配置している。
また、awsでport873のインバウンドを許可している
(アウトバウンドは全許可しているため割愛)

$ tree roles/lsyncd/
roles/lsyncd/
├── files
│   ├── rsync
│   └── rsyncd.conf
├── tasks
│   └── main.yml
└── templates
    └── lsyncd.conf.lua.j2

roles/lsyncd/files/rsyncはインストール後のFileからRSYNC_ENABLEを下記に変更しただけ

RSYNC_ENABLE=true

これがroles/lsyncd/tasks/main.yml本体

- name: sysctrl change
  sysctl:
    name: fs.inotify.max_user_watches
    value: 32768
    state: present
- name: create log directory
  file: path=/var/log/lsyncd state=directory owner=root group=root mode=0755

- name: rsyncd install
  apt: name={{ item }} state=installed update_cache=yes
  with_items:
    - rsync
    - lsyncd

- name: template lsyncd conf
  template: src=templates/lsyncd.conf.lua.j2 dest=/etc/lsyncd/lsyncd.conf.lua
  register: lsyncd

- name: syncd started
  service:
    name: lsyncd
    state: restarted
    enabled: yes
  when: lsyncd.changed

- name: copy rsync conf
  template: src=files/rsyncd.conf dest=/etc/rsyncd.conf
  register: rsyncd_conf

- name: copy rsync conf
  template: src=files/rsync dest=/etc/default/rsync
  register: rsync_conf

- name: syncd started
  service:
    name: rsync
    state: restarted
    enabled: yes
  when: rsyncd_conf.changed or rsync_conf.changed

roles/lsyncd/templates/lsyncd.conf.lua.j2

# 新規作成
settings{
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
    delay = 0,
    nodaemon  = false
}
sync{
    default.rsync,
    source="/var/www/wordpress",
    target="{{ lsyncd_mirror_host }}::wordpress",
    delete="running",
    init = false,
    rsync = {
      archive = true,
      links = true,
      update = true,
      verbose = false
    }
}

さらに同期先のHOSTの設定をansibeで指定している

[www]
www01-aws lsyncd_mirror_host={ここにwww02のIP}
www02-aws lsyncd_mirror_host={ここにwww01のIP}

コメントを残す