ElastiCache做爲AWS的內存緩存組建能夠說作的一點也不友好了,redis
你能夠經過ElastiCache建立redis,memcache的實例,卻不能被外部訪問。緩存
人傻錢多的客戶總有人傻錢多的需求,他們本地作開發測試,須要用到redis,安全
因而他們決定在aws上建立一個redis的實例,用做本地開發測試。雖然我看不到價目表,但我想一臺redis實例應該也得很多錢。ssh
因而,我在public子網下建立了一個redis實例,本來覺得能夠經過終端節點的名稱加端口號來訪問到實例,結果我想多了。tcp
官方給出的解釋是:測試
好吧,我不是有意吐槽,至少它仍是給出瞭解決方法。3d
沒錯就是經過NAT實例blog
咱們先來講說要求:ip
(可能你看到這就已經以爲很麻煩了。。。)內存
環境準備:
接下來假設你在一個叫「TEST-VPC」下的「public-subnet」子網下建立了一個Redis的實例,你能夠經過ping它的主機名以獲取它的內網IP地址後面會用到。
好比你的redis的內網ip是:192.168.1.110 端口: 6379
而後咱們到EC2的界面選擇——》實例——》啓動實例
在選擇AMI的時候搜索帶有NAT標籤的鏡像(這裏我就默認選擇的第一個),資源怎麼劃分你們根據需求隨意搭配
注意:
……省略建立EC2實例的過程
好比你已經建立好一個NAT實例了,IP地址爲:192.168.1.120
接下來進入EC2界面——》彈性IP——》分配新地址,爲你的實例關聯一個彈性IP
到這裏你已經成功了一大半了。
登陸到NAT實例,爲 NAT 實例啓用 IP 轉發。如下命令可用於確認這一點:
cat /proc/sys/net/ipv4/ip_forward
啓用假裝:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
將 iptables 規則添加到 NAT 實例。
必須爲羣集中的每一個節點將 iptables 規則添加到 NAT 表,以便將緩存端口從 NAT 實例轉發到羣集節點。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6379 -j DNAT --to 192.168.1.110:6379
你能夠經過telnet測試是否成功:
telnet 203.0.113.73 6379
保存 iptables 配置。
在您測試和驗證規則以後保存規則。若是您使用基於 Redhat 的 Linux 分發(例如 Amazon Linux),請運行如下命令:
service iptables save
到這裏全部的配置就結束了
接下來就是真正的吐槽時間了!
首先客戶的提出的需求就已是一個另類的需求了,想必你們並很少見。
若是是本地開發測試,並不介意將你的redis建立在公有云上並經過公網訪問。
其次,咱們來算一下你此次建立所需的花費:
您的測試環境成本真的大,/不是禮貌的微笑