Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wanna Use Vitess in Orientation

@ジュジュ
July 01, 2019
1.2k

Wanna Use Vitess in Orientation

@ジュジュ

July 01, 2019
Tweet

Transcript

  1. Okano Kenya / @Juju_62q Belonging: - “CyberAgent, Inc” Team: “OpenSaaS

    Studio” Role: - “Backend Engineer” - “ほうれん草エバンジェリスト” Interest: - CloudNative - DevOps Dream: 働かないこと 2 2
  2. Getting Failed on Kubernetes 20 20 # Copy binaries (placed

    by build.sh) COPY --from=staging /vt/ /vt/ # Create mount point for actual data (e.g. MySQL data dir) VOLUME /vt/vtdataroot USER vitess command: - sh - "-c" - >- mkdir -p $VTDATAROOT/tmp && chown -R vitess /vt && su -p -c "/vt/bin/vtctld -cell {{cell}} Dockerfile yaml
  3. Getting Failed on Kubernetes 21 21 # Copy binaries (placed

    by build.sh) COPY --from=staging /vt/ /vt/ # Create mount point for actual data (e.g. MySQL data dir) VOLUME /vt/vtdataroot USER vitess command: - sh - "-c" - >- mkdir -p $VTDATAROOT/tmp && chown -R vitess /vt && su -p -c "/vt/bin/vtctld -cell {{cell}} Dockerfile yaml ユーザ切り替え前にCOPY
  4. Getting Failed on Kubernetes 22 22 # Copy binaries (placed

    by build.sh) COPY --from=staging /vt/ /vt/ # Create mount point for actual data (e.g. MySQL data dir) VOLUME /vt/vtdataroot USER vitess command: - sh - "-c" - >- mkdir -p $VTDATAROOT/tmp && chown -R vitess /vt && su -p -c "/vt/bin/vtctld -cell {{cell}} Dockerfile yaml ユーザ切り替え前にCOPY rootの所有物をvitessユーザでchown
  5. GCSにバックアップできない config: # Backup flags will be applied to components

    that need them. # These are defined globally since all components should agree. backup: enabled: true # this creates 1 cron job per shard that will execute a backup using vtctlclient # on this schedule. The job itself uses almost no resources. cron: # the default schedule runs daily at midnight unless overridden by the individual shard schedule: "0 0 * * *" # if this is set to true, the cron jobs are created, but never execute suspend: false 27 27 ここのvalueがエラーになる(未解決)
  6. 壁1: Transaction > The feature is implemented using traditional MySQL

    transactions, and hence inherits the same guarantees. 31 31 BEGIN; - ER_UNKNOWN_ERROR: vtgate: http://hogehoge: unrecognized statement: BEGIN;
  7. 壁1: Transaction 32 32 switch stmtType { case sqlparser.StmtBegin: return

    e.handleBegin(ctx, safeSession, sql, bindVars, destTabletType, logStats) case sqlparser.StmtCommit: return e.handleCommit(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtRollback: return e.handleRollback(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtSet: return e.handleSet(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtShow: return e.handleShow(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) case sqlparser.StmtOther: return e.handleOther(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) case sqlparser.StmtComment: return e.handleComment(sql) } return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unrecognized statement: %s", sql)
  8. 壁1: Transaction 33 33 switch stmtType { case sqlparser.StmtBegin: return

    e.handleBegin(ctx, safeSession, sql, bindVars, destTabletType, logStats) case sqlparser.StmtCommit: return e.handleCommit(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtRollback: return e.handleRollback(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtSet: return e.handleSet(ctx, safeSession, sql, bindVars, logStats) case sqlparser.StmtShow: return e.handleShow(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) case sqlparser.StmtOther: return e.handleOther(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) case sqlparser.StmtComment: return e.handleComment(sql) } return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unrecognized statement: %s", sql) パースがおかしい?(未解決) マッチしていない
  9. 感想: アーキテクチャ 48 48 etcd Kubernetes etcd Vitess 人類には早い分散データストア 人類には早いことが広く知られているKubernetes

    人類には早い分散データry ストレージ そもそも難しいストレージ 人類には早いステートフルアプリケーション
  10. 感想: 使い心地 50 50 - 全体的に個人としてただただ力不足 - etcd, PV, MySQL等使う上で理解しないといけないことは非常に多い

    - 一方でシャード、レプリケーションを包括的に管理できるのは非常に魅力的 - アプリケーションエンジニアの負荷を圧倒的に削減できる - アプリケーションからDB選択の機構が切り離されシンプルになるのでバグが減る - DBがKubernetesに置けるという事実にとても”夢”を感じた
  11. まとめ 51 51 - VitessのGettingStartedはそれなりに大変でした - 試すときは複雑なことを考えずHelmを使うといいと思います - 使うときはアーキテクチャやソフトウェアの責任範囲をきちんと認知しない と予期せぬトラブルを招きます

    - 少なくともまだ、自分には使いこなせないと感じた(RDS, CloudSQL最高!) - Kubernetes × ステートフルアプリケーションは今後もどんどん進化してい くと思うので期待して、情報を追って、手を動かしましょう! (僕も早く問題解決できるよう頑張ります)