NoSQL之Redis集群搭建---------【理论+实操】

一、案例概述

1.1 单节点Redis服务器带来的问题

●单点故障,服务不可用
●无法处理大量的并发数据请求
●数据丢失一大灾难

1.2 解决方法

●搭建Redis集群

二、案例前置知识点

2.1 Redis集群介绍

●Redis集群是一个提供在多个Redis间节点间共享数据的程序集
●Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误
●Redis集群提供分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令

2.2 Redis集群的优势

●自动分割数据到不同的节点上
●整个集群的部分节点失败或者不可达的情况下能够继续处理命令

2.3 Redis集群的实现方法

●有客户端分片
●代理分片
●服务器端分片

2.4 Redis-Cluster数据分片

在这里插入图片描述
在这里插入图片描述

2.5 Redis-Cluster的主从复制模型

在这里插入图片描述

2.6 案例实施

在这里插入图片描述
在这里插入图片描述

三、实验

实验环境:
1.两台服务器:模拟六个节点
2.需要每个服务器上面配置三个网卡

3.1 安装Redis(master)

*yum install gcc gcc-c++ make -y
cd /opt
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/
/usr/local/bin/
cd utils
./install_server.sh
*//一路回车,到额外路径需要手动配置
Please select the redis executable path [/usr/local/bin/redis-server] //输入下面配置,然后再回车
/usr/local/redis/bin/redis-server
netstat -natp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:
LISTEN 16457/redis-server

3.2 安装Redis(slave)

yum install gcc gcc-c++ make -y
cd /opt
tar zxvf redis-5.0.7.tar.gz

cd redis-5.0.7/
make

make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/
/usr/local/bin/
*
cd utils
./install_server.sh

//一路回车,到额外路径需要手动配置
Please select the redis executable path [/usr/local/bin/redis-server] //输入下面配置,然后再回车
/usr/local/redis/bin/redis-server

netstat -natp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 16457/redis-server

3.3 修改配置文件(master)

hostnamectl set-hostname master
su

vim /etc/redis/6379.conf
70 #bind 127.0.0.1 #注释掉bind,即监听所有
89 protected-mode no #关闭保护功能
93 port 6379
137 daemonize yes #以独立进程启动
700 appendonly yes #开启aof持久化
833 cluster-enabled yes #开启群集
841 cluster-config-file nodes-6379.conf #群集的配置文件
847 cluster-node-timeout 15000 #群集超时时间设置

cd /var/lib/redis/6379/
/etc/init.d/redis_6379 restart
//重启服务

3.4 修改配置文件(slave)

hostnamectl set-hostname master
su

vim /etc/redis/6379.conf
70 #bind 127.0.0.1 #注释掉bind,即监听所有
89 protected-mode no #关闭保护功能
93 port 6379
137 daemonize yes #以独立进程启动
700 appendonly yes #开启aof持久化
833 cluster-enabled yes #开启群集
841 cluster-config-file nodes-6379.conf #群集的配置文件
847 cluster-node-timeout 15000 #群集超时时间设置

cd /var/lib/redis/6379/
/etc/init.d/redis_6379 restart
//重启服务

3.5 安装rvm,RUBY控制集群软件(master)

cd /opt
tar zxvf rvm-master.tar.gz
cd rvm-master/
./install

source /etc/profile.d/rvm.sh
//按照提示,启用环境变量

rvm list known
//列出可以安装的ruby版本

rvm install 2.4.1
rvm use 2.4.1
ruby -v

ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

gem install redis
//再次安装redis

3.6 添加网卡(master)

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.18 netmask 255.255.255.0 broadcast 20.0.0.255

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.181 netmask 255.255.255.0 broadcast 20.0.0.255

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.182 netmask 255.255.255.0 broadcast 20.0.0.255

systemctl restart network

3.7 添加网卡(slave)

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.19 netmask 255.255.255.0 broadcast 20.0.0.255

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.191 netmask 255.255.255.0 broadcast 20.0.0.255

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.192 netmask 255.255.255.0 broadcast 20.0.0.255

systemctl restart network

3.8 主服务器创建群集

redis-cli --cluster create 20.0.0.18:6379 20.0.0.181:6379 20.0.0.182:6379 20.0.0.19:6379 20.0.0.191:6379 20.0.0.192:6379 --cluster-replicas 1

//反馈的信息输入yes回车,以下为反馈信息

Performing hash slots allocation on 6 nodes…
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 20.0.0.191:6379 to 20.0.0.18:6379
Adding replica 20.0.0.192:6379 to 20.0.0.181:6379
Adding replica 20.0.0.19:6379 to 20.0.0.182:6379
M: a7eee9a641cee397945f06ac4c21ecac971a6f15 20.0.0.18:6379
slots:[0-5460] (5461 slots) master
M: a7eee9a641cee397945f06ac4c21ecac971a6f15 20.0.0.181:6379
slots:[5461-10922] (5462 slots) master
M: a7eee9a641cee397945f06ac4c21ecac971a6f15 20.0.0.182:6379
slots:[10923-16383] (5461 slots) master
S: 26a71138d1246f4a311a0d3ea172a39738e9cd32 20.0.0.19:6379
replicates a7eee9a641cee397945f06ac4c21ecac971a6f15
S: 26a71138d1246f4a311a0d3ea172a39738e9cd32 20.0.0.191:6379
replicates a7eee9a641cee397945f06ac4c21ecac971a6f15
S: 26a71138d1246f4a311a0d3ea172a39738e9cd32 20.0.0.192:6379
replicates a7eee9a641cee397945f06ac4c21ecac971a6f15
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 20.0.0.18:6379)
M: a7eee9a641cee397945f06ac4c21ecac971a6f15 20.0.0.18:6379
slots:[0-16383] (16384 slots) master
1 additional replica(s)
S: 26a71138d1246f4a311a0d3ea172a39738e9cd32 20.0.0.19:6379
slots: (0 slots) slave
replicates a7eee9a641cee397945f06ac4c21ecac971a6f15
[OK] All nodes agree about slots configuration.

Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
//一主一从的绑定关系是随机的

3.9 主从数据验证

[root@master rvm-master]# redis-cli -h 20.0.0.18 -p 6379
创建一个键值
20.0.0.18:6379> set user zhangsan

OK

20.0.0.18:6379> keys *

  1. “user”

20.0.0.18:6379> get user
“zhangsan”

20.0.0.18:6379> exit

[root@master rvm-master]# redis-cli -h 20.0.0.181 -p 6379
到181节点查看

20.0.0.181:6379> keys *

  1. “user”

20.0.0.181:6379> get user
“zhangsan”

20.0.0.181:6379> exit

[root@master rvm-master]# redis-cli -h 20.0.0.182 -p 6379
20.0.0.182:6379> get user

“zhangsan”

20.0.0.182:6379> quit

[root@slave opt]# redis-cli -h 20.0.0.192 -p 6379
20.0.0.192:6379> get user

(error) MOVED 14124 20.0.0.18:6379

3.10 测试hash方式存储的值验证与设置键的自动删除时间

[root@master rvm-master]# redis-cli -h 20.0.0.18 -p 6379
20.0.0.18:6379> hset users name zhangsan

(integer) 1

20.0.0.18:6379> keys *

  1. “user”
  2. “users”

20.0.0.18:6379> hget users
(error) ERR wrong number of arguments for ‘hget’ command

20.0.0.18:6379> hget users name
“zhangsan”

20.0.0.18:6379> expire user 10
(integer) 1
//设置user的缓存时间为10s

//过了10秒后
20.0.0.18:6379> get user

(nil)
//查看user信息,无法显示

20.0.0.18:6379> keys *

  1. “users”
    //查看键值,发现user已经消失

20.0.0.18:6379> quit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值