Redis Cluster 官方集群搭建指南
安装ruby环境
因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2+版本支持,ruby安装需要指定openssl。
安装openssl
- $ wget https://www.openssl.org/source/openssl-1.0.2m.tar.gz
- $ tar -zxvf openssl-1.0.2m.tar.gz
- $ cd openssl-1.0.2m
- $ ./config --prefix=/usr/local/openssl
- $ ./config -t
- $ make
- $ make install
- $ openssl version
安装ruby
- $ yum remove ruby
- $ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
- $ tar -zxvf ruby-2.4.2.tar.gz
- $ cd ruby-2.4.2
- $ ./configure --with-openssl-dir=/usr/local/openssl
- $ make
- $ make install
- $ sudo ln -s /usr/local/bin/ruby /usr/bin/ruby
安装rubygems
- $ wget https://rubygems.org/rubygems/rubygems-2.3.0.tgz
- $ tar -zxvf rubygems-2.3.0.tgz
- $ cd rubygems-2.3.0
- $ ruby setup.rb
安装zlib
- $ vi /ruby-2.4.2/ext/zlib/Makefile
- zlib.o: $(top_srcdir)/include/ruby.h
- 修改为:
- zlib.o: ../../include/ruby.h
- $ yum install zlib*
- $ cd /ruby-2.4.2/ext/zlib
- $ ruby extconf.rb
- $ make
- $ make install
安装redis库
$ gem install redis
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
报这个错,安装openssl-devel,并重新编译ruby即可。
参考:https://www.larshaendler.com/2015/05/20/unable-to-require-openssl-install-openssl-and-rebuild-ruby-on-ubuntu-14-lts/
搭建集群
1、创建集群目录
首先进入一个新目录,创建六个以端口号为名字的子目录。
- $ mkdir redis-cluster
- $ cd redis-cluster
- $ mkdir 9001 9002 9003 9004 9005 9006
2、添加集群配置文件
在文件夹9001~9006中各建一个redis.conf文件,修改对应文件夹的端口,内容如下:
- port 9001
- cluster-enabled yes
- cluster-config-file nodes.conf
- cluster-node-timeout 5000
- appendonly yes
- cluster-enabled:用于开实例的集群模式
- cluster-conf-file:设定了保存节点配置文件的路径,默认值为nodes.conf,节点配置文件无须人为修改,它由 Redis集群在启动时创建, 并在有需要时自动进行更新。
要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
3、添加redis服务文件
把编译好的redis-server文件复制到redis-cluster文件夹中。
4、启动集群实例
进入到9001~90066每个目录下,启动每个实例:
- $ cd 9001
- $ ../redis-server ./redis.conf
5、创建集群
现在我们已经有了六个正在运行中的Redis实例,接下来我们需要使用这些实例来创建集群,并为每个节点编写配置文件。通过使用Redis集群命令行工具redis-trib,编写节点配置文件的工作可以非常容易地完成:redis-trib位于Redis源码的src文件夹中,它是一个Ruby程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。
- $ ./redis-trib.rb create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006
- >>> Creating cluster
- >>> Performing hash slots allocation on 6 nodes...
- Using 3 masters:
- 127.0.0.1:9001
- 127.0.0.1:9002
- 127.0.0.1:9003
- Adding replica 127.0.0.1:9004 to 127.0.0.1:9001
- Adding replica 127.0.0.1:9005 to 127.0.0.1:9002
- Adding replica 127.0.0.1:9006 to 127.0.0.1:9003
- M: bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0 127.0.0.1:9001
- slots:0-5460 (5461 slots) master
- M: 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c 127.0.0.1:9002
- slots:5461-10922 (5462 slots) master
- M: 33b757db6091e486af2032f1463d1fb07e8e89a7 127.0.0.1:9003
- slots:10923-16383 (5461 slots) master
- S: b00b464e4deb93a661755923641d36cadf648fcd 127.0.0.1:9004
- replicates bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0
- S: b3ec3a9c125cf168807231a16bacab946974d563 127.0.0.1:9005
- replicates 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c
- S: 06a207f7a4dd3023f88e01fad8635cb471d004eb 127.0.0.1:9006
- replicates 33b757db6091e486af2032f1463d1fb07e8e89a7
- 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....
- >>> Performing Cluster Check (using node 127.0.0.1:9001)
- M: bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0 127.0.0.1:9001
- slots:0-5460 (5461 slots) master
- 1 additional replica(s)
- S: 06a207f7a4dd3023f88e01fad8635cb471d004eb 127.0.0.1:9006
- slots: (0 slots) slave
- replicates 33b757db6091e486af2032f1463d1fb07e8e89a7
- S: b00b464e4deb93a661755923641d36cadf648fcd 127.0.0.1:9004
- slots: (0 slots) slave
- replicates bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0
- M: 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c 127.0.0.1:9002
- slots:5461-10922 (5462 slots) master
- 1 additional replica(s)
- S: b3ec3a9c125cf168807231a16bacab946974d563 127.0.0.1:9005
- slots: (0 slots) slave
- replicates 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c
- M: 33b757db6091e486af2032f1463d1fb07e8e89a7 127.0.0.1:9003
- slots:10923-16383 (5461 slots) master
- 1 additional replica(s)
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
6、查看集群节点
- 192.168.10.38:9001> cluster nodes
- bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0 127.0.0.1:9001@19001 myself,master - 0 1511774435000 1 connected 0-5460
- 06a207f7a4dd3023f88e01fad8635cb471d004eb 127.0.0.1:9006@19006 slave 33b757db6091e486af2032f1463d1fb07e8e89a7 0 1511774436000 6 connected
- b00b464e4deb93a661755923641d36cadf648fcd 127.0.0.1:9004@19004 slave bd330d41ffcc57a5a5d32e3f738ddf82c48cfed0 0 1511774436557 4 connected
- 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c 127.0.0.1:9002@19002 master - 0 1511774436557 2 connected 5461-10922
- b3ec3a9c125cf168807231a16bacab946974d563 127.0.0.1:9005@19005 slave 688b8cdbdc38fe6b9e81b410aae2f1c048f5907c 0 1511774436657 5 connected
- 33b757db6091e486af2032f1463d1fb07e8e89a7 127.0.0.1:9003@19003 master - 0 1511774436000 3 connected 10923-16383
连接使用集群
- $ ./redis-cli -c -h 192.168.1.8 -p 9002 -a 123456
-c:cluster,连接到集群模式,否则key不落在本实例将会报错。
-h:host,指定连接主机。
-p:port,指定连接端口。
-a:auth,指定密码,集群模式需要指定,不然移动会认证失败。
- $ ./redis-cli -c -h 192.168.1.8 -p 9002 -a 123456
- 127.0.0.1:9002> set hnad 21233
- -> Redirected to slot [2114] located at 127.0.0.1:9001
- OK
如上,键hnad被转移到实例9001。
主从复制不能同步问题解决
搭建一个3主3从的Redis Cluster集群发现从实例不能同步主实例的数据,但确认搭建的步骤和参数都没啥问题啊,官网也没有给出对应的问题解决方案。
解决方案
后来查各种资料发现,是因为主实例设置了密码,从实例配置中需要配置主实例的连接密码才能实现主从复制同步。
就是下面这个配置:
- # If the master is password protected (using the "requirepass" configuration
- # directive below) it is possible to tell the slave to authenticate before
- # starting the replication synchronization process, otherwise the master will
- # refuse the slave request.
- #
- # masterauth <master-password>
翻译:
如果master是密码保护的,下面的配置就是可以告诉从实例在启动集群同步复制进程之前要经过认证,否则主实例会拒绝从实例的请求。
解决流程
所以,要解决不同步问题,先停止6个从实例,然后在每个实例的redis.conf文件中加入对应主备实例的认证密码,然后再启动各个从实例。如:
- masterauth 123456
然后主实例上的数据实时变化都会同步到从实例,问题解决。
Redis Cluster 官方集群搭建指南的更多相关文章
- 超详细的 Redis Cluster 官方集群搭建指南
今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2+版本支持,rub ...
- Redis Cluster(集群)的搭建
一.Redis的下载.安装.启动(单实例) 我们统一将Redis安装在/opt目录下,执行命令如下: $ cd /opt $ wget http://download.redis.io/release ...
- Redis 3.0 集群搭建
Redis 3.0 集群搭建 开启两个虚拟机 分别在两个虚拟机上开启3个Redis实例 3主3从两个虚拟机里的实例互为主备 下面分别在两个虚拟机上安装,网络设置参照codis集群的前两个主机 分别关闭 ...
- Redis 5.0 集群搭建
Redis 5.0 集群搭建 单机版的 Redis 搭建 https://www.jianshu.com/p/b68e68bbd725 /usr/local/目录 mkdir redis-cluste ...
- [转]OpenShift 集群搭建指南
转自:http://www.cnblogs.com/zhangning/p/7251810.html OpenShift 集群搭建指南 v1.0 搭建Hyper-v虚拟机或物理机 配置物理机静态IP, ...
- Redis Cluster 伪集群的搭建
简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...
- linux Redis 5.0集群搭建
文档结构如下: Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求:当遇到单机内存,并发,流量等瓶颈是,可以采用cluster架构 ...
- Redis操作及集群搭建以及高可用配置
NoSQL - Redis 缓存技术 Redis功能介绍 数据类型丰富 支持持久化 多种内存分配及回收策略 支持弱事务 支持高可用 支持分布式分片集群 企业缓存产品介绍 Memcached: 优点:高 ...
- redis主从和集群搭建
主从搭建 redis的主从搭建非常简单,打开配置文件6379.conf,只需要将主节点的protected-mode设置为no,然后在从节点配置中加入:slaveof <masterip> ...
随机推荐
- 第八章· MySQL日志管理
一.MySQL日志简介  二.错误日志 1.作用: 记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志. 2.默认位置: $MYSQL_HOME/data/ 3.开 ...
- spket IDE插件更新地址
http://www.agpad.com/update spket IDE插件更新地址
- Cobbler自动化装机脚本
#!/bin/bash ens33_ip=192.168.1.3 ens33_gateway=192.168.1.1 ens37_ip=192.168.207.2 dhcp_wd=192.168.20 ...
- java-面试题为什么redis这么快
文章:为什么说Redis是单线程的以及Redis为什么这么快! 文章比较详细,有些细节可能需要注意. 1,比如CPU不是redis的瓶颈 2,随着连接数的增加,并发会降低等.
- Angular与Vue
最近在考虑对前端js框架的选择 根据前人的总结,就总结一下 Angular与Vue 的特点与区别 速度/性能 虽然 Angular 和 Vue 都提供了很高的性能,但由于 Vue 的虚拟 DOM 实现 ...
- 用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛
前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为使用 ES6 语法. 源码: gi ...
- 51nod 1850 抽卡大赛 (十二省联考模测) DP
O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...
- [Git] How to revert one file changes from one commit
Many times we might changed one file which we don't intent to do... but it was too late, until we fo ...
- [Centos7]Centos7安装
Centos7安装 安装wget yum -y install wget 更换镜像源 # 备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum. ...
- 原创:实现atoi函数
#include <stdio.h> #include <stdlib.h> #include <limits.h> int my_atoi(char *str) ...