Redis集群
使用redis做缓存工具
实现系统高可用,redis需要做主备。使用redis做分片集群。
向业务逻辑中添加缓存。
1使用redis做缓存
1.1安装redis
版本说明
使用redis4.0.9版本。redis4.0.9版本主要增加了redis集群功能。
安装的前提条件:
需要安装gcc:yum
install gcc-c++
下载redis的源码包。
wget命令下载:
yum -y install wget
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
或去官网下载
把源码包上传到linux服务器
解压源码包
tar -zxvf redis-4.0.9.tar.gz
cp -r redis-4.0.9 /usr/local/
Make编译 //在redis-4.0.9源码文件夹下执行
make
Make install 安装
//指定安装的路径
[
root@localhost redis-4.0.9]# make install PREFIX=/usr/local/redis
1.2启动redis
前端启动模式
/usr/local/redis/bin/redis-server
默认是前端启动模式,端口是6379
后端启动
从redis的源码文件夹redis.4.0.9中复制redis.conf到redis的安装目录。
cp -r /usr/local/redis-4.0.9/redis.conf ../redis/bin
修改配置文件
vi /usr/local/redis/bin/redis.conf 修改下面两项
(在命令模式下使用 “/ 关键字” 来查找daemonize, 字母 n来查看下一个匹配项)
bind 127.0.01 表示外部不能访问。所以需要进行处理。
*注释掉bind 127.0.0.1 或者将127.0.0.1改成这个服务器的IP地址
[root@localhost bin]# ./redis-server redis.conf //指定redis配置文件启动
[root@localhost bin]# ./redis-cli //来启动redis客户端
127.0.0.1:6379> shutdown // 关闭 redis客户端
not connected> exit //退出
1.3Redis常用命令
测试安装是否成功:
127.0.0.1:6379>set redis hello
OK
127.0.0.1:6379> get redis
"hello"
集群结构
集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。
搭建一个伪分布式的集群,使用6个redis实例来模拟。
2.3搭建集群需要的环境
搭建集群需要使用到官方提供的ruby脚本。
需要安装ruby的环境。
安装ruby
1.
yum install ruby
[root@localhost local]# yum install ruby
2.
yum install rubygems
[root@localhost local]# yum install rubygems
redis集群管理工具redis-trib.rb在redis-4.0.9 的源码文件夹下面的
[root@localhost~]# cd redis-4.0.9
[root@localhost redis-4.0.9]# cd src
[root@localhost src]# ll *.rb
-rwxrwxr-x.1 root root 48141 Apr 1 07:01redis-trib.rb
[root@localhost src]#
脚本需要的ruby包:
需要将redis-4.0.2.gem上传到linux服务。
安装ruby的包:
然后再在这个redis-4.0.2.gem文件所在路径下执行gem命令:
[root@localhost redis]# gem install redis-4.0.2.gem
发生错误:
ERROR:
Error installing redis-4.0.2.gem:
redis requires
Ruby version >= 2.2.2. //Ruby version 版本必须要大于等于2.2.2。当前Ruby version 太低,Centos7 的yum源的ruby版本只支持2.0
查看当前ruby
-v 版本
[root@localhost redis]# ruby -v
ruby官网推荐rvm
方式更新ruby版本:
1.
获取
[root@localhost local]# gpg --keyserver hkp://keys.gnupg.net --recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
2.
[root@localhost local]# \curl -sSL https://get.rvm.io | bash -s stable
[root@localhost local]# find / -name rvm -print
[rooocalhost local]# source /usr/local/rvm/scripts/rvm
[root@localhost local]# rvm install 2.4.1 //安装一个ruby版本
[root@localhost local]# rvm use 2.4.1 // 使用指定版本的ruby
[root@localhost local]# rvm use 2.4.1–default //设置默认版本
[root@localhost local]# rvm remove 2.0.0 // 删除2.0.0版本的
[root@localhost local]# ruby–version //查看ruby版本,安装
[root@localhost redis]# gem install redis-4.0.2.gem
Successfully
installed redis-4.0.2
1
gem installed
Installing
ri documentation for redis-4.0.2...
InstallingRDoc documentation for redis-4.0.2.…
2.4集群的搭建
第一步:创建6个redis实例,复制六次redis文件夹,修改端口号从7001~7006
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis01
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis02
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis03
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis04
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis05
[root@localhost redis-cluster]# cp -r ../redis/bin ./redis06
第二步:删除dump.rdb
文件
[root@localhost redis01]# rm -rf dump.rdb
第三步:修改redis的配置文件
1、修改端口号
2、打开cluster-enable前面的注释。
第四步:把创建集群的ruby脚本redis-4.0.9文件夹下的redis-trib.rb复制到redis-cluster目录下。
[root@localhost local]# cp redis-4.0.9/src/redis-trib.rb ./redis-cluster/
第五步:启动6个redis实例
创建sh脚本:
[root@localhost redis-cluster]# vi startall.sh // 在redis-cluster文件夹下面创建
//编写了个sh脚本,将linux命令放脚本文件中顺序执行
脚本命令内容如下:
cd redis01/
./redis-server ./redis.conf
cd ../
cd redis02/
./redis-server ./redis.conf
cd ../
cd redis03/
./redis-server ./redis.conf
cd ../
cd redis04/
./redis-server ./redis.conf
cd ../
cd redis05/
./redis-server ./redis.conf
cd ../
cd redis06/
./redis-server ./redis.conf
给startall.sh的执行权限:
[root@localhost redis-cluster]# chmod 777 ./startall.sh
第六步:创建集群。//
1 代表一个备份
./redis-trib.rb
create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
[root@bogon redis-cluster]# ./redis-trib.rb create --replicas 1
192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003
192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
>>>
Creating cluster
>>>
Performing hash slots allocation on 6 nodes...
Using
3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding
replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding
replica 127.0.0.1:7006 to 127.0.0.1:7002
Adding
replica 127.0.0.1:7004 to 127.0.0.1:7003
>>>
Trying to optimize slaves allocation for anti-affinity
[WARNING]
Some slaves are in the same host as their master
M:
019dde9da0dfd6b7ce5091c0670dcd5514a66c45 127.0.0.1:7001
slots:0-5460
(5461 slots) master
M:
f65c3fd8019d85bddb526c5ac05514c40dec0ff3 127.0.0.1:7002
slots:5461-10922
(5462 slots) master
M:
ccbc6d6fd6d7c901065728d19e487a34451b8ab3 127.0.0.1:7003
slots:10923-16383
(5461 slots) master
S:
d92bd81cb4a35a01f0bb3643f704df2c1301c4d3 127.0.0.1:7004
replicates
ccbc6d6fd6d7c901065728d19e487a34451b8ab3
S:
ceb866951d9d8c1da3099370be1f9d9f3f4556f2 127.0.0.1:7005
replicates
019dde9da0dfd6b7ce5091c0670dcd5514a66c45
S:
85be972bf84b2cfb6bba07d148a7a6c2a4cafba1 127.0.0.1:7006
replicates
f65c3fd8019d85bddb526c5ac05514c40dec0ff3
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:7001)
M:
019dde9da0dfd6b7ce5091c0670dcd5514a66c45 127.0.0.1:7001
slots:0-5460
(5461 slots) master
1
additional replica(s)
S:
85be972bf84b2cfb6bba07d148a7a6c2a4cafba1 127.0.0.1:7006
slots: (0
slots) slave
replicates
f65c3fd8019d85bddb526c5ac05514c40dec0ff3
M:
f65c3fd8019d85bddb526c5ac05514c40dec0ff3 127.0.0.1:7002
slots:5461-10922
(5462 slots) master
1
additional replica(s)
S:
ceb866951d9d8c1da3099370be1f9d9f3f4556f2 127.0.0.1:7005
slots: (0
slots) slave
replicates
019dde9da0dfd6b7ce5091c0670dcd5514a66c45
M:
ccbc6d6fd6d7c901065728d19e487a34451b8ab3 127.0.0.1:7003
slots:10923-16383
(5461 slots) master
1
additional replica(s)
S:
d92bd81cb4a35a01f0bb3643f704df2c1301c4d3 127.0.0.1:7004
slots: (0
slots) slave
replicates
ccbc6d6fd6d7c901065728d19e487a34451b8ab3
[OK]
All nodes agree about slots configuration.
>>>
Check for open slots...
>>>
Check slots coverage...
[OK]
All 16384 slots covered.
[root@bogon redis-cluster]#
2.5测试集群
在任何一个实例都可以登录任何一个端口的数据库中
[root@bogonredis-cluster]# redis01/redis-cli -h 192.168.25.153 -p 7002-c
// -c 是不可缺少的
[root@bogon redis-cluster]# redis01/redis-cli -h 192.168.25.153 -p 7002
192.168.25.153:7002>
set a 100
(error)
MOVED 15495 192.168.25.153:7003
192.168.25.153:7002>
[root@bogon redis-cluster]# redis01/redis-cli -h 192.168.25.153 -p 7002 -c
192.168.25.153:7002>set a 100
->
Redirected to slot [15495] located at 192.168.25.153:7003
OK
192.168.25.153:7003>
2.6关闭redis
//单机客户端关闭方式
[root@localhost redis-cluster]# redis01/redis-cli -p 7001 shutdown
//编写了个sh脚本,将linux命令放脚本文件中顺序执行,依次关闭redis客户端
[root@localhost redis-cluster]# vi shutdown.sh
[root@localhost redis-cluster]# chmod +x ./shutdown.sh
[root@localhost redis-cluster]# ./shutdown.sh
内容:
查看redis客户端信息
127.0.0.1:6379> info
或者
127.0.0.1:6379>info replication
或者
info clients