エロゲーのマスターアップは発売日の何日前?

この文書はエロゲーのマスターアップは発売日の何日前なのかを調べたものです。
低価格のゲームはマスターアップが遅い(発売日に近い)、高価格のゲームはマスターアップが早い(発売日から遠い)、のかなあ…と思っていたのですが、まったくそんなことはなかった、ということが分かりました。


抽出したゲーム
2016年9月9日以降2018年9月9日までにパッケージが発売されErogameScapeにマスターアップの日付が記録されているゲーム。
該当のゲームは549本でした。

条件
パッケージとダウンロード版が発売された場合は早く発売された方を発売日とする。

その他
マスターアップの日付は正確ではないことがある。


横軸は発売日とマスターアップ日の差(単位は日)
縦軸は該当ゲームの本数
です。

すべてのゲーム
all_games
4000円以下のゲーム
to4000_games8000円以下のゲーム
to8000_games
8000円を超えるゲーム
morethan8000_games
すべてのゲーム、価格別色分け
all_games_2考察
価格帯をわけてもマスターアップが早いとか遅いとかの傾向は見られませんでした。
自分は勝手にマスターアップの日は、正規分布っぽくなると思っていたのですが、発売日の2週間前、3週間前、4週間前、に集中することが分かりました。
マスターアップの日を金曜日に設定しているのか、マスターアップの報告日を金曜日に設定しているのか、なのかなと推測します。
この日を超えると発売延期になる…という傾向がグラフから分かるかと思ったのですが、そもそも元となるマスターアップの日を適当に入力していることもあり、デッドラインはいまいち分かりませんでした。



WARNING: relation "povlist" page 25 is uninitialized --- fixing

povlistテーブルのidが258のデータが存在するのに、SELECT出来ないという事象が発生しました。
具体的には以下のような事象です。
ap2=# SELECT id FROM povlist WHERE id = 258 ORDER BY id DESC ;
 id
----
(0 行)
ap2=# SELECT id FROM povlist WHERE id <= 258 ORDER BY id DESC ;
 id
-----
 258
 254
 253
 250
 245
 244
続く
id指定だと検索出来ないのに、id<=258だと検索出来ていました。
試しに、VACUUM ANALYZEを実行したところ、以下のようになりました。
ap2=# VACUUM ANALYZE ;
WARNING:  relation "povlist" page 25 is uninitialized --- fixing
WARNING:  relation "povlist" page 26 is uninitialized --- fixing
WARNING:  relation "povlist" page 27 is uninitialized --- fixing
WARNING:  relation "povlist" page 28 is uninitialized --- fixing
WARNING:  relation "povlist" page 29 is uninitialized --- fixing
WARNING:  relation "povlist" page 30 is uninitialized --- fixing
WARNING:  relation "povlist" page 31 is uninitialized --- fixing
WARNING:  relation "povlist" page 32 is uninitialized --- fixing
この後、VACUUM ANALYZEは完了の応答が返ってこなくて、以下のようなメッセージが表示されました。
FATAL:  terminating connection due to administrator command
サーバとの接続が想定外にクローズされました
        おそらく要求の処理前または処理中にサーバが異常終了
        したことを意味しています。
サーバーへの接続が切れました。リセットしています: 成功。
この後、id258が検索されるかを確認したところ、完全にSELECT出来なくなりました。

ap2=# SELECT id FROM povlist WHERE id <= 258 ORDER BY id DESC ;
 id
-----
 254
続く
 [pgsql-jp: 33210] Re: vacuumでエラー?によると、VACUUM FULLで回復しそうでしたので、実行しました。
ap2=# VACUUM FULL ;
FATAL:  terminating connection due to administrator command
サーバとの接続が想定外にクローズされました
        おそらく要求の処理前または処理中にサーバが異常終了
        したことを意味しています。
サーバーへの接続が切れました。リセットしています: 成功。
完了の応答は返ってこなかったのですが、無事id 258番が検索できるようになりました。

ap2=# SELECT id FROM povlist WHERE id = 258 ;
 id
-----
 258
(1 行)

Failed authorization procedure.

ErogameScapeではLet's EncryptのSSL証明書を更新する際に以下のコマンドを実行しています。

# letsencrypt-auto renew --force-renew

今まで問題なかったのですが、本日以下のようなエラーを吐いて更新出来ませんでした。

/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
  DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/erogamescape.dyndns.org.conf
-------------------------------------------------------------------------------
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for erogamescape.dyndns.org
Waiting for verification...
Cleaning up challenges
Attempting to renew cert from /etc/letsencrypt/renewal/erogamescape.dyndns.org.conf produced an unexpected error: Failed authorization procedure. erogamescape.dyndns.org (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Timeout. Skipping.

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/erogamescape.dyndns.org/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: erogamescape.dyndns.org
   Type:   connection
   Detail: Timeout

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.

NOTEに該当する部分はまったく問題ないので、何をどうすれば直るかさっぱり分かりませんでした。
いつもはサブコマンドに「renew」を指定しているのですが「run」を指定してみたら、なぜか更新できました…
※renewとrunの違いは、途中で何かを聞かれるか否かの違い…だと思っています。

# letsencrypt-auto run --force-renew -d erogamescape.dyndns.org
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
  DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for erogamescape.dyndns.org
Waiting for verification...
Cleaning up challenges
Deploying Certificate for erogamescape.dyndns.org to VirtualHost /etc/httpd/conf.d/ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1

-------------------------------------------------------------------------------
Your existing certificate has been successfully renewed, and the new certificate
has been installed.

The new certificate covers the following domains:
https://erogamescape.dyndns.org

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=erogamescape.dyndns.org
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/erogamescape.dyndns.org/fullchain.pem. Your
   cert will expire on 2017-10-12. To obtain a new or tweaked version
   of this certificate in the future, simply run letsencrypt-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "letsencrypt-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

再度、オプションを「renew」にしたら、更新できました。

# letsencrypt-auto renew --force-renew
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
  DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/erogamescape.dyndns.org.conf
-------------------------------------------------------------------------------
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for erogamescape.dyndns.org
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/erogamescape.dyndns.org/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/erogamescape.dyndns.org/fullchain.pem (success)

何がいけなかったのでしょうか…

インフラエンジニアのスキル(ErogameScape構築/運用の場合)

インフラエンジニアのスキルチェックリストを書き出してみたよを見て、このチェックリストの項目において、ErogameScapeを構築/運用する場合を書いてみます。
※チェックリストにないスキルもいろいろ必要だと思います。一番必要なのはErogameScapeを構築/運用しても苦にならないことじゃないかな…

DB設計

  • 必須 : 要件からDB定義を作成できる
  • 必須 : ER図を作成できる
  • 必須 : 第3正規化まで正規化できる
  • 必須 : パフォーマンスを意識したインデックス設定ができる

パッケージ管理

  • 不要

Webサーバー構築

  • Apacheは必須 : Apache・NginxでWebサーバーを構築できる
  • 不要 : リバースプロキシを設定できる
  • 不要 : エラーログが読める
  • 必須 : バーチャルホストが設定できる
  • たまに必要 : Rewriteのルールが記述できる
  • 必須 : HTTPSのWebサーバーを立てられる
  • 不要 : HTTP/2化できる
  • 不要 : 負荷分散計画が立てられる

DBサーバー構築

  • PostgreSQLは必須 : MySQL / PostgreSQLでDBサーバーを構築できる
  • たまに必要 : DBサーバーのパフォーマンスチューニングができる
  • 必須 : ボトルネックとなっているクエリを特定し改善案が立てられる
  • 必須 : DBレプリケーションが構築できる
  • 必須 : DB MasterのHA化ができる
  • 不要 : DBの水平分割・垂直分割を組める
  • 必須 : 準同期レプリケーションが組める
  • 必須 : レプリケーションが停止した場合に原因対処と復旧ができる

DNSサーバー構築

  • 必須 : DNSの仕組みを理解している
  • 不要 : BINDでDNSサーバーを構築できる
  • たまに必要 : ゾーンファイルを記述できる
  • 不要 : DNSスレーブサーバーを構築できる

メールサーバー構築

  • 不要

キャッシュサーバー

  • 不要

ロードバランサー

  • 必須 : ipvsadm + keepalivedでLVSを構築できる
  • 不要 : PacemakerでHAIPを構成できる
  • 不要 : HAProxyでプロキシサーバーを構築できる
  • 不要 : ヘルスチェックスクリプトを記述できる
  • 知らない : BIG-IPの設定ができる

監視サーバー

  • 必須 : Muninでリソース監視ができる
  • 他は不要

ログ管理

  • 不要

AWS

  • 不要

仮想化

  • 不要

Docker

  • 不要

Ansible

  • 知らない

ストレージ

  • たまに必要 : CUIでパーティション操作ができる
  • 不要 : 各ファイルシステムの特性を理解している
  • 知らない : 誤って削除したファイルの救出方法を知っている
  • 必須 : 容量が肥大化しているファイルを特定できる
  • 必須 : ディスクI/Oを計測しボトルネックを特定できる
  • 必須 : ファイルマスクを理解している
  • たまに必要 : ファイルのタイムスタンプを変更できる
  • RAID1が必須 : RAID0〜RAID10までのRAID構成が組める
  • 必須 : ソフトウェアRAIDとハードウェアRAIDの特性の違いを理解している
  • 不要 : NFS環境が構築できる
  • 不要 : Samba環境を構築できる
  • 知らない : lsyncdを使ってファイル同期環境が構築できる
  • 知らない : テープドライブのCUI操作ができる

ネットワーク

  • 必須 : ネットワークレイヤーの違いを理解している
  • 必須 : ルーターとL3スイッチ、ネットワークハブとL2スイッチの違いを説明できる
  • 不要 : NICの特性を理解している
  • 不要 : BGPを理解している
  • 不要 : DHCPのルールを設定できる
  • 不要 : オートネゴシエーションの特性を理解しオン・オフともに設定できる
  • たまに必要 : WireSharkなどのパケットキャプチャツールを使用することができる
  • 知らない : iperfなどでネットワーク速度を計測できる
  • 不要 : Cisco IOSをCLIで設定できる
  • 不要 : OpenFlowを理解している
  • たまに必要 : ネットワークのボトルネックを特定できる
  • 必要 Luaは知らない: YAMAHA RTXシリーズをCLIで設定できる。Luaで拡張できる
  • 不要 : タグベースVLANやポートベースVLANを構築できる
  • 必要 : PPTP / IPsecのVPNを構築できる

メモリ

  • 不要

ラック

  • 不要


unable to read data from frontend

ErogameScapeではpgpoolを使って冗長構成をとっています。
2つのサーバーマシンのそれぞれにApache、pgpool、PostgreSQLを動かしています。

構成

通常は192.168.0.14に接続するようにしています。
pgpoolを使い始めたころから原因不明で、192.168.0.13がちょいちょい切り離される事象が発生していました。
192.168.0.013のPostgreSQLは問題なく動いていて、keepalivedも切れていないので、pgpoolの問題だと思っていたのですが、切り離された場合のログを見ても、いきなり切れたようにしか見えませんでした。
pgpoolのVerがあがって、PostgreSQLからの応答がない…と判断するまでの時間をかえることができるようになったので、そのパラメータを十分大きくしてみたのですが、NGでした。

切り離される際のpgpoolのログは以下の通りです。

2016-12-27 03:31:33: pid 28889: LOG:  received degenerate backend request for node_id: 1 from pid [28889]
2016-12-27 03:31:33: pid 28889: WARNING:  write on backend 1 failed with error :"Success"
2016-12-27 03:31:33: pid 28889: DETAIL:  while trying to write data from offset: 0 wlen: 5
2016-12-27 03:31:33: pid 13031: LOG:  starting degeneration. shutdown host erogamescape13(5432)
2016-12-27 03:31:33: pid 19938: ERROR:  unable to read data from frontend
2016-12-27 03:31:33: pid 19938: DETAIL:  socket read failed with an error "Connection reset by peer"
2016-12-27 03:31:33: pid 30138: ERROR:  unable to read data from frontend
2016-12-27 03:31:33: pid 30138: DETAIL:  EOF encountered with frontend
2016-12-27 03:31:34: pid 13031: LOG:  Restart all children
2016-12-27 03:31:34: pid 16765: LOG:  child process received shutdown request signal 3
2016-12-27 03:31:34: pid 18712: LOG:  child process received shutdown request signal 3
2016-12-27 03:31:34: pid 18047: LOG:  child process received shutdown request signal 3
2016-12-27 03:31:34: pid 19036: LOG:  child process received shutdown request signal 3
2016-12-27 03:31:34: pid 13031: LOG:  failover: set new primary node: -1
2016-12-27 03:31:34: pid 13031: LOG:  failover: set new master node: 0
たいていこの時間あたりに切り離されるので、朝起きた時に気がついて、復帰させるということをしていました。
この3時30分頃、何が起こっているのか?と思って調べたところ、ログのローテーションの時間なことが分かりました。
そのログの中でもapacheのログのローテートの時間であることも分かりました。
ErogameScapeのApacheのログは1日で350MBくらいなのですが、このログを切り替えてapacheを再起動する際に、pgpoolが他のサーバーマシンで動いているPostgreSQLを切り離すようでした。
※単純にapacheを再起動するだけでは切り離されることはありませんでした。

そこで、Apacheのログが350MBの1/3くらいになるような時間にApacheのログをローテーションすることにしました。
それから2週間…pgpoolが他のサーバーマシンで動いているPostgreSQLを切り離すことはなくなりました…

なぜpgpoolがApacheの350MB程度のログをローテーションする際に、gpoolが他のサーバーマシンで動いているPostgreSQLを作成させて切り離すことがあるのか分からないのが、もやっとしますが、とりあえず切り離されなくなってよかったかなと…





記事検索