博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
80.redis集群与搭建配置与操作
阅读量:6086 次
发布时间:2019-06-20

本文共 12216 字,大约阅读时间需要 40 分钟。

hot3.png

21.22 redis集群介绍

21.23/21.24 redis集群搭建配置

21.25 redis集群操作

扩展 

redis 哨兵https://segmentfault.com/a/1190000002680804

 

 

 

 

21.22 redis集群介绍

 

 

redis在官方叫做redis- cluster(3.0版本之后才支持的架构)。作用于单台机器不能够满足存放大量的数据,所以要多台机器构成一个大集群,用来解决存储空间、查询速度、负载太高等类似瓶颈的问题。

redis-cluster是分布式的集群,支持横向扩展,就是增加节点仅仅在配置文件中,加入这个集群就可以了。

codis是第三方的,针对redis集群的另一个解决方案。codis类似于lvs做负载均衡一样,用的是路由这样的技术

1.多个redis节点网络互联,数据共享

并不是说在一个机器上写,就能同步到其他机器上去。比如我们第一次写可能在A节点,第二次写可能在B节点,也就是说我们写了一个键值,他可能存在于A节点也可能存在于B节点。并不是这个数据A上有B上也有

但是我们在写数据的时候,都是会告诉我们在哪个机器上查询和存取的

2.所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用

目的是增加安全性

3.不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为。

只能一个一个的写

4.支持在线增加、删除节点

5.客户端可以连任何一个主节点进行读写

比如我们连接A去读B机器上的数据

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

21.23/21.24 redis集群搭建配置

 

 

 

 

1.场景设置:

1.1两台机器,分别开启三个Redis服务(端口)

1.2A机器上三个端口7000,7002,7004,全部为主

1.3B机器上三个端口7001,7003,7005,全部为从 #这样相当于有了6台机器

1.4两台机器上都要编译安装redis,然后编辑并复制3个不同的redis.conf,分别设置不同的端口号、dir等参数,还需要增加cluster相关参数,然后分别启动6个redis服务

具体redis配置文件到https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/21NOSQL下载或者查看

 

2.安装ruby2.2 (只需要一台机器上运行)

#需要ruby2.2.的支持。yum源(yum list |grep ruby)里面有ruby,但是不是2.2的。一下的操作就是下载源码包,搞成更高版本的rpm包!!!

2.1yum -y groupinstall "Development Tools"

2.2yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve

#安装对应的包

2.3cd /root/

2.4mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

#创建把源码包搞成rpm包的几个目录

2.5wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES

#下载源码包

wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS

#下载SPECS的文件,不然没办法执行下面的rpmbuild命令

2.6rpmbuild -bb rpmbuild/SPECS/ruby22x.spec

#把源码包做成rpm包。实际上也是编译的过程

2.7yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm

#到这就是做成了,安装这个rpm包了

也可以ls看一下这个包(或du -sh)

2.8gem install redis

#gem是ruby自带的工具,用gem去安装redis相关的redis-trib.rb

2.9cp /usr/local/src/redis-4.0.1/src/redis-trib.rb /usr/bin/

#放到/usr/bin下是为了下一步可以直接用它

2.10redis-trib.rb create --replicas 1 192.168.208.128:7000 192.168.208.128:7002 192.168.208.128:7004 192.168.208.133:7001 192.168.208.133:7003 192.168.208.133:7005

#以上所有的操作是为了,让redis-trib.rb这条命令顺利的执行,他会将这6台机器组成一个cluster。出现两个绿色的OK就代表已经搭建成功

replicas在这的意思是所谓的redis-cluster

!!在这里他会创建前三个为主,如果我们有指定的就在使用这条命令的时候把想要指定为主的写在前面(比如7000、7001、7002)

 

 

实例:

1.先来准备场景(测试)机器

因为2机器上还没有安装redis,步骤如下:

[root@axinlinux-01 ~]# scp -r /usr/local/src/redis-4.0.1 root@192.168.208.133:/usr/local/src/redis-4.0.1.bak #可以直接在1机器上把编译过得源码包拷贝过来

[root@axinlinux-03 redis-4.0.1]# make install #考过来之后,就可以直接make install了。因为已经在1机器上编译过了,编译的过程其实就是生成这些二进制的文件

-----------------------

 

[root@axinlinux-01 ~]# cd /etc/

[root@axinlinux-01 etc]# vim redis_7000.conf

cat redis_7000.conf

port 7000

bind 192.168.208.128 #这个ip要改为01机器的ip

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@axinlinux-01 etc]# cp redis_7000.conf redis_7002.conf #直接拷贝再修改就行了

[root@axinlinux-01 etc]# vim !$

:1,$s/7000/7002/g #全局替换7000改为7002!!!

port 7002

bind 192.168.208.128

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@axinlinux-01 etc]# cp redis_7000.conf redis_7004.conf

[root@axinlinux-01 etc]# vim !$

port 7004

bind 192.168.208.128

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@axinlinux-03 etc]# vim redis7001.conf #第二台机器上也要如此

[root@axinlinux-03 etc]# cp redis_7001.conf redis_7003.conf

[root@axinlinux-03 etc]# cp redis_7001.conf redis_7005.conf

[root@axinlinux-03 etc]# vim redis_7003.conf

[root@axinlinux-03 etc]# vim redis_7005.conf

[root@axinlinux-01 src]# mkdir /data/redis_data #两台机器分别创建dir目录

[root@axinlinux-01 src]# mkdir /data/redis_data/{7000,7002,7004} #这个命令可以在这个目录下,创建多个目录!!!

[root@axinlinux-03 etc]# mkdir /data/redis_data

[root@axinlinux-03 etc]# mkdir /data/redis_data/{7000,7002,7004}

[root@axinlinux-01 redis_data]# redis-server /etc/redis_7000.conf #分别开启1机器上的三个redis

[root@axinlinux-01 redis_data]# redis-server /etc/redis_7002.conf

[root@axinlinux-01 redis_data]# redis-server /etc/redis_7004.conf

[root@axinlinux-01 redis_data]# ps aux |grep redis #可以看到这三个

root 2059 0.1 0.4 145296 7572 ? Ssl 20:37 0:06 redis-server 127.0.0.1:6379

root 19602 0.3 0.4 145300 7568 ? Ssl 21:38 0:00 redis-server 192.168.208.128:7000 [cluster]

root 19607 0.4 0.4 145300 7568 ? Ssl 21:38 0:00 redis-server 192.168.208.128:7002 [cluster]

root 19612 0.5 0.4 145300 7568 ? Ssl 21:38 0:00 redis-server 192.168.208.128:7004 [cluster]

root 19625 0.0 0.0 112724 980 pts/0 S+ 21:38 0:00 grep --color=auto redis

2机器上也要开启三个redis

还要注意,两边的iptables和selinux都要关闭

2.安装ruby2.2 (只需要一台机器上运行)

操作实际上就是安装更高版本的ruby。但是呢,yum是不带rpm包的。那只能去下载源码包,要么编译安装,要么把源码包搞成rpm包。咱们这个方法就是要把源码包搞成rpm包

[root@axinlinux-01 ~]# yum -y groupinstall "Development Tools"

[root@axinlinux-01 ~]# yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve

[root@axinlinux-01 ~]# cd /root/

[root@axinlinux-01 ~]# mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

#创建把源码包搞成rpm包的几个目录

[root@axinlinux-01 ~]# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES

[root@axinlinux-01 ~]# wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS

[root@axinlinux-01 ~]# rpmbuild -bb rpmbuild/SPECS/ruby22x.spec #漫长的过程--

[root@axinlinux-01 ~]# yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm

[root@axinlinux-01 ~]# gem install redis

[root@axinlinux-01 ~]# cp /usr/local/src/redis-4.0.1/src/redis-trib.rb /usr/bin/

[root@axinlinux-01 ~]# redis-trib.rb create --replicas 1 192.168.208.128:7000 192.168.208.128:7002 192.168.208.128:7004 192.168.208.133:7001 192.168.208.133:7003 192.168.208.133:7005 #前三个端口数字小的为主。这条命令会将这6个端口(6个机器)组成一个cluster。出现两个绿色的ok即代表搭建成功

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.25 redis集群操作

 

因为是一个cluster(分布式),所以可以去连任何一个端口

1.redis-cli -c -h 192.168.133.130 -p 7000//-c说明以集群的方式登录

#如果不加-c仅仅只是登录的130:7000的这台机器,不能登录到集群

任意一个节点都可以创建key,或者查看key(演示)

2.redis-trib.rb check 192.168.133.130:7000//检测集群状态,后面跟任何的一个ip端口

#linux界面下执行

3.cluster nodes//列出节点

4.cluster info//查看集群信息

5.cluster meet ip port //添加节点

#cluster meet 192.168.208.133 7007

只要是新添加进来的节点都是master

6.cluster forget node_id //移除某个节点

#如果移除的是master,要讲他设为slave才可以。

移除slave的时候要登录其他的机器才可以,也就是不能在本机上移除自己

7.cluster replicate node_id//将当前节点设置为指定节点的从

#需要登录到这个节点里面去(登录到这个指定为从的机器里面去)

8.cluster saveconfig//保存配置文件。把当前的操作保存到配置文件里

#执行cluster saveconfig的时候,他保存到dir目录下的nodesXXXX.conf配置文件里,每个机器上都会有

 

 

 

 

实例:

1.

[root@axinlinux-01 ~]# redis-cli -c -h 192.168.208.128 -p 7000 #一定要加-c(以集群的方式进来)

192.168.208.128:7000> set key1 123

-> Redirected to slot [9189] located at 192.168.208.133:7001

OK

#以上,我们set一个数据,他会将这个操作定向到了192.168.208.133:7001上。那么最终这个key1,也会到这个机器上去。

192.168.208.128:7000> set key3 aerfereq #没有提示什么,就代表到了本地机器上

OK

192.168.208.128:7002> get key3

-> Redirected to slot [935] located at 192.168.208.128:7000

"aerfereq"

192.168.208.128:7000> get key4

-> Redirected to slot [13120] located at 192.168.208.128:7002

"efetewtw"

2.

[root@axinlinux-01 ~]# redis-trib.rb check 192.168.208.128:7000 #查看集群状态,后面个任何一个ip和端口

>>> Performing Cluster Check (using node 192.168.208.128:7000)

M: e7d5d070595f69aa235a7eb91fbd52825332d89e 192.168.208.128:7000 #谁是master

slots:0-5460 (5461 slots) master

1 additional replica(s)

M: 11929bb8ad6625f9c943f8c169beb8fc3c81f25e 192.168.208.128:7002

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 40e060a8d1a7c73495c82b828d2722d432b446ac 192.168.208.133:7005 #谁是slave

slots: (0 slots) slave

replicates 11929bb8ad6625f9c943f8c169beb8fc3c81f25e

M: 72233bb45423a3d98901284feef716a99174ef74 192.168.208.133:7001

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: 5333348a617b0a22242d81935156f9645dc1d244 192.168.208.133:7003

slots: (0 slots) slave

replicates e7d5d070595f69aa235a7eb91fbd52825332d89e

S: 24fc94b3752fc129e0dcef478237249251e479d9 192.168.208.128:7004

slots: (0 slots) slave

replicates 72233bb45423a3d98901284feef716a99174ef74

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

3.

192.168.208.128:7000> CLUSTER nodes #列出节点

11929bb8ad6625f9c943f8c169beb8fc3c81f25e 192.168.208.128:7002@17002 master - 0 1542210458000 2 connected 10923-16383

40e060a8d1a7c73495c82b828d2722d432b446ac 192.168.208.133:7005@17005 slave 11929bb8ad6625f9c943f8c169beb8fc3c81f25e 0 1542210457000 6 connected

#查看slave的时候,ip和端口后面这个长长的字符串就是这个slave的master。这个常常的字符串对应的就是第一个master的ip和端口前面的字符串。所以192.168.208.128:7002为主192.168.208.133:7005为从

 

e7d5d070595f69aa235a7eb91fbd52825332d89e 192.168.208.128:7000@17000 myself,master - 0 1542210457000 1 connected 0-5460 #这个是本机自己

72233bb45423a3d98901284feef716a99174ef74 192.168.208.133:7001@17001 master - 0 1542210459471 4 connected 5461-10922

5333348a617b0a22242d81935156f9645dc1d244 192.168.208.133:7003@17003 slave e7d5d070595f69aa235a7eb91fbd52825332d89e 0 1542210459000 5 connected

24fc94b3752fc129e0dcef478237249251e479d9 192.168.208.128:7004@17004 slave 72233bb45423a3d98901284feef716a99174ef74 0 1542210459066 4 connected

4.

192.168.208.128:7000> CLUSTER INFO #查看集群的信息

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:6

cluster_my_epoch:1

cluster_stats_messages_ping_sent:2792

cluster_stats_messages_pong_sent:2857

cluster_stats_messages_sent:5649

cluster_stats_messages_ping_received:2852

cluster_stats_messages_pong_received:2792

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:5649

5.

192.168.208.128:7000> cluster meet 192.168.208.133 7007 #增加一个节点

OK

192.168.208.128:7000> cluster nodes

ae84d3652d3f7de25b13e58036824863afbb438b 192.168.208.133:7007@17007 master - 0 1542211536000 0 connected #可以看到7007进来就是master的身份

192.168.208.128:7000> cluster meet 192.168.208.128 7006 #我们在添加一个新的节点进来,看他是什么角色

OK

192.168.208.128:7000> cluster nodes #结果他还是master,所以我们只要添加新的节点进来,他都是master

bb580afa0b3f97d47bf8dbc3f85164cb0f214028 192.168.208.128:7006@17006 master - 0 1542212017000 0 connected

7.

[root@axinlinux-01 etc]# redis-cli -c -h 192.168.208.128 -p 7006 #首先进入到7006记得加-c

192.168.208.128:7006> CLUSTER REPLICATE ae84d3652d3f7de25b13e58036824863afbb438b

OK #后面跟的想要成为他的master的nodes号

192.168.208.128:7006> cluster nodes #查看一下

bb580afa0b3f97d47bf8dbc3f85164cb0f214028 192.168.208.128:7006@17006 myself,slave ae84d3652d3f7de25b13e58036824863afbb438b 0 1542212361000 0 connected

ae84d3652d3f7de25b13e58036824863afbb438b 192.168.208.133:7007@17007 master - 0 1542212361896 7 connected

8.

192.168.208.128:7006> CLUSTER SAVECONFIG

OK

[root@axinlinux-03 etc]# cat /data/redis_data/7007/nodes_7007.conf

40e060a8d1a7c73495c82b828d2722d432b446ac 192.168.208.133:7005@17005 slave 11929bb8ad6625f9c943f8c169beb8fc3c81f25e 0 1542212351000 2 connected

72233bb45423a3d98901284feef716a99174ef74 192.168.208.133:7001@17001 master - 0 1542212348938 4 connected 5461-10922

bb580afa0b3f97d47bf8dbc3f85164cb0f214028 192.168.208.128:7006@17006 slave ae84d3652d3f7de25b13e58036824863afbb438b 0 1542212350959 7 connected

5333348a617b0a22242d81935156f9645dc1d244 192.168.208.133:7003@17003 slave e7d5d070595f69aa235a7eb91fbd52825332d89e 0 1542212347932 1 connected

ae84d3652d3f7de25b13e58036824863afbb438b 192.168.208.133:7007@17007 myself,master - 0 1542212349000 7 connected

24fc94b3752fc129e0dcef478237249251e479d9 192.168.208.128:7004@17004 slave 72233bb45423a3d98901284feef716a99174ef74 0 1542212350000 4 connected

e7d5d070595f69aa235a7eb91fbd52825332d89e 192.168.208.128:7000@17000 master - 0 1542212350151 1 connected 0-5460

11929bb8ad6625f9c943f8c169beb8fc3c81f25e 192.168.208.128:7002@17002 master - 0 1542212348000 2 connected 10923-16383

vars currentEpoch 7 lastVoteEpoch 0

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/3030827

你可能感兴趣的文章
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>