使用 GAE/Node 部署 Memcached 集群(多实例的 Memcached)的要点是什么?

大纲

由于最近遇到了Bitnami并且轻松地搭建了memcached服务器,我感到非常惊喜。因此,这次我将继续以这股势头整理一下集群版的处理方法。

这是一个关于基本的运行时(适用于Node.js)的总结,但通过重新解读客户端库部分,我认为它可以在任何运行时中重复使用。

建立集群

    • クラスタの構築自体は全て bitnami が行ってくれるため、

 

    • https://console.cloud.google.com/launcher/details/bitnami-launchpad/memcached-cluster?hl=en から流れに沿ってポチポチするだけで簡単にできちゃいます

 

    今回は 3 ノード作成します
スクリーンショット 2018-03-05 21.42.26.png

从本地访问

    • 早速ローカルから接続テストをしてみます

 

    ただ、その前に少々下準備が必要です

在主服务器上设置公钥

    • グローバルメニュー[GCE]

 

    • VM インスタンス

 

    • primary server ( memcached-cluster-1-node-0 等 ) を選択

 

    • 編集

 

    • SSH キーが0 個あります ( 表示して編集する )

ssh-keygen 等で作成した公開鍵を user 名 bitnami で設定
保存

スクリーンショット 2018-03-05 22.18.31.png

确认

ssh -i /path/to/key bitnami@SERVER1_EXTERNAL_IP

SSH 端口转发

ローカルからはポートフォワーディングによる接続が推奨されていた のでそれに習う

ssh -N 
    -L 11211:SERVER1_INTERNAL_IP:11211 
    -L 11212:SERVER2_INTERNAL_IP:11211 
    -L 11213:SERVER3_INTERNAL_IP:11211 
    -i /path/to/key bitnami@SERVER1_EXTERNAL_IP

请用memcached-cli进行确认

    ローカルでの確認には memcached-cli を利用します
memcached-cli 127.0.0.1:11211
127.0.0.1:11211>
memcached-cli 127.0.0.1:11212
127.0.0.1:11212>
memcached-cli 127.0.0.1:11213
127.0.0.1:11213>

从GAE / Node应用程序访问

MemJS 是 Memcached 的客户端

    • Node アプリケーション上では Memcached クライアントとしてMemJS を利用します

 

    • 複数インスタンスに対する読み書きのロジックが気になったので調べたところ key を数値化し server 台数で割った余りの index から set / get するサーバーを算出していました

このロジックにより、ノードが複数あっても同じキーが重複して保存されるということが無いようです

应用程序的配置

    • GAE からは GCE の内部 IP に直接接続できるので SSH トンネルは必要ありません

内部IPは VM インスタンス一覧画面に表示されています

スクリーンショット 2018-03-05 22.18.31.png

app.yaml に Memjs が必要としている環境変数を設定

パスワードは VM インスタンス詳細のカスタムメタデータ PROVISIONER_PEER_PASSWORD に書いてあります

env_variables:
    # https://github.com/alevy/memjs
    MEMCACHIER_SERVERS: SERVER1_INTERNAL_IP,SERVER2_INTERNAL_IP,SERVER3_INTERNAL_IP
    MEMCACHIER_USERNAME: user
    MEMCACHIER_PASSWORD: ************

从应用程序中执行和确认

    あとはライブラリの仕様通りに get や set するだけ

使用 memcached-cli 设置用于确认的数据。

>set test huga

部署测试代码

import * as Memjs from 'memjs';

// memcache 部分抜粋
const client = Memjs.Client.create();
client.get('test', (err: any, val: Buffer) => {
    console.log(err, val.toString());
});
gcloud app deploy app.yaml

尝试从记录器中确认一下。

スクリーンショット 2018-03-02 22.15.21.png

做完了!ヾ(゚∀゚○)ノ≡ヽ(○゚∀゚)ノ゙

Translation: Done! ヾ(゚∀゚○)ノ≡ヽ(○゚∀゚)ノ゙

删除

gcloud deployment-manager deployments delete DEPLOYMENT_ID ( memcached-cluster-1等 )

結束

由于处理Memcached集群(多个Memcached实例)所需的信息片段化,因此我将其整理成一篇文章。
希望对某人有所帮助。m(__)m

广告
将在 10 秒后关闭
bannerAds