一 mysql集群
mysql集群是防止短时间内大量的请求访问数据库不崩溃设计的,首先有三个概念,主从同步、读写分离、主备切换,
主从同步:在多个mysql数据库里确定一个主数据库和多个从数据库,主数据库用于写操作,从数据库用于读操作,把主数据库里的数据同步到从数据库里,从而减轻数据库负担,提高访问速度,主数据库是在写入数据时会把数据生成一个二进制的文件,并设定一个账号,从数据库拿到账号对二进制文件进行解析,写到自己本地库里,账号是所有数据库共享的。
读写分离:如果有一个请求进来该访问哪个数据库呢?这时就需要通过一个负载均衡器(mysql-proxy中间服务件)来分配请求到哪个数据库上,在配置文件里根据主从数据库的ip和端口号来分配哪个数据库用于写操作、哪个用于读操作,负载均衡器也要向外暴露ip和端口号给访问者,并且设置一个账号用于管理主从数据库;
主备切换:防止负载均衡器出故障,解决办法就是准备一台备用的中间服务件,它们之间通过第三方插件keepalive建立联系,一旦主挂掉,备用马上接管;
二 服务器集群
用于解决高并发的情况下分散压力的,大多使用Nginx作为负载均衡器来管理多个要被访问的服务器(tomcat+jdk),从而减轻服务器的压力,只需在Nginx的配置文件里配置upstream MyServer{Server ip,...}就能管理多个tomcat,这样集群的好处是如果有哪个服务器挂了,它就会健康检查到并且剔除,通过配置废弃剔除,让其它服务器继续提供服务、还有就是它负载均衡,可以根据每个服务器的性能差来分配请求任务,让性能好的服务器多分担一点,通过配置权重实现的,然后向外暴露端口号和ip,一旦请求进来,Nginx会根据tomcat性能情况分发。Nginx之间也是通过Keepalive来保证状态的;
三 Redis集群
当高并发时会大量请求静态资源导致服务器性能变差,就通过Redis集群,把大量的静态资源数据缓存到Redis的中央Session里,跟mysql集群差不多,先在多台机器上确定哪个是主的Redis和从的Redis,让每台机器的Session都能共享主Redis(中央Session)里的数据,主从同步就是把中央Session里的数据同步到从Redis的Session里,要读写分离和主备切换,要通过twemproxy代理服务器来实现读写分离,根据配置文件配置从的Redis的ip分配读取操作,给主Redis的ip分配缓存操作,一般都是有两个代理服务器,防止单点故障,Redis是一个key-value的数据结构,我们可以把每台机器的Session的id存入cookie里作为key,后面直接通过key去Redis拿到对应的值;
原理图