redis —主从&&集群(CLUSTER)
REDIS主从配置
为了节省资源,本实验在一台机器进行。即,在一台机器上启动两个端口,模拟两台机器。
机器准备:
[root@adailinux ~]# cp /etc/redis.conf /etc/redis2.conf
[root@adailinux ~]# vim /etc/redis2.conf
port 6380
pidfile /var/run/redis_6380.pid
logfile "/tmp/logs/redis2.log"
dir /data/redis2
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
###指定主服务器IP和端口
# masterauth <master-password>
###如果主服务器设定了密码,需要在从服务器上添加该参数
[root@adailinux ~]# mkdir /data/redis2
启动Redis:
[root@adailinux ~]# redis-server /etc/redis.conf
[root@adailinux ~]# redis-server /etc/redis2.conf
[root@adailinux ~]# ps aux |grep redis
root 2454 0.2 0.4 145244 2356 ? Ssl 17:18 0:00 redis-server 127.0.0.1:6379
root 2459 0.3 0.4 145244 2332 ? Ssl 17:19 0:00 redis-server 127.0.0.1:6380
[root@adailinux ~]# netstat -lntp |grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 2454/redis-server 1
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 2459/redis-server 1
启动成功!!!
至此,Redis主从搭建完毕!!!
查看SLAVE上的数据
[root@adailinux ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "list1"
2) "hseta"
3) "set1"
4) "set3"
5) "key2"
6) "k1"
7) "set4"
8) "seta"
9) "k2"
10) "k3"
11) "zseta"
12) "setb"
13) "hash1"
14) "set5"
15) "list2"
16) "mykey"
测试主从
在master上创建数据:
[root@adailinux ~]# redis-cli -p 6379
127.0.0.1:6379> del key
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set test 00001
OK
在slave上查看:
[root@adailinux ~]# redis-cli -p 6380
127.0.0.1:6380> select 1
127.0.0.1:6380[1]> keys *
1) "test"
127.0.0.1:6380[1]> get test
"00001"
注意: Redis主从和mysql主从不一样,Redis主从不用事先同步数据,它会自动同步。因为master上设置有参数“slave-read-only yes”,即该slave为只读数据库!
20.22 REDIS集群介绍
Redis cluster是分布式集群,支持横向扩展,Redis从V3.0版本后才支持集群功能。Redis集群的工作原理类似于磁盘的raid5。
- 多个redis节点网络互联,数据共享
- 所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用
- 不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。
- 支持在线增加、删除节点
- 客户端可以连任何一个主节点进行读写

21.22-21.23 REDIS集群搭建
场景设置
- 两台机器,分别开启三个Redis服务(端口)
- A机器上三个端口:7000、7002、7004,全部为主
- B机器上三个端口:7001、7003、7005,全部为从
- 两台机器上都要编译安装Redis,然后编译并复制三个不同的Redis.conf,分别设置不同的端口号、dir等参数,还需要增加cluster相关参数,然后分别启动6个Redis服务
准备机器
MASTER(IP:192.168.8.131)
[root@adailinux ~]# vim /etc/redis_7000.conf
port 7000
bind 192.168.8.131
daemonize yes
pidfile /var/run/redis_7000.pid
dir /data/redis_data/7000
cluster-enabled yes
##开启cluster功能
cluster-config-file nodes_7000.conf
##该配置文件可以在dir目录下自动生成
cluster-node-timeout 10100
appendonly yes
[root@adailinux ~]# vim /etc/redis_7002.conf
port 7002
bind 192.168.8.131
daemonize yes
pidfile /var/run/redis_7002.pid
dir /data/redis_data/7002
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 10100
appendonly yes
[root@adailinux ~]# vim /etc/redis_7004.conf
port 7004
bind 192.168.8.131
daemonize yes
pidfile /var/run/redis_7004.pid
dir /data/redis_data/7004
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 10100
appendonly yes
创建各配置文件对应的数据库目录:
[root@adailinux ~]# mkdir /data/redis_data
[root@adailinux ~]# mkdir /data/redis_data/{7000,7002,7004}
依次启动Redis服务7000,7002,7004:
[root@adailinux ~]# redis-server /etc/redis_7000.conf
启动完成后,结果如下:
[root@adailinux ~]# ps aux |grep redis
root 14423 0.6 0.5 145248 2640 ? Ssl 19:35 0:00 redis-server 192.168.8.131:7000 [cluster]
root 14438 3.5 0.5 145248 2636 ? Ssl 19:37 0:00 redis-server 192.168.8.131:7002 [cluster]
root 14443 13.8 0.5 145248 2636 ? Ssl 19:37 0:01 redis-server 192.168.8.131:7004 [cluster]
注: 此处bind应该对应自己服务器的IP。
SLAVE(IP:192.168.8.132)
首先要先安装好Redis,然后执行如下操作:
[root@adailinux ~]# vim /etc/redis_7001.conf
port 7001
bind 192.168.8.132
daemonize yes
pidfile /var/run/redis_7001.pid
dir /data/redis_data/7001
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 10100
appendonly yes
[root@adailinux ~]# vim /etc/redis_7003.conf
port 7003
bind 192.168.8.132
daemonize yes
pidfile /var/run/redis_7003.pid
dir /data/redis_data/7003
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 10100
appendonly yes
[root@adailinux ~]# vim /etc/redis_7005.conf
port 7005
bind 192.168.8.132
daemonize yes
pidfile /var/run/redis_7005.pid
dir /data/redis_data/7005
cluster-enabled yes
cluster-config-file nodes_7005.conf
cluster-node-timeout 10100
appendonly yes
创建各配置文件对应的数据库目录:
[root@adailinux ~]# mkdir /data/redis_data
[root@adailinux ~]# mkdir /data/redis_data/{7001,7003,7005}
依次启动Redis服务7001,7003,7005:
[root@adailinux ~]# redis-server /etc/redis_7001.conf
启动完成后结果如下:
[root@adailinux ~]# ps aux |grep redis
root 5971 0.2 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7001 [cluster]
root 5976 0.1 0.5 145248 2636 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7003 [cluster]
root 5981 0.1 0.5 145248 2632 ? Ssl 19:41 0:00 redis-server 192.168.8.132:7005 [cluster]
安装RUBY V2.2(MASTER)
Redis集群需要ruby的支持,需要先安装ruby(Ruby只需在一台机器上运行)。Redis4.0需要使用Ruby2.2,安装方法如下(因为本机自带的是2.0版本的ruby,所以需要使用如下方法把源码包包制作成yum安装包,然后借助yum工具安装ruby2.2——升级ruby版本):
安装yum开发工具组:
[root@adailinux ~]# yum -y groupinstall "Development Tools"
升级库文件:
[root@adailinux ~]# yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-devel
[root@adailinux ~]# cd /root/
创建制作rpm包的目录:
[root@adailinux ~]# mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
下载Ruby的源码包:
[root@adailinux ~]# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES
下载specs文件,用于制作rpm包:
[root@adailinux ~]# wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS
制作rpm包:
[root@adailinux ~]# rpmbuild -bb rpmbuild/SPECS/ruby22x.spec
##此处需要耐心等待…
安装Ruby2.2:
[root@adailinux ~]# yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm
[root@adailinux ~]# ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
至此,ruby 2.2安装完毕!
注: 除此方法之外,还可以编译安装ruby。
配置集群
安装Redis配置集群的工具:
[root@adailinux ~]# gem install redis
将命令redis-trib.rb加入环境变量目录下:
[root@adailinux ~]# cp /usr/local/src/redis-4.0.2/src/redis-trib.rb /usr/bin/
[root@adailinux ~]# redis-trib.rb create --replicas 1 192.168.8.131:7000 192.168.8.131:7002 192.168.8.131:7004 192.168.8.132:7001 192.168.8.132:7003 192.168.8.132:7005
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
##注意:redis-trib.rb create --replicas 1 此处的参数“1”
至此,Redis集群配置完成!
21.25 REDIS集群操作
因为Redis集群是分布式结构,所以可以连接任何一个端口。
连接:
[root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000
##-c:=cluster,表示以集群方式连接
创建数据:
192.168.8.131:7000> set cluster1 adaitest
-> Redirected to slot [8483] located at 192.168.8.132:7001
OK
##该操作会被重定向到192.168.8.132:7001
192.168.8.132:7001> set cluster2 adai222
-> Redirected to slot [4416] located at 192.168.8.131:7000
OK
192.168.8.131:7000> set cluster3 adaitest333
OK
192.168.8.131:7000> set cluster4 adai2323
-> Redirected to slot [12678] located at 192.168.8.131:7002
OK
查看数据:
192.168.8.131:7002> get cluster1
-> Redirected to slot [8483] located at 192.168.8.132:7001
"adaitest"
192.168.8.132:7001> get cluster2
-> Redirected to slot [4416] located at 192.168.8.131:7000
"adai222"
192.168.8.131:7000> get cluster3
"adaitest333"
192.168.8.131:7000> get cluster4
-> Redirected to slot [12678] located at 192.168.8.131:7002
"adai2323"
集群相关的操作
查看集群的状态:
[root@adailinux ~]# redis-trib.rb check 192.168.8.131:7000
列出节点:
[root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000
192.168.8.131:7000> cluster nodes
查看集群信息:
192.168.8.131:7000> cluster info
添加节点(执行该操作前先在slave创建redis_7007.conf并启动):
192.168.8.131:7000> cluster meet 192.168.8.132 7007
OK
192.168.8.131:7000> cluster nodes
52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507035952000 0 connected
##此时7007以master身份存在
再添加一个节点:
192.168.8.131:7000> cluster meet 192.168.8.131 7006
OK
192.168.8.131:7000> cluster nodes
677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 master - 0 1507036137147 0 connected
##同样是以master身份存在
##即,使用以上方式添加的新节点都是以master身份存在!
将当前节点设置为指定节点的从:
先更换到要设置的节点:
[root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7006
设定为7007的从:
192.168.8.131:7006> cluster replicate 52e4b3484838be21fcf53b84198e362efd54bd39
OK
查看:
192.168.8.131:7006> cluster nodes
52e4b3484838be21fcf53b84198e362efd54bd39 192.168.8.132:7007@17007 master - 0 1507036429244 7 connected
677f27fb209ce45c823126fe38dbcf0b9fc43d93 192.168.8.131:7006@17006 myself,slave 52e4b3484838be21fcf53b84198e362efd54bd39 0 1507036429000 0 connected
#对比node号,即7006为7007的从。。
移除某节点:
192.168.8.131:7006> cluster forget 52e4b3484838be21fcf53b84198e362efd54bd39
(error) ERR Can't forget my master!
192.168.8.131:7006> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93
(error) ERR I tried hard but I can't forget myself...
## 即,不能移除master节点和当前所在节点
[root@adailinux ~]# redis-cli -c -h 192.168.8.131 -p 7000
192.168.8.131:7000> cluster forget 677f27fb209ce45c823126fe38dbcf0b9fc43d93
OK
查看:
192.168.8.131:7000> cluster nodes
#此时7006已经不存在了。
保存当前配置:
192.168.8.131:7000> CLUSTER SAVECONFIG
OK
redis —主从&&集群(CLUSTER)的更多相关文章
- 02.Redis主从集群的Sentinel配置
1.集群环境 1.Linux服务器列表 使用4台CentOS Linux服务器搭建环境,其IP地址如下: 192.168.110.100 192.168.110.101 192.168.110.102 ...
- docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接
花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...
- 一、全新安装搭建redis主从集群
前言· 这里分为三篇文章来写我是如何重新搭建redis主从集群和哨兵集群的及原本服务器上有单redis如何通过升级脚本来实现redis集群.(redis结构:主-从(备)-从(备)) 至于为什么要搭建 ...
- Redis主从集群及哨兵模式
本次实验环境准备用一台服务器模拟3台redis服务器,1主2从 主从集群搭建 第一步:安装Redis 安装Redis,参考前面安装Redis文章,保证单机使用没有问题. 第二步:配置服务器文件 定位到 ...
- Redis主从,集群部署及迁移
工作中有时会遇到需要把原Redis集群下线,迁移到另一个新的Redis集群的需求(如机房迁移,Redis上云等原因).此时原Redis中的数据需要如何操作才可顺利迁移到一个新的Redis集群呢? 本节 ...
- Java代码操作Redis的sentinel和Redis的集群Cluster操作
总共四台机器,crxy99,crxy98分别是主节点和从节点. crxy97和crxy96是两个监控此主从架构的sentinel节点. 看代码: import org.junit.Test; im ...
- Redis 主从集群搭建及哨兵模式配置
最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 Redis集群不用安装多个Redis,只 ...
- redis主从集群搭建及容灾部署(哨兵sentinel)
Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...
- 【转】Java代码操作Redis的sentinel和Redis的集群Cluster操作
总共四台机器,crxy99,crxy98分别是主节点和从节点. crxy97和crxy96是两个监控此主从架构的sentinel节点. 直接看代码: 1 import org.junit.Test ...
随机推荐
- PHP中的GetType和SetType
大部分的可变函数都是用来测试一个函数的类型的.PHP中有两个最常见的函数,分别是gettype()和settype().这两个函数具有如下所示的函数原型,通过他们可以获得要传递的参数和返回的结果. s ...
- 为什么我不愿意用ECharts
前言 ECharts是百度一个使用 JavaScript 实现的开源可视化库,提供了创建多种多样的图标方式,包括坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图.柱状图.散点图.K线图.饼图 ...
- java LinkedLis t的26种使用方法
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList的构造函数如下 1. public LinkedList(): --生成空的链表 2. p ...
- 理解rem实现响应式布局原理及js动态计算rem
前言 移动端布局中,童鞋们会使用到rem作为css单位进行不同手机屏幕大小上的适配.那么来讲讲rem在其中起的作用和如何动态设置rem的值. 1.什么是rem rem是相对于根元素(html标签)的字 ...
- 寄存器(CPU原理)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 智能家居esp8266对接机智云
依然存在稳定性问题 机智云官网--机智云 一个比较详细的教程--esp8266 一开始采用的是esp12f 可是他太不稳定,总是掉线,机智云的固件我也是刷了无数遍,哎太难了. 我比较懒,走过了太多 ...
- Redis+Springmvc搭建(附windows下安装)
作者注:本文主要用于个人学习.同时欢迎交流讨论 1.添加maven依赖: <dependency> <groupId>org.springframework. ...
- rem与@media 的优缺点
首先: 如果我们在做单独移动端网站或者app的时候 我建议 使用 rem ; 他能让我们在手机各个机型的适配方面:大大减少我们代码的重复性,是我们的代码更兼容. 下面两个图一个调试在常用的机 ...
- 【转】awk 数组用法【精华贴】
文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...
- ssh密钥分发与ansible
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们公司的服务器达到几十台或几百台或更高的时候,利用批量管理工具管理系统是我们要做的 常用的批量管理工具有ans ...