谈谈集群解决方案

       在互联网项目中,往往面临着高用户量、高并发的问题,造成服务器的压力非常大,特别是电商项目,以淘宝天猫为例,近年双十一的成交量屡创新高,可想而知淘宝天猫的服务器面临的并发量有多大,单一服务器肯定承受不住。这些互联网项目的服务器一般都是采用集群部署的方式,那么下面我们来了解一下集群部署的解决方案。

1.什么是集群

        集群是将一组相对独立的计算机软件或硬件连接在一起,构成一个组,共同完成计算工作,对外,集群就像是一个独立的服务器,集群中的单个服务器作为一个节点,共同去处理相同的任务,大大减轻每台服务器的处理压力。

2.集群与分布式的区别

        分布式技术也是互联网项目使用比较多的技术,都需要有很多的节点服务器协同工作,那么集群与分布式的区别是什么呢?分布式是指将一个系统进行拆分,拆分成多个子系统,各个子系统实现不同的功能,单独部署在不同的服务器上。通俗来说,多个服务器有不同的分工,做不同的事情,属于分布式,多个服务器做同一件事情,属于集群。

3.集群方案的具体实践

        在我们的实际项目部署中,一般需要采用集群部署的有,数据库集群,例如mysql集群,Tomcat集群,缓存Redis集群,分布式中使用到的zookeeper集群等等。下面以搭建Redis集群redis-cluster集群为例。

3.1准备工作

(1)安装gcc(Redis是c语言开发的,安装Redis需要C语言的编译环境,所以需要先安装gcc)

安装命令:yum install gcc-c++

(2)安装ruby(我们需要使用ruby脚本来实现集群搭建)

安装命令:

yum install ruby

yum install rubygems

(3)将Redis源码包上传到Linux系统(没有的先去网上下载),解压Redis源码包

(4)进入Redis源码文件夹,使用make命令编译Redis源码

(5)创建目录/usr/local/redis-cluster,安装3个Redis实例,分别安装在一下目录(注:由于服务器不足,演示的是搭建伪集群)

/usr/local/redis-cluster/redis-1

/usr/local/redis-cluster/redis-2

/usr/local/redis-cluster/redis-3

第一个Redis实例使用命令make install PREFIX=/usr/local/redis-cluster/redis-1,其他使用同样方法安装

(6)把Redis解压文件夹中的redis.conf文件分别复制到刚安装的Redis各个实例下的bin目录下

/usr/local/redis-cluster/redis-1/bin

/usr/local/redis-cluster/redis-2/bin

/usr/local/redis-cluster/redis-3/bin

(7)修改redis.conf中Redis的运行端口,使得各个Redis实例的运行端口不一样(这里分别改为7001,7002,7003),同时将cluster-enabled yes前的注释去掉

(8)启动每个Redis实例,分别对三个实例使用下面的命令启动

cd /usr/local/redis-cluster/redis-1/bin/

./redis-server redis.conf

(9)上传redis-3.0.0.gem,安装ruby用于搭建redis集群的脚本

命令gem install redis-3.0.0.gem

(10)使用ruby脚本搭建集群,进入redis源码目录中的src目录,执行命令

./redis-trib.rb create --replicas 1 你的服务器ip:7001 你的服务器ip:7002 你的服务器ip:7003

以上成功完成后,就可以使用客户端连接Redis集群了,可以使用Redis-cli连接集群,也可以使用SpringDataRedis连接Redis集群,下面SpringDataRedis连接Redis集群的配置。

在你的工程项目中添加spring配置文件applicationContext-redis-cluster.xml

"1.0" encoding="UTF-8"?> 

"http://www.springframework.org/schema/beans" 

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 

  xmlns:context="http://www.springframework.org/schema/context" 

  xsi:schemaLocation="http://www.springframework.org/schema/beans   

            http://www.springframework.org/schema/beans/spring-beans.xsd   

            http://www.springframework.org/schema/context   

            http://www.springframework.org/schema/context/spring-context.xsd">  

  

"true" location="classpath:properties/redis-cluster-config.properties" />  

"redis-clusterConfiguration" class="org.springframework.data.redis.connection.redis-clusterConfiguration">  

"maxRedirects" value="${redis.maxRedirects}">  

"clusterNodes">  

  

"org.springframework.data.redis.connection.redis-clusterNode">  

"host" value="${redis.host1}">  

"port" value="${redis.port1}">  

  

"org.springframework.data.redis.connection.redis-clusterNode">  

"host" value="${redis.host2}">  

"port" value="${redis.port2}">  

  

"org.springframework.data.redis.connection.redis-clusterNode">  

"host" value="${redis.host3}">  

"port" value="${redis.port3}">  

  

     

   

  

"jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">  

   "maxIdle" value="${redis.maxIdle}" />   

   "maxTotal" value="${redis.maxTotal}" />   

  

"jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  >  

"redis-clusterConfiguration" />  

"jedisPoolConfig" />  

    

"redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  

"connectionFactory" ref="jeidsConnectionFactory" />  

  

添加属性文件redis-cluster-config.properties

#cluster configuration

redis.host1= 你的redis服务器ip

redis.port1=7001

redis.host2=你的redis服务器ip

redis.port2=7002

redis.host3=你的redis服务器ip

redis.port3=7003

redis.maxRedirects=3

redis.maxIdle=100

redis.maxTotal=600

你可能感兴趣的:(谈谈集群解决方案)