Nginx Nginx 负载均衡配置怎么实现不同主机上的数据同步的

xiaoxiao · 2015年07月14日 · 最后由 rubyu2 回复于 2015年07月17日 · 11174 次阅读

今天学习了 Nginx 的负载均衡配置,具体的服务器主机如图所示,由前面的服务器主机将请求转发给后端的服务器处理。

upstream backend {
    ip_hash;    
    server 192.168.1.201;
    server 192.168.1.202;
    server 192.168.1.203;
    server 192.168.1.204;
}
location / {
    proxy_pass http://backend;
}

那么问题来了,后端的服务器位于不同的物理主机,用什么办法实现不同主机数据的同步的,比如会话数据,应用数据等。不知道 rubychina 是怎么处理这个问题的。

会话数据一般是在 loadbalance 上设置会话保持,这样同一用户的访问会转到同一台主机上,这样就不存在会话数据共享的问题,否则要考虑 session 同步 应用数据可以采用共享连接同一个数据库实现,这种方式在初期是完全 ok 的,除非到了数据库有瓶颈的时候要分库

初期可以共享数据库 以后可以做成多主数据库同步的方式(比如 galera) 本地文件的话 nfs 挂载,也可以用分布式文件系统(比如 glusterfs)

  1. 会话数据一般放在共享存储中,如放到 redis 或关系数据库,会话 id 一般就保存在 cookie 中;
  2. 应用的结构化数据,一般都是放在集中的数据里,比如 mysql, pg 或 mongodb, 为了性能可以使用缓存;
  3. 应用的非结构化数据,比如用户上传文件,简单的话可以放云存储中,比如七牛或又拍;另一种方式是搭网络共享文件存储系统,如 nfs, 或者分布式文件系统,如 moosefs, dfs 等等。

1,用同一个缓存数据库和应用数据库。业务太大再考虑集群。 2,用云存储保存文件。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号