9月 122018
 

对于http负载均衡,往往有超时限制;对于tcp负载均衡,往往不做源地址转换(无法通过配置的方式设置为需要源地址转换),对于如下部署方式:

APP如果调用自己的话,可能服务器A发起请求,经过负载均衡后,又落到了服务器A自身,这是,由于负载均衡没有做源地址转换,所以,A的回包是发现目的地址就是自己,就不需要离开本机了,然而这种没有经过源地址转换的回包是不会被认可的,所以,这种部署方式存在较大弊端,尤其是一个服务器上部署多个应用时,应用之间的频繁调用就必然会遇到这个问题。

 

改进方案:

 

如果请求发起总是在APP上,则上述模式工作的会比较好;

但是,还有情况需要考虑,nginx做内部重定向的情况也是非常常见的,当访问a.i.phpor.net 时,很可能需要nginx直接内部转发到b.i.phpor.net ,这是,请求发起者是nginx,为了节省资源,b.i.phpor.net 也是使用的同样的负载均衡和nginx,于是,又出现了前面所讨论的问题。

 

再次改进,确保nginx不会重定向请求到负载均衡,毕竟还是要回来,索性在nginx上稍微麻烦一些,直接转发到自己,或者nginx上将所有自己能提供的服务的域名都解析到127.0.0.1

 Posted by at 下午 4:43
1月 172018
 

一般来讲,如果我们要从自建的redia迁移到阿里的redis,可以采用aof文件的办法,通过:

创建一个aof文件,也可能你的配置下本来就有这个文件,然后通过:

其中 $big_number 是一个足够大的数,保证tail是从文件的第一行开始的,如此,则可以保证源redis和目标redis的数据是一致的,代码上修改完配置后,源redis不再有写入,即可废掉源redis

 

由于阿里云的redis没有一个可以供我们tail的aof文件,所以,没法通过上述办法将阿里云redis数据平滑迁移到本地(抑或是阿里云其他)redis实例,不过也可以有不太平滑的办法的。

阿里云redis的备份其实就是一个rdb文件,只需要:

方案一:

  1. 停掉redis
  2. 创建redis备份 (这个在阿里云控制台是支持的)
  3. 下载备份
  4. 根据备份启动redis实例
  5. 生成一个aof文件
  6. cat aof | redis-cli target_host target_port 即可
  7. 如果需要在迁移的同时修改db号,即: 将db 1 中的数据迁移到db 2中,可参考: https://phpor.net/blog/post/5614
  8. 该方案需要暂停服务的

 

方案二:

  1. 使用工具  https://github.com/vipshop/redis-migrate-tool   https://q.cnblogs.com/q/93181/
  2. 该方案没法将源db修改成目标的其他db

方案三:

  1. 使用redis-port
 Posted by at 下午 2:01