amazon elasticacheのはじめ方

51

Upload: amazon-web-services-japan

Post on 14-Apr-2017

3.087 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Amazon ElastiCacheのはじめ方
Page 2: Amazon ElastiCacheのはじめ方

ms μs

Page 3: Amazon ElastiCacheのはじめ方

Memcached

Page 4: Amazon ElastiCacheのはじめ方

NoSQL

Page 5: Amazon ElastiCacheのはじめ方

NoSQL SQL

Page 6: Amazon ElastiCacheのはじめ方
Page 7: Amazon ElastiCacheのはじめ方
Page 8: Amazon ElastiCacheのはじめ方

Power, HVAC, net

Rack & stack

Server maintenance

OS patches

DB s/w patches

Database backups

Scaling

High availability

DB s/w installs

OS installation

you

App optimization

Page 9: Amazon ElastiCacheのはじめ方

Power, HVAC, net

Rack & stack

Server maintenance

OS patches

DB s/w patches

Database backups

Scaling

High availability

DB s/w installs

OS installation

you

App optimization

Page 10: Amazon ElastiCacheのはじめ方

Power, HVAC, net

Rack & stack

Server maintenance

OS patches

DB s/w patches

Database backups

Scaling

High availability

DB s/w installs

OS installation

you

App optimization

Page 11: Amazon ElastiCacheのはじめ方

OS patches

DB s/w patches

Database backups

Scaling

High availability

DB s/w installs

you

App optimization

Power, HVAC, net

Rack & stack

Server maintenance

OS installation

Page 12: Amazon ElastiCacheのはじめ方

Power, HVAC, net

Rack & stack

Server maintenance

OS patches

DB s/w patches

Database backups

App optimization

High availability

DB s/w installs

OS installation

you

Scaling

Page 13: Amazon ElastiCacheのはじめ方

http://redis.io/commands

strings, lists, hashes, sets, sorted sets, bitmaps, HyperLogLogs

ACID対応のトランザクション

Snapshots か append-only log

Page 14: Amazon ElastiCacheのはじめ方
Page 15: Amazon ElastiCacheのはじめ方

起動

Page 16: Amazon ElastiCacheのはじめ方

これ以外のサブネット、セキュリティおよびパラメータグループの設定は既に行っているとします...

Choose:

• Version

• Port

• Parameter group

• Multi-AZ & replication*

• Cluster name

• Node type

• # of Nodes (or replicas)

• S3 backup location*

Choose:

• Subnet group

• Availability Zones

• Security group

• Enable backups*

• Maintenance window

• SNS topic

*redis オプション

Select Engine:

Page 17: Amazon ElastiCacheのはじめ方

aws elasticache create-cache-cluster ¥

--cache-cluster-id mycache ¥

--engine redis ¥

--cache-node-type cache.m3.medium ¥

--num-cache-nodes 1

"Resources" : {

"CacheCluster" : {

"Type": "AWS::ElastiCache::CacheCluster",

"Properties": {

"CacheNodeType" : { "Ref" : "CacheNodeType" },

"CacheSecurityGroupNames" : [ { "Ref" : "CacheSecurityGroup" } ],

"Engine" : "memcached",

"NumCacheNodes" : { "Ref" : "NumberOfCacheNodes" }

}

}

Page 18: Amazon ElastiCacheのはじめ方

mycache-002.hnou5c.0001.usw2.cache.amazonaws.com:6379 (redis)

mycache.hnou5c.0002.usw2.cache.amazonaws.com:11211 (memcached)

mycache.hnou5c.cfg.usw2.cache.amazonaws.com:11211

mycacherepgroup.hnou5c.ng.0001.usw2.cache.amazonaws.com:6379

Page 19: Amazon ElastiCacheのはじめ方

Availability Zone #1 Availability Zone #2

“Primary Endpoint” を使用します

‘replica’ endpoints を使用します*‘primary’ も使用可能

Auto-Failover レプリ遅延のみでレ

プリカ昇格

DNSの変更なし

Page 20: Amazon ElastiCacheのはじめ方

クラスタへの接続

Page 21: Amazon ElastiCacheのはじめ方

Language Library

Ruby Redis-rb, Redis objects

Python Redis-py

Node.js node-redis

C#/.NET ServiceStack.Redis

PHP phpredis

Java Jedis

$telnet {primary-endpoint} 6379

>HSET hash mykey "mydata”

:1

>HGET hash mykey

$6

mydata

#from redis.io download:

$redis-cli -h {primary-endpoint}

redis-cliをRedis単体と同様にサポート

+ command history

+ latency test

+ backups

+ その他もろもろ

Page 22: Amazon ElastiCacheのはじめ方

// Java Example – requires http://aws.amazon.com/sdk-for-java

AmazonElastiCache ec = new AmazonElastiCacheClient();

String replicationGroupName = "mycache"; // change to your Redis Replication Group Name

String metadataURL = "http://169.254.169.254/latest/meta-data/placement/availability-zone";

String myAZ = new Scanner(new URL(metadataURL).openStream(), "UTF-8").useDelimiter("¥¥A").next();

ec.setRegion(Region.getRegion(Regions.US_WEST_2));

DescribeReplicationGroupsRequest rgrequest = new DescribeReplicationGroupsRequest()

.withReplicationGroupId(replicationGroupName);

DescribeReplicationGroupsResult rgresult = ec.describeReplicationGroups(rgrequest);

for (ReplicationGroup rg : rgresult.getReplicationGroups()) {

for (NodeGroup ng : rg.getNodeGroups()) {

for (NodeGroupMember ngm : ng.getNodeGroupMembers()) {

if (ngm.getCurrentRole().equals("replica")

&& ngm.getPreferredAvailabilityZone().equalsIgnoreCase(myAZ)) {

System.out.println(ngm.getReadEndpoint().getAddress() + ":" + ngm.getReadEndpoint().getPort());

}

}

}

}

AZ確認

ElastiCache

API 呼び出し

Page 23: Amazon ElastiCacheのはじめ方

telnetは運用や、情報取得には便利ですが、基本的にはアプリケーションからはクライアントライブラリを使用して接続します

Language Library

Ruby Dalli, Dalli:ElastiCache

Python Memcache Ring, django-elasticache

Node.js node-memcached

C#/.NET ElastiCache Auto Discovery Client

PHP ElastiCache Auto Discovery Client

Java ElastiCache Auto Discovery Client

(based on spymemcached)

$telnet {cfg-endpoint} 11211

>config get cluster

$telnet {node1} 11211

>set mykey 0 60 6

>mydata

STORED

>get mykey

VALUE mykey 0 6

mydata

END

Page 24: Amazon ElastiCacheのはじめ方
Page 25: Amazon ElastiCacheのはじめ方

あくまでも自動検知情報をEndpointで検知するだけである点

CacheCluster

Configuration Endpointxxx.cfg.apne1.cache.amazonaws.com

xxx.0001.apne1.cache.amazonaws.com

xxx.0002.apne1.cache.amazonaws.com

App

通常のクライアントライブラリ

App

Auto Discovery クライアントライブラリ

• 確認コマンド・Memchached 1.4.14以上>Config get cluster

・Memchached 1.4.14未満

>get AmazonElastiCache:cluster

Page 26: Amazon ElastiCacheのはじめ方

# PHP

$server_endpoint = "mycache.z2vq55.cfg.usw2.cache.amazonaws.com";

$server_port = 11211;

$cache = new Memcached();

$cache->setOption(

Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE);

# Set config endpoint as only server

$cache->addServer($server_endpoint, $server_port);

# Lib auto-locates nodes

$cache->set("key", "value");

Configuration

Endpointは常に使用

Page 27: Amazon ElastiCacheのはじめ方

メモリ &モニタリング

Page 28: Amazon ElastiCacheのはじめ方

>stats cachedump 1 100

ITEM mykey3 [4 b; 1414372065 s]

>stats slabs

STAT 1:used_chunks 1

>get mykey3

END

>stats cachedump 1 100

END

>stats slabs

STAT 1:used_chunks 0

Example

Page 29: Amazon ElastiCacheのはじめ方

Source:http://blog.elijaa.org/index.php?pages/phpMemcachedAdmin-Download

Alarms

Page 30: Amazon ElastiCacheのはじめ方
Page 31: Amazon ElastiCacheのはじめ方

– 用量

Page 32: Amazon ElastiCacheのはじめ方

セキュリティ

Page 33: Amazon ElastiCacheのはじめ方

• ElastiCacheそのものは、認証や暗号化も基本機能では持っていない

• VPCのプライベートサブネットでElastiCacheクラスターを起動する

• ElastiCacheノードへのアクセスを制御するため適切なセキュリティグループを適用する

Page 34: Amazon ElastiCacheのはじめ方

コスト

Page 35: Amazon ElastiCacheのはじめ方

• オンデマンド キャッシュノード– 初期費用無し、時間単位の従量課金モデル

• リザーブド キャッシュノード– 予約金を支払うことで時間当たり価格を割引(最大

70%節減)

• バックアップストレージ– Redis向け機能

– 各クラスタに対して1つのSnapshotは無料

• AZ間データ転送量– ElastiCache間の通信は課金対象外

– EC2とElastiCache間でAZを超える場合0.01 USD/GB が課金

時間あたりの料金(東京リージョン)

※2016年3月29日現在

Standard Cache Nodes - Current Generation

cache.t2.micro $0.026

cache.t2.small $0.052

cache.t2.medium $0.104

cache.m3.medium $0.120

cache.m3.large $0.240

cache.m3.xlarge $0.485

cache.m3.2xlarge $0.965

Memory Optimized Cache Nodes - Current Generation

cache.r3.large $0.273

cache.r3.xlarge $0.546

cache.r3.2xlarge $1.092

cache.r3.4xlarge $2.184

cache.r3.8xlarge $4.368

Page 36: Amazon ElastiCacheのはじめ方

• 同スペックでのEC2とElastiCacheでのTCOの比較– Multi-AZ構成時の通信料を削減可

– 運用コスト• バックアップ

• Multi-AZ Failover構成

• Clluster構成(Node Auto Discovery, Replication環境)

• バージョンアップ/スケールアップ

オンデマンド価格(月額換算) 重度リザーブド価格(月額換算)

インスタンスタイプ EC2 ElastiCache 差額 EC2 ElastiCache 差額t2.small $ 29 $ 38 $ 9 $ 21 $ 28 $ 7r3.large $ 146 $ 199 $ 53 $ 95 $ 130 $ 35

Page 37: Amazon ElastiCacheのはじめ方

Redis運用時の注意点

Page 38: Amazon ElastiCacheのはじめ方

の前に・・・

Page 39: Amazon ElastiCacheのはじめ方

• Amazonが独自に拡張したRedis• 2015/9/28にリリース済!• ElasitiCacheのRedis 2.8.22 以上• 改善点

• Swapの効率化• 同期の効率化

Page 40: Amazon ElastiCacheのはじめ方

• Redisにおける運用注意点• Redis バックアップ時のSwap• Primary-Replica 同期

• 実行時間の長いコマンド• ElastiCacheのRedisにおける運用注意点

• DNS キャッシュ

Page 41: Amazon ElastiCacheのはじめ方

copy-on-write

Page 42: Amazon ElastiCacheのはじめ方

– パラメータグループ reserved-memory

http://bit.ly/elasticache-bgsave

Page 43: Amazon ElastiCacheのはじめ方

• Amazon Redisでは BGSAVE コマンドをMemory使用率が高い状況でも使えるように改善• Memory使用率が抑える事が可能

Page 44: Amazon ElastiCacheのはじめ方
Page 45: Amazon ElastiCacheのはじめ方
Page 46: Amazon ElastiCacheのはじめ方

Master ReplicasAmazon Redisでは改善(軽減)

Page 47: Amazon ElastiCacheのはじめ方

• 高負荷時のPrimary-Replica 同期時 – 初期同期時には書き込みを制限する (Update の同期は継続して行います)

• Replica 初期化 – フェイルオーバー実行時にPSYNC と 完全同期の適切な方を選択する様になった

• DISK Less構成時の primary-replica 同期速度の向上

Page 48: Amazon ElastiCacheのはじめ方

http://bit.ly/jvm-dns

Page 49: Amazon ElastiCacheのはじめ方

New!

“Primary Endpoint” を使用します

‘replica’ endpoints を使用します*‘primary’ も使用可能

Page 50: Amazon ElastiCacheのはじめ方
Page 51: Amazon ElastiCacheのはじめ方