redis 3.0的集群部署

在做redis-cluster群集之前,我已经安装好redis并做好sentinel了,所以,我关掉了之前启动的redis。

在做redis-cluster的时候,发现了之前版本使用的大多是memcache群集,因为它是另一种内存式数据库,因为它不能持久化的特点,所以公司并没有采用它。或者只能称之为缓存, 不能说它是库

1、创建redis节点

我们将在一台服务器上面创建6个节点,通过它们自主选举,会产生3个master和3个slave。


配置好了,就相应地把这个修改后的配置文件拷贝到 7001  7002 7003 7004 7005目录,注意要修改为相应的监听端口,例:port 7001。

2、接下来,启动服务,进入节点目录

依次执行  redis-server  redis.conf 就可以看到生成了appendonly.aof  nodes.conf。

ps -ef | grep redis 查看是否启动成功

netstat -tnlp | grep redis 可以看到redis监听端口

   我们除了看到 配置文件中设置的端口700*    还有700*+10000  (1700*), 前者是客户端访问的, 后者是集群内部节点之间访问的.

    注意:在多台Server间搭建集群,如果开了防火墙的,需要设置iptables开放上面所有端口.

3、创建集群

官方提供了一个工具:redis-trib.rb 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.

#yum -y install ruby ruby-devel rubygems rpm-build

ubuntu安装ruby如下:
# sudo apt-get update
# sudo apt-get install ruby
或者
# sudo apt-get install ruby2.0

  再用 gem 这个命令来安装 redis接口,gem貌似是ruby的一个工具包  反正没错就是了。

  # gem install redis    //等一会儿就好了

/opt/redis-3.0.0/src/redis-trib.rb  create  --replicas  1  127.0.0.1:7000  127.0.0.1:7001  127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005  127.0.0.1:7002


注意:127.0.0.1改为本机地址。

如果有报错,如下


说明之前启动过,已经在相应目录先生成了3个文件,appendonly.aof、dump.rdb、nodes-7000.conf,需要把原来的这3个数据文件删掉。

解释下, --replicas  1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)。前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。

如果不先开启相应的redis,则启动集群发现报错如下:

所以要先启动redis,再启动群集。

运行中,提示Can I set the above configuration? (type 'yes' to accept): yes    //输入yes

4. 测试

  1)get 和 set数据

    redis-cli -c -p 7000

    进入命令窗口,直接 set  hello  howareyou

    直接根据hash匹配切换到相应的slot的节点上。

    还是要说明一下,redis集群有16383个slot组成,通过分片分布到多个节点上,读写都发生在master节点。

  2)假设测试

    哥果断先把Server2服务Down掉,(Server2有1个Master, 2个Slave) ,  跑回Server1, 查看一下 发生了什么事,Server1的3个节点全部都是Master,其他几个Server2的不见了

    测试一下,依然没有问题,集群依然能继续工作。

    原因:  redis集群  通过选举方式进行容错,保证一台Server挂了还能跑,这个选举是全部集群超过半数以上的Master发现其他Master挂了后,会将其他对应的Slave节点升级成Master.

    疑问: 要是挂的是Server1怎么办?    哥试了,cluster is down!!    没办法,超过半数挂了那救不了了,整个集群就无法工作了。 要是有三台Server,每台两Master,切记对应的主从节点

            不要放在一台Server,别问我为什么自己用脑子想想看,互相交叉配置主从,挂哪台也没事,你要说同时两台crash了,呵呵哒......

  3)关于一致性

    我还没有这么大胆拿redis来做数据库持久化哥网站数据,只是拿来做cache,官网说的很清楚,Redis Cluster is not able to guarantee strong consistency. 

  4)项目中实践

    项目是java的,选了 Jedis 这个开发包,哥先去跑跑看,就写到这里啦。有什么重大发现再续写喔。


2016.3.30

今天公司需要又搭建一套redis集群,而且一个是centos 另一个是ubuntu

在centos中,yum源里面的ruby没有更新,导致gem无法安装redis接口,从而无法进行集群操作。出现如下图的现象:

redis 3.0的集群部署_第1张图片

报错如上,通过公司的牛人,把这个弄好了,具体的我没有问。通过gem list发现有redis 3.xxx了,所以成功了。(牛人给的解决的网址 https://ruby.taobao.org/)

然后我继续弄,发现报错如下:

首先,我以为是像第一次安装一样出的错,于是我删了里面多余的东西,重启又重启,发现还是有问题。于是用1.143远程1.142的不同端口,发现报错如下:


解决1:把1.142写进1.143的hosts里面,还是没法解决。

解决2:我把selinux关掉,然后重启,发现还是没解决。

解决3:systemctl stop firewalld.service ,good ,问题解决。

总结解决办法,gem安装redis接口是必须,所以要保证源的正确性,也就是最新版的最好。然后必须关掉selinux和firewalld,就可以解决no route to host的问题了。

然而……

redis 3.0的集群部署_第2张图片

还是得把里面多出来的东西删了,然后重启,就ok了。

你可能感兴趣的:(redis)