チネル on EC2 フェイルオーバ (ENIなし)


基本知識

やること

  • Redisどもは、別のsubnetにぶち込む。 同じsubnetでもループはしない、NATと違うから。AZは複数でもいい
  • Redisを使う奴らは、Redisどもと別のsubnetにいる 同じsubnetでOK
  • Redisどもは Src/Destのチェックを切っておく
  • Redisども(sentinelと分離するなら sentinelども)にEC2-Role を振っておく、RoteTableのDel/Creができる権限があればいい
  • Redisどもに、lo0:vipを振っておく、ここで使うIPは VPCのレンジの中のIPではいけない
  • Redisを使う奴らの subnetに紐づく routetable に、VIP/32のエントリを追加、経路は redisのmasterのインスタンスID (上記リンクが詳しい解説)

詳細

RedisどもにふるVIP用 network-script

/etc/sysconfig/network-scripts/ifcfg-lo-vip
DEVICE=lo:vip
IPADDR=<使いたいVIP>
NETMASK=255.255.255.255
ONBOOT=yes

チネル切替スクリプト(抜粋)

やることは、元のルートテーブルエントリを潰して、自分のインスタンスIDで書き換え

#!/bin/bash
  aws --region ${REGION} ec2 delete-route --destination-cidr-block $VIP/32 --route-table-id ${ROUTE_TABLE_ID}
  aws --region ${REGION} ec2 create-route --destination-cidr-block $VIP/32 --route-table-id ${ROUTE_TABLE_ID} --instance-id ${INSTANCE_ID}

細かい話

その場限りでVIP振りたい、事前に全redisにVIP振るのがキモいなら

#add
ip addr add local <your vip>/32 dev lo label lo:vip
#del
ip addr delete local <your vip>/32 dev lo label lo:vip