1時に寝て3時に起きて6時半に起きた。スマホで呪術廻戦のゲームを開いたまま寝てた。
サードパーティの mongodb コンテナへの移行
昨日の mongodb のサードパーティのコンテナイメージ調査 の続き。
レプリカセットの削除
基本的に一度作ったレプリカセットを削除することはないせいか、レプリカセットを削除するユーティリティは提供されていない。なんらかの理由でレプリカセットを再作成したいときは、レプリカセットの設定が保存されている local database を削除する。
またレプリカセットの稼働中に local database を削除することはできないため、mongod サーバーを --replSet
を指定していない状態で起動させ、そのときに次のようにして local database を削除できる。
test> use admin
admin> db.grantRolesToUser("root", ["__system"]);
{ ok: 1 }
admin> use local
switched to db local
local> db.dropDatabase()
{ ok: 1, dropped: 'local' }
local> use admin
switched to db admin
admin> db.revokeRolesFromUser("root", ["__system"]);
{ ok: 1 }
コンテナを使ったレプリカセットの初期設定
bitnami/mongodb を使うと、ローカルのシングルノードでレプリカセットを使うには次のような設定になる。
mongo:
image: docker.io/bitnami/mongodb:7.0.1
user: root # デフォルトは非 root ユーザーで起動するのでローカルの開発環境なら root で実行した方が手間がない
volumes:
- ./volumes/mongodb:/bitnami/mongodb
environment:
MONGODB_ROOT_USER: "${MONGO_USER}" # 認証ユーザー
MONGODB_ROOT_PASSWORD: "${MONGO_PASSWORD}" # 認証ユーザーのパスワード
MONGODB_ADVERTISED_HOSTNAME: "mongo-primary" # レプリカセットのノードを ip アドレスではなくホスト名で指定する
MONGODB_REPLICA_SET_NAME: "myrs" # レプリカセットの名前
MONGODB_REPLICA_SET_MODE: "primary" # プライマリノードとして設定
MONGODB_REPLICA_SET_KEY: "my/replication/common/key123" # キーファイルのコンテンツ (base64 でデコードできる値)
MONGODB_SYSTEM_LOG_VERBOSITY: 0 # ログレベル
hostname: mongo-primary # コンテナの内外から解決できるホスト名を指定
container_name: mongo # コンテナ名 (docker container ls で表示される名前)
ports:
- 27017:27017 # レプリカセットを運用する場合はポート番号のマッピングを一致させる必要がある
restart: "always"
この設定でレプリカセットを初期した場合、レプリカセットの initialize 処理は、次のような config/member をもつ。
members: [{ _id: 0, host : "mongo-primary:27017", priority: 5 }]
コンテナの内部からは mongo-primary というホスト名に対して、コンテナネットワーク内のローカル ip アドレスが解決される。
c67a5ca94a77:/app# dig +short mongo-primary
192.168.240.3
ここで host os 上のアプリケーションから mongo コンテナに対してレプリカセット接続をする場合 replicaSet=${レプリカセットの名前}
のパラメーターを追加する。
mongodb://root:password@localhost:27017/?authMechanism=DEFAULT&replicaSet=myrs
これは localhost:27017 にレプリカセットの接続を試行し、接続できるとレプリカセットのメンバーが返される。
レプリカセットのメンバーには mongo-primary:27017
という設定が行われているため、mongo-primary というホスト名に対して host os 上で名前解決できる必要がある。そのために /etc/hosts に次の設定を行う。
$ sudo vi /etc/hosts
...
127.0.0.1 mongo-primary
compass で接続した場合、レプリカセット接続であれば、レプリカセットの名前が接続情報として表示される。
ダイニングテーブル引き取り
実は火曜日にも長机を引き取りに行ってきて、今日はダイニングテーブルを引き取りに行ってきた。この3日間で2つもテーブルが手に入った。いつも目ぼしいと思ったものは、すぐに他の人と取り引きが成立してしまうのに、たまたま続けて私と取り引きが成立した。車で20分ぐらいの距離のマンションまで引き取りに行った。20時の予定を、19時10分には着いてしまって、先方も快く対応してくれた。私よりも見た目すこし年配の方で人当たりのよい感じの方だった。ジモティのやり取りはその人の性格が出るもので、受け渡しだけささっとやって余計な話しはしないパターンもあれば、愛想よく話しながら受け渡しをするパターンもある。先方によると、大事に使っていたテーブルのようにみえるので私も離れのオフィススペースで大事に使おうと思う。