需求:怕1个云死了全线死,所以鸡蛋不放在同一个云里。。那么问题来了。。
例如,在微软云买1个redis,在阿里云买1个redis,我怎么让他们同步?
集群貌似能同网的redis做同步吧,,不过不同的云意味着相互之间不能内网连接,集群感觉应该不行吧 ?
当然可以同步了
方法:
使用云搭建集群后,在每个node.conf配置文件中,默认都有一个本机内网IP,作为节点标识,所以这时候把你部署的这几个redis的配置文件的内网IP更换为外网IP,就可以了
不同的云可以搭建主从复制集群,但是不建议这么做。redis集群对网络环境还是有一定要求的,不同云之间走公网,网络环境不可控,数据量大,并发高就很容易发生不同云之间一直处于主从同步阶段,浪费带宽,影响redis主服务器。
主从复制原理可以参考:https://mp.weixin.qq.com/s/_u2zaC9VOLqN1TaJY8XeDg
一个比较复杂的方案是在主redis上启动一个同步aof文件到对端云上的服务,类似于mysql的binlog,这种方式不能百分百同步,并且需要考虑主redis发生切换后该如何处理等问题。
如果对数据实时性要求不高,可以考虑做冷备,即每天定时同步最新的rdb文件到另外一个集群中。
实现步骤:
(1) master redis开启aof, 具体参考 http://redis.io/topics/persistence ,启动master & slave, 本例中master为6379端口,slave为6380端口
(2) 下载simple_flow, git clone https://github.com/hongliuliao/simple_flow
(3) 编译出需要的文件: make && make test
(4) 启动 redis_repl_flow_server: ./bin/redis_repl_flow_server
(5) 启动 fileagent: ./bin/file_agent localhost 3491 ~/programs/redis-2.8.13/appendonly.aof
验证:
(1) 向master写一条数据, echo "set test9 abd" | nc localhost 6379
(2) 从slave查询数据: echo "get test9"| nc localhost 6380 , 如果响应如下,表示成功
集群一般情况下是使用内网IP组建的,但也可以用公网IP
数据安全性不能保证吧?毕竟用的是公网IP。
阿里云redis买双可用区且和云服务器同区即可。
不同的云,是可以的,但是不建议这种操作