ちゃんるいすのブログ

オタクエンジニアの雑記

覚書

InnoDB Cluster のフェイルオーバー時間を計測してみる

InnoDB Cluster クエリが少ないとき クエリが多いとき 最低5秒以上で MySQL Router は新プライマリへ切り替わる MySQL Router のメタデータが更新されるタイミング InnoDB Cluster 環境は MySQL 8.0.17 Single-Primaryパターンは下記2つ クエリが少ないと…

俺的便利コマンド

tar + pv tar + pv $ pv backup.gz | tar xf - --use-compress-prog=pigz -C /mnt/data

AWS DMS を使ってプライベートクラウドの巨大な MySQL を Aurora MySQL へ移行してみた

今までプライベートクラウドで動いてたサービスが、データセンターの閉鎖に伴いどこかに移設しないといけない物語に AWS DMS を使ったので覚書として書いておく。 DB は 1.5TB の 45 億レコードとそれなりに大きいけどメンテ時間は動作確認を除いて 30 分ぐ…

俺的 MySQL Group Replication まとめ

既存のテーブルが Group Replication に準拠してるか エンジンが InnoDB かどうか テーブル構造が Group Replication 準拠か 既存のテーブルが Group Replication に準拠してるか エンジンが InnoDB であることが必要 Primary Key が必須だよ エンジンが Inn…

Cloudflare からプロキシされたアクセスを Nginx の real_ip_header でクライアントの IP アドレスを記録しつつ、Cloudflare からのアクセスのみを許可する

「お前のタイトル良く分かんねえんだけど?」 アクセスログに Cloudflare じゃなくてクライアント IP にしたい!&Cloudflare からのみアクセスしたい! 1. Cloudflare からプロキシされたアクセスを Nginx のアクセスログのクライント IP を正しいのにする …

俺的 MySQL 8 まとめ

俺的 MySQL 8 メモ 俺的 MySQL 8 メモ 1. MySQL 8 から SET PERSIST が使える 1. MySQL 8 から SET PERSIST が使える SET GLOBAL のグローバル変数の変更に加えて、再起動しても反映されるようになる。 mysql> SET PERSIST innodb_buffer_pool_size = 268435…

俺的 MySQL Router まとめ

1. MySQL Router はどこで動かすべきか 2. MySQL Router を挟むことでパフォーマンスに影響はあるか 2. bootstrap を実行したあとは気をつけろ 3. REST API で MySQL Router のメトリクスを取りたい REST API の有効化 1. MySQL Router はどこで動かすべきか…

Drone 1.x で特定のリポジトリに trusted フラグをつける

1. admin ユーザーを作成する DRONE_USER_CREATE=username:octocat,machine:false,admin:true,token:55f24eb3d61ef6ac5e83d550178638dc2. drone-cli インストール docs.drone.io3. drone-cli 設定 $ export DRONE_SERVER=http://192.168.20.21:8081 $ export…

k3OS で Kubernetes クラスタ環境を作る

Kubernetes 勉強したい 手順 1. k3OS iso download 2. ↑ の iso で VM を作る 3.1, server としてインストール 3.2. agent としてインストール 4. Reboot 後 3. 確認 Kubernetes 勉強したい ということで、自作サーバー3台(Proxmox)上に k3OS を3台用意…

俺的 Orchestrator まとめ

めっちゃ参考になるやつ。 yakst.comフェイルオーバーはしても Non-GTID だと CHANGE MASTER が実行されずに孤立した。 けど、↑ の yakst を見ると何も問題ないように書かれてる。 公式ドキュメントにも、GTID(Pseudo−GTID)じゃないと孤立するよとは書かれ…

Cloudflare WorkersKV を試す、ベンチマークもあるよ

Cloudflare WorkersKV 夢あって、個人サービスに導入してみたので感想 uploader.xzy.pw Cloudflare WorkersKV について 料金 始め方 公式 SDK で WorkersKV の操作 ベンチマーク 本番で Cloudflare WorkersKV を使うのはやめたほうが良いかもしれない たまに…

俺的 MySQL GTID レプリケーション

GTID & 非GTID の混合レプリは無理 レプリケーション止まった時 1. どこで止まったか確認する 2. エラーになった GTID をどうにかする GTID なしのレプリケーションに戻す バックアップとリストア スレーブの追加 Got fatal error 1236 from master when rea…

Cloudflare を使って特定のサイトにアクセスする際に Google OAuth を要求する「Access」が便利

Cloudflare 使いこなしてますか?機能多すぎて全部試しきれてないです。 やりたいこと 特定のサイトにアクセスする際に、Google OAuthを要求して特定のメールアドレスのときだけ許可をしたい。 だけど、特定の IP からのときだけはバイパスしたい。 Cloudfla…

Ansible AWX で既存の Inventory を読み込む

背景 既存の inventory を Ansible AWX で使いたい。 (ちなみに、Ansible AWX は動的インベントリを推奨しているのをドキュメントから感じる) 前準備 先にインベントリを GUI 上から作成しておく。 dev stg prd 実行 tower-cli ではなく、コンテナに入って…

Ansible AWX のアップグレード方法

3.0.0 -> 4.0.0 へのアップグレードをしたので覚書 インストール方法は release ページからファイルを落としてきて local_docker流れとして 1. バックアップ 2. 現環境を壊す 3. 新しいバージョンの AWX で環境を作る 4. バックアップから復元このやり方が公…

Goでビルドしたものを超簡単にrpmとdebにパッケージしてLinux向けに配布する

Linux サーバーで動かすことを前提に書いたものを Linux 向けに簡単にインストールさせるためにいちいち Go を入れたりするのは面倒。 あと、GitHub Enterprise(GHE)とかを使っているとパブリックなリポジトリに対してもトークンが必要だったり超面倒。な…

Go で Elasticache の Auto Discovery に対応する

PHP や、.NET の memcached クライアントは、AWS 公式で Auto Discovery に対応したライブラリを出してるけど Go にはない。 ので Go で書いてみた。configuration endpoint を叩いて、ノードのエンドポイントを取得するまで。↑ のように configuration endp…

Lambda@EdgeをCircleCI(Apex+シェルスクリプト)でデプロイする

Lambda@Edge のデプロイについて serverless framework や Apex では Lambda@Edge のデプロイが可能です。 しかし、serverless framework では記述内容も機能も多すぎるため1ファンクションだけ Lambda@Edge を使いたい場合には少し重すぎるため Apex + シ…

EC2の自動停止・起動を超柔軟に超簡単に実現する「AWS Instance Scheduler」

AWS Instance Scheduler aws.amazon.comAWS の中の人が作っていて 元は EC2 Scheduler という名前だったのが、AWS Instance Scheduler に変わった。テンプレートが用意されているので、CloudFormation で実行すれば構築が終わるという素晴らしい仕組み。 ア…

Ansible AWX 「サーバーエラーが発生しました。」を解決する

根本原因は分かってないけど postgres 関連。 pg_data_dir を /var/tmp/pg_docker にしていたけどいつの間に死んでいた。 ※ 更新 /var/tmp は消えないもんだと思ってたら普通に消える [root@test cron.daily]# cat /usr/lib/tmpfiles.d/tmp.conf # This file…

データのバックアップに悩むくらいならクラウドストレージの「Backblaze」に保存するのが賢いぞ

胡散臭いタイトルになってしまった。皆さんは自宅のファイルサーバーのバックアップはどうやって取ってますか? RAID とかですか?バックアップ用の HDD に流してるとかですか?でも家燃えたらどうします?Backblaze 良いですよ。 Backblaze とは www.backbl…

Fargate + gRPC で B/G とカナリアリリースを実現する

構成 課題① こんな構成のとき、API のタスクだけを更新する際に Blue/Green とカナリアリリースを実現するときにどうするのが良いか迷ったのでまとめておきます。 gRPC なので、Front -> Internal ALB -> API では、Internal ALB API は HTTP/1.1 になるため…

Ansible AWX + tower-cli の --limit が動かない問題

--limit が動かない $ tower-cli job launch --job-template=1 --limit $(hostname -f)こうしても、--limitが効かずに全インベントリに対して実行される。 原因はテンプレートの設定 制限の起動プロンプトにチェックを入れる制限はいわゆる、--limitのことな…

Ansible AWX のバックアップ・リストアのやり方(Docker編)

TL;DR バックアップ・リストアはできた。 コンテナ(awx_task)に直で入れたもの以外は全て復元できた。 概要 Docker で構築した Ansible AWX のバックアップ・リストアのやり方 環境 pg_username=awx pg_password=awxpass pg_database=awx Backup 1. postgr…

Ansible AWX Exception: project_update xx (failed) encountered an error (rc=2), please see task stdout for details の対処法を見つける方法

Exception: project_update 71 (failed) encountered an error (rc=2), please see task stdout for details ジョブがエラーになるジョブを実行した結果、プロジェクトのアップデートの段階でエラーが出たからエラーログを見て というエラー。 しかし、 http…

AnsibleでOpenStackのserver groupを適用したインスタンスを作成する

Ansible で OpenStack を使う準備 openstacksdk openstack credentials interpreter openstacksdk Ansible は brew とかで入れるより、外部モジュールを使う際は Ansible も pip で入れたほうが幸せになれる。 $ pip install openstacksdk openstack credent…

Cloudflare「Error 1000: DNS points to prohibited IP」の解決

概要 こんなシステムのとき、ユーザーから Cloudflare を通って最上段のリバプロのバックエンドが Cloudflare + proxy:on の環境のとき、「Error 1000: DNS points to prohibited IP」というエラーがでる。support.cloudflare.com 発生条件 以下のどれかに当…

個人サービスに定額課金を超手軽に導入する「Stripe」

概要 個人サービスで開発しているサービスに定額課金を試しに導入してみたくて、Stripe を使ってみたら最高に簡単に導入できたので紹介したいと思います。 uploader.xzy.pw Stripe 決済プラットフォームです。PayPal もそうです。 今回 PayPal を使わなかっ…

Ansible AWX + tower-cli で Toil を無くしていきたい

新社会人になって、気づけばもう半年が過ぎた。 体調を崩すと治るまで時間がかかったり、老いを感じる23歳(童貞)です。Ansible Advent Calendar 2018 の3日目の記事です。 2日目は、tomonorimatsumura さんの「AnsibleでCentOS7へジョークプログラムを…

Nginx で logrotate したのに新しいファイルに書き込まれない

nginx -s reopenでエラーがでないなら "/var/log/nginx/access.log" "/var/log/nginx/error.log" { missingok notifempty daily rotate 7 su nginx nginx create 666 nginx nginx notifempty sharedscripts postrotate nginx -s reopen endscript }こうしま…