Nginx+session共享+memcached+cobar 前端负载均衡+数据库分布式处理(基础版本)

【背景说明】

之前在做一个系统,完全是按单机的模式来做,前端用一个tomcat服务器,数据库用mysql,然后用memcached做系统缓存减轻mysql访问压力。目前考虑到系统的可扩张性以及高可用性,制定了以下方案,在原有程序修改幅度最小的基础上,将系统转化为分布式架构。


【解决方案】

(1)前端:

        使用多个tomcat,tomcat之间通过自带cluster集群设置实现session共享(配置很简单,可以查看官网文档),前端通过Nginx做负载均衡,将用户的请求均衡的分配到下面的tomcat服务器上。

(2)数据库:

        原来单个schema扩展为多个,同时运行一个cobar实例将若干个schema整合起来。我这里的方案是,cobar暂未设置集群只运行了一个实例,就目前的需求来看可以满足了,后面可能还要加一个作为备份cobar实例,实现主从高可用。

        原来数据库中其实只有一张表容量比较大,已经对其进行了分区操作,应用中也只是将这张表进行了分库存储,各个库上数据不同但通过cobar可以看做是一张完整的表;其他表类似用户信息等数据量较小,没有必要分库(没必要分库的表本身就尽量不要分库),因此在各个库中都保存了一份一致的数据,在写入时,由于没有配置cobar路由规则,信息会在各个库中都写入;读出时,避免读出若干份相同的数据,在每个表上增加了一个字段,用来配置路由规则,使得读数据时只从其中一个schema中读数据。

(3)缓存:

        通过memcached+magent实现,简单起见设置两个memcached,主从备份,两个magnet,也是主从,避免单点故障。平时写入数据时magent都先往主memcached写,完成后同样往备份memcached写一份,读取的话都往主memcached中读取。

        考虑一个memcached宕机的情况:主memcached宕了以后magent自动转到备份memcached上,数据不会丢失,但是当主memcached恢复后,请求还是先会访问主的,因为重启后数据为空,所有数据都访问不到。此时建议先删除一个magent实例,再创建一个magent,但规则要变变,让原来的备份的memcached为主,重启的这个为备;再删除另一个magent,再创建新的magent。此时重启过的那台机器可以接入了,现在他已经为备份节点,现在自己通过一定方法将主节点上数据传过来,之后运行一段时间后备份节点中数据也将变为最新的了。

系统架构如下图所示:

      

方案实现前后原系统需要改动的地方:

(1)web端目前连接cobar而不是直接连mysql,cobar与mysql连接方式完全一致,因此改动很小

(2)对需要分库的表指定路由规则,不需要分库的表每个库上存一份,读取仅从一个库上读; 分库的表原来有连接操作的需要去掉,cobar不支持分库表的join,排序等操作,有针对性的修改原有sql语句

(3)读取缓存时访问magnet,程序上不需要修改,仅修改配置参数


【接下来要做的】

(1)为实现高可用,mysql 本身需要配置数据双向热备份,避免mysql单点故障

(2)需要检测cobar 对mysql主从切换是否可行,首先配置mysql心跳,配置主从,查看主机宕机后cobar能否根据心跳检测切换到从机

(3)目前仅使用一个cobar实例,需要实现cobar的主从,避免cobar单点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值