前提我们之前已经搭建过主从架构,在A,B上都部署redis并且启动了开机启动,A是主节点,B是从节点,同时我们在A,B,C上都部署了哨兵。那么我们需要先停掉之前所有的实例。三个机器都要搞一下
redis cluster: 自动,master+slave复制和读写分离,master+slave高可用和主备切换,支持多个master的hash slot支持数据分布式存储。
1、redis cluster的重要配置
主要有以下重要的配置:
cluster-enabledcluster-config-file:这是指定一个文件,供cluster模式下的redis实例将集群状态保存在那里,包括集群中其他机器的信息,比如节点的上线和下限,故障转移,不是我们去维护的,给它指定一个文件,让redis自己去维护的 cluster-node-timeout:节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务
2、在三台机器上启动6个redis实例
redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,3个master,3个slave,最少的要求。
正式环境下,建议都是说在6台机器上去搭建,至少3台机器
保证,每个master都跟自己的slave不在同一台机器上,如果是6台自然更好。我们是三台机器。
(1)在eshop-cache03上部署目录
需要创建目录:
/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)
mkdir /etc/redis mkdir -p /var/redis/6379
(2)编写配置文件
在每台机器上都需要执行以下:
mkdir -p /etc/redis-cluster mkdir -p /var/log/redis #(7001要改,7001,7002在第一台,7003,7004在第二台) mkdir -p /var/redis/7001
我们一共有6个实例,那么需要6份配置文件,3个master,每个master带一个slave。下面7001在不同配置中需要改一下。
port 7001 cluster-enabled yes cluster-config-file /etc/redis-cluster/node-7001.conf cluster-node-timeout 15000 daemonize yes pidfile /var/run/redis_7001.pid dir /var/redis/7001 logfile /var/log/redis/7001.log bind 192.168.31.187 appendonly yes
将每个配置文件中的slaveof给删除或者注释
将上面的配置文件,在/etc/redis下放6个,分别为: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf,注意上面的配置的7001相对应改一下,bind的地址不同机器也不同
(3)准备生产环境的启动脚本
在/etc/init.d下,放6个启动脚本,分别为: redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006。我们可以直接把之前的给靠过来改:
cd /etc/init.d cp redis_6379 redis_7001 vi redis_7001
把里面的端口号给改了。
每个启动脚本内,都修改对应的端口号
要是第三台还没有redis_6379文件,可以从其他机器拷贝一份过去即可。
(4)分别在3台机器上,启动6个redis实例
注意将每个配置文件中的slaveof给删除
如果出现权限不够的话,直接使用
chmod 777
3、创建集群
我们只需要在第一台机器执行以下命令,因为启动集群需要ruby语言环境。
cd /usr/local/ yum install -y ruby yum install -y rubygems gem install redis
在执行gem install redis
,中间会遇到一个问题:redis requires Ruby version >= 2.3.0.,版本号不对。
[root@localhost ~]# gem install redis Fetching: redis-4.1.2.gem (100%) ERROR: Error installing redis: redis requires Ruby version >= 2.3.0.
我们需要先安装rvm,然后通过rvm安装ruby正确版本。
先安装crul:
yum install curl
然后执行下面命令安装RVM:
# (有时候会出错,多执行一次) curl -L get.rvm.io | bash -s stable
出现下面的秘钥:
把这一段秘钥拷贝到命令行回车。
然后执行下面命令:
source /etc/profile.d/rvm.sh # 或者 source /usr/local/rvm/scripts/rvm
列出ruby版本
rvm list known
我选择了这个版本:
rvm install 2.6.3
安装完之后卸载原来的版本,指定版本:
rvm use 2.6.3 rvm remove 2.0.0 ruby --version
然后再执行install命令就可以啦。
gem install redis
安装成功就可以接着执行下面的命令:
cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin redis-trib.rb create --replicas 1 192.168.8.181:7001 192.168.8.181:7002 192.168.8.182:7003 192.168.8.182:7004 192.168.8.183:7005 192.168.8.183:7006
–replicas: 是指每个master有几个slave
6台机器,3个master,3个slave,尽量自己让master和slave不在一台机器上,这个是集群自动决定的。
我们会看到实际上集群已经起来了:
slot已经分配完成,也可以用下面的命令查看一下:
redis-trib.rb check 192.168.31.187:7001
至此,一个cluster就搭建完成了。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
技术之路不在一时,山高水长,纵使缓慢,驰而不息。