redis —主从&&集群(CLUSTER)

REDIS主从配置

为了节省资源,本实验在一台机器进行。即,在一台机器上启动两个端口,模拟两台机器。node

机器准备:
[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主从搭建完毕!!!mysql

查看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为只读数据库!linux

20.22 REDIS集群介绍

Redis cluster是分布式集群,支持横向扩展,Redis从V3.0版本后才支持集群功能。Redis集群的工做原理相似于磁盘的raid5。git

  • 多个redis节点网络互联,数据共享
  • 全部的节点都是一主一从(能够是多个从),其中从不提供服务,仅做为备用
  • 不支持同时处理多个键(如mset/mget),由于redis须要把键均匀分布在各个节点上,并发量很高的状况下同时建立键值会下降性能并致使不可预测的行为。
  • 支持在线增长、删除节点
  • 客户端能够连任何一个主节点进行读写

mark

21.22-21.23 REDIS集群搭建

场景设置

  • 两台机器,分别开启三个Redis服务(端口)
  • A机器上三个端口:7000、700二、7004,所有为主
  • B机器上三个端口:700一、700三、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。github

SLAVE(IP:192.168.8.132)

首先要先安装好Redis,而后执行以下操做: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版本):sql

安装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集群配置完成!vim

21.25 REDIS集群操做

由于Redis集群是分布式结构,因此能够链接任何一个端口。centos

链接:
[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
相关文章
相关标签/搜索