使用 GAE/Node 部署 Memcached 集群(多实例的 Memcached)的要点是什么?
大纲
由于最近遇到了Bitnami并且轻松地搭建了memcached服务器,我感到非常惊喜。因此,这次我将继续以这股势头整理一下集群版的处理方法。
这是一个关于基本的运行时(适用于Node.js)的总结,但通过重新解读客户端库部分,我认为它可以在任何运行时中重复使用。
建立集群
-
- クラスタの構築自体は全て bitnami が行ってくれるため、
-
- https://console.cloud.google.com/launcher/details/bitnami-launchpad/memcached-cluster?hl=en から流れに沿ってポチポチするだけで簡単にできちゃいます
- 今回は 3 ノード作成します
从本地访问
-
- 早速ローカルから接続テストをしてみます
- ただ、その前に少々下準備が必要です
在主服务器上设置公钥
-
- グローバルメニュー[GCE]
-
- VM インスタンス
-
- primary server ( memcached-cluster-1-node-0 等 ) を選択
-
- 編集
-
- SSH キーが0 個あります ( 表示して編集する )
ssh-keygen 等で作成した公開鍵を user 名 bitnami で設定
保存
确认
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 インスタンス一覧画面に表示されています
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
尝试从记录器中确认一下。
做完了!ヾ(゚∀゚○)ノ≡ヽ(○゚∀゚)ノ゙
Translation: Done! ヾ(゚∀゚○)ノ≡ヽ(○゚∀゚)ノ゙
删除
gcloud deployment-manager deployments delete DEPLOYMENT_ID ( memcached-cluster-1等 )
結束
由于处理Memcached集群(多个Memcached实例)所需的信息片段化,因此我将其整理成一篇文章。
希望对某人有所帮助。m(__)m