概述
RedisCluster是从Redis 3.0版本之后提供的官方Redis集群解决方案,其可以避免哨兵机制复杂的Master监控与选举操作,也可以方便地实现数据的分片处理,发挥集群主机的性能优势,提供更加高效的Redis解决方案,其中考虑到去中心化的架构模式。每个节点都与其他节点有关联,只需获得一个节点的信息其他节点的信息也就可以获取到。
Redis集群会根据已有的主机分配主从关系将所有保存的数据平均分配到每一太Master主机中。若某台Master主机无法因出现问题无法提供服务就会有其他Master主机参与
选举产生一台的master主机继续提供服务。
具体实现步骤
集群架构采用9台Redis数据库服务器,其中三台主机每台上有三个Redis进程。主机信息如下:
编号 | 主机名称 | IP地址 | 描述 |
---|---|---|---|
1 | node1 | 192.168.1.6 | Redis主服务x3 (6381,6382,6383) |
1 | node2 | 192.168.1.7 | Redis主服务x3 (6381,6382,6383) |
1 | node3 | 192.168.1.8 | Redis主服务x3 (6381,6382,6383) |
node1、node2、node3 主机
apt-get install ruby ruby-dev rubygems #Ruby开发环境配置相关开发包的配置
mkdir -p /usr/data/redis/{
redis-6381,redis-6382,redis-6383}/{
logs,run,dbcache,config} #新建三套数据目录
#复制三套配置文件
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6381.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6382.conf
cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6383.conf
vim /usr/local/redis/conf/redis-6381.conf #打开配置文件
#配置信息
protect-mode no #关闭受保护模式
port 6381 #监听端口
pidfile /usr/data/redis/redis-6381/run/redis_6381.pid #pid保护目录
dir /usr/data/redis/redis-6381/dbcache
logfile "/usr/data/redis/redis-6381/logs/redis_6381.log"
#requirepass test #取消密码配置
cluster-enabled yes #配置开启cluster集群
cluster-config-file /usr/data/redis/redis-6381/config/nodes-6381.conf
cluster-node-timeout 15000 #定义连接的超时时间
vim /usr/local/redis/conf/redis-6382.conf #打开配置文件
#配置信息
protect-mode no #关闭受保护模式
port 6382 #监听端口
pidfile /usr/data/redis/redis-6382/run/redis_6382.pid #pid保护目录
dir /usr/data/redis/redis-6382/dbcache
logfile "/usr/data/redis/redis-6382/logs/redis_6382.log"
#requirepass test #取消密码配置
cluster-enabled yes #配置开启cluster集群
cluster-config-file /usr/data/redis/redis-6382/config/nodes-6382.conf
cluster-node-timeout 15000 #定义连接的超时时间
vim /usr/local/redis/conf/redis-6383.conf #打开配置文件
#配置信息
protect-mode no #关闭受保护模式
port 6383 #监听端口
pidfile /usr/data/redis/redis-6383/run/redis_6383.pid #pid保护目录
dir /usr/data/redis/redis-6383/dbcache
logfile "/usr/data/redis/redis-6383/logs/redis_6383.log"
#requirepass test #取消密码配置
cluster-enabled yes #配置开启cluster集群
cluster-config-file /usr/data/redis/redis-6383/config/nodes-6383.conf
cluster-node-timeout 15000 #定义连接的超时时间
#分别启动实例6381、6382、6383
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6383.conf
ps aux | grep redis #查看当前主机Redis的进程
gem install redis #使用Ruby管理控制Redis 安装Redis的相关依赖包
cp redis-6.2.1/src/redis-trib.rb /usr/local/redis/bin/ #复制集群配置程序
#Redis主机加入到集群配置中
#/usr/local/redis/bin/redis-trib.rb create -replicas 2 192.168.1.6:6381 192.168.1.6:6382 192.168.1.6:6383 192.168.1.7:6381 192.168.1.7:6382 192.168.1.7:6383 192.168.1.8:6381 192.168.1.8:6382 192.168.1.8:6383 #已经被移除了
/usr/local/redis/bin/redis-cli --cluster create 192.168.1.6:6381 192.168.1.6:6382 192.168.1.6:6383 192.168.1.7:6381 192.168.1.7:6382 192.168.1.7:6383 192.168.1.8:6381 192.168.1.8:6382 192.168.1.8:6383 --cluster-replicas 2 -a test #
/usr/local/redis/bin/redis-cli -h 192.168.1.6 -p 6381
CONFIG SET protected-mode yes #打开受保护模式
ONFIG SET requirepass test #设置认证密码
auth test #设置密码需要登陆
CONFIG SET masterauth test #整个集群需要一个统一的密码
CONFIG REWRITE #重写写入配置文件
SHUTDOWN #关闭当前Redis进程
#在所有的主机上重新启动redis进程
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
vim /var/lib/gems/2.7.0/gems/redis-3.0.7/lib/redis/client.rb #由于通过配置命令实现了密码处理,所以此时需要手动修改Ruby配置文件,追加Redis的连接密码,才可以正常使用RedisCluster集群
#/usr/local/redis/bin/redis-trib.rb check 192.168.1.8:6382 #当前版本6.2.1不可用改用下面
redis-cli --cluster check 192.168.1.8:6382 -a test #检测集群状态
/usr/local/redis/bin/redis-cli -h 192.168.1.8 -p 6383 -a test -c #登陆集群中的任意Master,使用-c进行集群查询
set mldn helloworld #设置数据 客户端node3上设置数据
在主机node1上查看数据