1、安装Redis

参考:Redis单机版半自动安装

2、集群配置

方便起见我们是用一台虚拟机部署集群,使用不同的端口号进行区分不同的节点,规划如下表:

角色 IP 端口号
master-0 127.0.0.1 6380
master-1 127.0.0.1 6381
master-2 127.0.0.1 6382
slave-0 127.0.0.1 6383
slave-1 127.0.0.1 6384
slave-2 127.0.0.1 6385

2.1、生成配置文件

⚠️ 执行下面的脚本时,需要修改第一行port的值 (port=6381~6385),生成6份配置文件

# rm /data/redis/cluster -fr
port=6385
basepath="/data/redis/cluster"
datapath="$basepath/$port/data"
conffile="$basepath/$port/conf/redis$port.conf"
logpath="$basepath/$port/logs"
mkdir $basepath/$port/{conf,logs,data} -p
#redis.conf具体配置
echo "#generated by echo" > $conffile
echo "port $port" >> $conffile
echo "daemonize yes" >> $conffile
echo "logfile $logpath/redis$port.log" >> $conffile
echo "save 10 3" >> $conffile
echo "stop-writes-on-bgsave-error yes"   >> $conffile
echo "rdbcompression yes">> $conffile
echo "rdbchecksum yes"   >> $conffile
echo "dbfilename dump$port.rdb"   >> $conffile
echo "dir $datapath" >> $conffile
echo "appendonly yes">> $conffile
echo "appendfilename appendonly$port.aof"   >> $conffile
echo "appendfsync everysec"  >> $conffile
echo "cluster-enabled yes"  >> $conffile
echo "cluster-config-file node$port.conf"  >> $conffile
echo "cluster-node-timeout 10000"  >> $conffile# cd /data/redis/cluster/$port/conf
# sed -i "s/daemonize yes/daemonize no/g" ./redis$port.conf

ruby网盘地址,提取码:1234

2.2、安装ruby

cd /opt
#上传、解压ruby-2.3.4
tar -xzvf ruby-2.3.4.tar.gz
cd /opt/ruby-2.3.4
./configure --prefix=/opt/ruby
yum install -y zlib-devel openssl-devel
make && make install
echo 'export PATH=$PATH:/opt/ruby/bin' >>  /etc/profile
# 刷新环境变量
source /etc/profile
ruby -v
gem install redis

2.3、启动redis-server

redis-server /data/redis/cluster/6380/conf/redis6380.conf
redis-server /data/redis/cluster/6381/conf/redis6381.conf
redis-server /data/redis/cluster/6382/conf/redis6382.conf
redis-server /data/redis/cluster/6383/conf/redis6383.conf
redis-server /data/redis/cluster/6384/conf/redis6384.conf
redis-server /data/redis/cluster/6385/conf/redis6385.conf

2.4、创建集群

# 根据数量来识别master和slave,replicas 1 表示1个master只有一个slave
ip=127.0.0.1
cd /usr/local/redis/src
./redis-trib.rb create --replicas 1  $ip:6380 $ip:6381 $ip:6382 $ip:6383 $ip:6384 $ip:6385

输出如下:

# 创建cluster
>>> Creating cluster
# 在6个节点上分配hash slot
>>> Performing hash slots allocation on 6 nodes...
# 使用3个master节点
Using 3 masters:
127.0.0.1:6380
127.0.0.1:6381
127.0.0.1:6382
# 给3个master节点添加slave节点
Adding replica 127.0.0.1:6383 to 127.0.0.1:6380
Adding replica 127.0.0.1:6384 to 127.0.0.1:6381
Adding replica 127.0.0.1:6385 to 127.0.0.1:6382
M: d09ca68f10fe43d90f3e5bf9947231ae8114d458 127.0.0.1:6380slots:0-5460 (5461 slots) master
M: f40988e4949e432f6bf33b2d53db04c3c8aad498 127.0.0.1:6381slots:5461-10922 (5462 slots) master
M: 650159c93eebcca13336885329441d2ac5d09745 127.0.0.1:6382slots:10923-16383 (5461 slots) master
S: 5b258b721bce628a59ffc36efcff2ccf6d62f63b 127.0.0.1:6383replicates d09ca68f10fe43d90f3e5bf9947231ae8114d458
S: 6085d442fc29ea352bd0c9be87fbbe6a85fe9ee8 127.0.0.1:6384replicates f40988e4949e432f6bf33b2d53db04c3c8aad498
S: 594d27c92881d66f6c002568e776a1e40562cb2e 127.0.0.1:6385replicates 650159c93eebcca13336885329441d2ac5d09745
# 是否接受上面的配置
Can I set the above configuration? (type 'yes' to accept): yes
# 更新了各个节了配置
>>> Nodes configuration updated
# 给各个节点应用不同的配置
>>> Assign a different config epoch to each node
# 给各个节点发送加入集群的消息
>>> Sending CLUSTER MEET messages to join the cluster
# 等待加入集群
Waiting for the cluster to join....
# 使用6380这个节点验证集群
>>> Performing Cluster Check (using node 127.0.0.1:6380)
M: d09ca68f10fe43d90f3e5bf9947231ae8114d458 127.0.0.1:6380slots:0-5460 (5461 slots) master1 additional replica(s)
M: 650159c93eebcca13336885329441d2ac5d09745 127.0.0.1:6382slots:10923-16383 (5461 slots) master1 additional replica(s)
S: 594d27c92881d66f6c002568e776a1e40562cb2e 127.0.0.1:6385slots: (0 slots) slavereplicates 650159c93eebcca13336885329441d2ac5d09745
M: f40988e4949e432f6bf33b2d53db04c3c8aad498 127.0.0.1:6381slots:5461-10922 (5462 slots) master1 additional replica(s)
S: 5b258b721bce628a59ffc36efcff2ccf6d62f63b 127.0.0.1:6383slots: (0 slots) slavereplicates d09ca68f10fe43d90f3e5bf9947231ae8114d458
S: 6085d442fc29ea352bd0c9be87fbbe6a85fe9ee8 127.0.0.1:6384slots: (0 slots) slavereplicates f40988e4949e432f6bf33b2d53db04c3c8aad498
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看各个节点的配置

[root@node2 ~]# cat /data/redis/cluster/6380/data/node6380.conf
nodeid?? 127.0.0.1:6382@16382 master - 0 1605321377228 3 connected 10923-16383
nodeid?? 127.0.0.1:6380@16380 myself,master - 0 1605321376000 1 connected 0-5460
nodeid?? 127.0.0.1:6385@16385 slave nodeid?? 0 1605321378236 6 connected
nodeid?? 127.0.0.1:6381@16381 master - 0 1605321378000 2 connected 5461-10922
nodeid?? 127.0.0.1:6383@16383 slave nodeid?? 0 1605321376219 4 connected
nodeid?? 127.0.0.1:6384@16384 slave nodeid?? 0 1605321378236 5 connected
vars currentEpoch 6 lastVoteEpoch 0

3、验证集群

[root@node2 ~]# redis-cli -c -p 6380
127.0.0.1:6380> set a a
-> Redirected to slot [15495] located at 127.0.0.1:6382
OK
127.0.0.1:6382> set b b
-> Redirected to slot [3300] located at 127.0.0.1:6380
OK
127.0.0.1:6380> set c c
-> Redirected to slot [7365] located at 127.0.0.1:6381
OK
127.0.0.1:6381> set d d
-> Redirected to slot [11298] located at 127.0.0.1:6382
OK

set 不同的key ,会转发到不同的节点上进行操作,比如上面的set b b,我们是在6382上输入的命令,实际是是在 6380 上执行的,我们可以查看 appendonly6380.aof 进行验证

附录


(1)将redis-4.0.1.tar.gz包上传到一台机器上去,/usr/local目录下,解压缩,重命名为redis(2)安装redis需要的一些依赖:yum install -y tcl gcc zlib-devel openssl-devel(3)进入redis录内,执行make MALLOC=libc命令(4)把redis的一些命令脚本拷贝到PATH变量所在的目录cp -a src/redis-server src/redis-cli src/redis-sentinel src/redis-trib.rb src/redis-check-aof src/redis-check-rdb src/redis-benchmark /usr/local/bin/那个/usr/local/bin,就是PATH变量的目录,这样就可以直接执行redis的一些命令了(5)创建redis集群的目录cd /opt
mkdir redis-cluster
mkdir redis-cluster/nodes-{7001,7002,7003}(6)编辑redis.conf配置文件(以7001来举个例子,将7002和7003都编辑一下配置文件)cd redis-cluster/nodes-7001vi redis.confbind 127.0.0.1 192.168.9.216
port 7001
pidfile redis_7001.pid
loglevel notice
logfile "/opt/redis-cluster/nodes-7001/redis_7001.log"
dir /opt/redis-cluster/nodes-7001/
cluster-config-file nodes-7001.conf
daemonize yes
supervised no
appendonly yes
cluster-enabled yes
cluster-node-timeout 15000
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
appendfilename "appendonly.aof"
appendfsync everysec(7)在另外一台机器上,重复上面的步骤,但是弄成7001、7002、7003(8)依次启动各个redis实例(以7001作为参考)在两台机器上都依次执行下面的命令就可以了:cd /usr/local/redis/src
./redis-server /opt/redis-cluster/nodes-7001/redis.conf
./redis-server /opt/redis-cluster/nodes-7002/redis.conf
./redis-server /opt/redis-cluster/nodes-7003/redis.conf
ps -ef | grep redis因为我们现在的重点不是讲redis这个技术,其实我们是在讲基于redis的分布式锁,大家现在对redis不用太过于的纠结,我们就不去管这些东西了,后面都会详细讲解redis技术的,我们再看这个时候看nodes-7001里面,会自动生成一些文件,包括nodes-7001.conf(自动生成的集群配置文件),appendonly.aof,redis_7001.log,redis_7001.pidps -ef | grep redis(9)安装ruby我们的这个centos 7操作系统默认没带rubyruby -v(默认是老版本ruby,卸载掉)
rpm -qa | grep ruby
yum erase ruby将ruby-2.3.4.tar.gz上传到/usr/local下,解压缩,重命名为rubycd ruby
./configure
make && make install
ruby -v按照上面的步骤,两台机器都装一下ruby(10)安装ruby-redis.gem(如果之前没装过,那么:yum install -y zlib-devel openssl-devel)在/usr/local/redis下,gem install redis如果报错:ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClasscd /usr/local/ruby/ext/zlib
ruby extconf.rb
make && make install再次gem install redis,如果再次报错:ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sourcescd /usr/local/ruby/ext/openssl
ruby extconf.rb
将上个步骤生成的MakeFile文件中的${top_srcdir}都替换为../..
make && make install基本就是上面两个问题,都解决了之后,就可以正常的:gem install redis(11)创建redis cluster集群redis-trib.rb create --replicas 1 192.168.31.114:7001 192.168.31.114:7002 192.168.31.114:7003 192.168.31.184:7001 192.168.31.184:7002 192.168.31.184:7003跟上所有的redis实例,一共是6个redis cluster自动会将6个redis实例做成3主3从的此时显示一直在等待,其实是因为redis.conf中的bind出了问题,不能bind 127.0.0.1在两台机器上,都执行:ps -aux | grep redis,看到3个redis进程
kill -9 杀死所有的redis进程
对/opt/redis-cluster目录下的nodes-***几个文件夹内的文件,都删除,保留一个redis.conf
然后修改6个redis实例的redis.conf,bind里面都去掉127.0.0.1
重启启动6个redis实例
再次执行redis-trib.rb create --replicas 1命令(12)测试redis cluster在/usr/local/redis/src目录下:redis-cli -c -h 192.168.31.114 -p 7001
127.0.0.1:7001> CLUSTER info
127.0.0.1:7001> CLUSTER nodes
127.0.0.1:7001> set foo bar
127.0.0.1:7003> get foo

Redis集群部署(半自动)相关推荐

  1. Redis集群部署文档(Ubuntu15.10系统)

    Redis集群部署文档(Ubuntu15.10系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系 ...

  2. 3.redis集群部署3主3从

    redis集群部署 一:安装redis (使用redis3.0.6版本),同<1.redis安装> 1.下载源码 $ tar xzf redis-3.0.6.tar.gz $ cd red ...

  3. redis集群部署步骤

    1.yum 安装依赖 yum install gcc unzip wget 2.编译安装redis,编译安装的目的是源码包内包含了接下来创建redis集群所需要的 redis-trib.rb脚本 ma ...

  4. redis集群部署一直卡在Waiting for the cluster to join ......

    2019独角兽企业重金招聘Python工程师标准>>> 里是redis多机多节点集群部署的问题解决! 这个是困扰了我最久的问题,使用cluster meet ip port命令无效, ...

  5. 云服务器Redis集群部署及客户端通过公网IP连接问题

    目录 1.配置文件 2.启动服务并创建集群 (1)启动6个Redis服务 (2)通过客户端命令创建集群 3.客户端连接 (1)客户端配置 (2)测试用例 (3)错误日志分析 4.问题解决 (1)查re ...

  6. Redis集群部署的三种方式

    Redis集群的部署方式: 1.主从复制:2.Sentinel哨兵机制:3.cluster集群. 第一种集群方式,部署简单,分为一主一从,或一主N从.数据分布是在所有节点通过replication复制 ...

  7. Redis集群部署的三种模式

    一.Redis简介 Redis 是一款完全开源免费.遵守BSD协议的高性能(NOSQL)的key-value数据库.它使用ANSI C语言编写,支持网络.可基于内存亦可持久化的日志型.Key-Valu ...

  8. redis集群部署及应用场景

    概述 redis cluster大家喜欢叫它redis集群,也有人喜欢叫分片集群.总结下来,redis有三种模式,分别是单机,哨兵模式,分片集群.从表面上看使用的机器越来越多了,其实确实是随着数据量读 ...

  9. Redis 集群部署及踩过的坑

    本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑. 安装准备 centos版本:6.7 redis版本:3.2.3 安装方 ...

最新文章

  1. python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践
  2. linux openh264 编译,在Linux下为Android构建openh264
  3. Symbol学习与回忆
  4. [论文阅读] IL2M: Class Incremental Learning With Dual Memory
  5. Spring揭秘(一)spring框架的由来
  6. logback日志模板
  7. js动态显示实时时间
  8. 禁用 SQL 游标,告诉你外面听不到的原因
  9. html图片加载不出来,图片相对路径问题
  10. 小程序 | 优惠券样式
  11. 危险化学品事故爬虫解析
  12. 火锅赛道内卷:七欣天VS捞王,谁是 “港股火锅第三股”?
  13. TouchGFX- 1 - 简介与安装
  14. java mysql geometry,扩展mybatis和通用mapper,支持mysql的geometry类型字段,mybatis用mapper...
  15. mpvue项目中使用第三方UI组件库
  16. 已解决(Python读取xml文件报错)xmL.etree.ELementTree.ParseError:not well-formed (invalid token): Line
  17. android+高仿iphone,网购iPhone7P的失败经历,原来是安卓高仿!
  18. 兄弟机cnc系统面板图解_数控机床操作面板图文详解
  19. myeclipse10.0用什么字体好看?
  20. python中序列和列表区别细菌真菌病毒_根据16S预测微生物群落功能最全攻略

热门文章

  1. Ext JS 4 升级指南
  2. 使用计算机控制台方法,故障控制台使用方法
  3. JSP向Servlet传递数据以及与STM32、ESP8266通信过程
  4. MySQL CASE WHEN 多个判断条件
  5. Layui--弹出层layer
  6. cmd输入pip报错_Houdini安装外部python库(pip)
  7. 第五章 ---- 面向对象(二)
  8. uniapp ---- 树组件
  9. 标定精度_【杰瑞课堂】工业机器人运动精度
  10. traceroute显示*号_traceroute 的名词解释