ms μs
Memcached
NoSQL
NoSQL SQL
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
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
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
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
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
http://redis.io/commands
strings, lists, hashes, sets, sorted sets, bitmaps, HyperLogLogs
ACID対応のトランザクション
Snapshots か append-only log
起動
これ以外のサブネット、セキュリティおよびパラメータグループの設定は既に行っているとします...
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:
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" }
}
}
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
Availability Zone #1 Availability Zone #2
“Primary Endpoint” を使用します
‘replica’ endpoints を使用します*‘primary’ も使用可能
Auto-Failover レプリ遅延のみでレ
プリカ昇格
DNSの変更なし
クラスタへの接続
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
+ その他もろもろ
// 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 呼び出し
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
あくまでも自動検知情報を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
# 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は常に使用
メモリ &モニタリング
>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
Source:http://blog.elijaa.org/index.php?pages/phpMemcachedAdmin-Download
Alarms
– 用量
セキュリティ
• ElastiCacheそのものは、認証や暗号化も基本機能では持っていない
• VPCのプライベートサブネットでElastiCacheクラスターを起動する
• 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
• 同スペックでの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
Redis運用時の注意点
の前に・・・
• Amazonが独自に拡張したRedis• 2015/9/28にリリース済!• ElasitiCacheのRedis 2.8.22 以上• 改善点
• Swapの効率化• 同期の効率化
• Redisにおける運用注意点• Redis バックアップ時のSwap• Primary-Replica 同期
• 実行時間の長いコマンド• ElastiCacheのRedisにおける運用注意点
• DNS キャッシュ
copy-on-write
• Amazon Redisでは BGSAVE コマンドをMemory使用率が高い状況でも使えるように改善• Memory使用率が抑える事が可能
Master ReplicasAmazon Redisでは改善(軽減)
• 高負荷時のPrimary-Replica 同期時 – 初期同期時には書き込みを制限する (Update の同期は継続して行います)
• Replica 初期化 – フェイルオーバー実行時にPSYNC と 完全同期の適切な方を選択する様になった
• DISK Less構成時の primary-replica 同期速度の向上
http://bit.ly/jvm-dns
New!
“Primary Endpoint” を使用します
‘replica’ endpoints を使用します*‘primary’ も使用可能