前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-redis特性和集群特性(下)(50)

『互联网架构』软件架构-redis特性和集群特性(下)(50)

作者头像
IT架构圈
发布2019-05-15 15:54:55
4580
发布2019-05-15 15:54:55
举报
文章被收录于专栏:IT架构圈IT架构圈

这次讲讲如何搭建redis集群,官方的介绍版本是三主三从的形式,这次就这样演示,并看看集群的一些特性。

(一)安装虚拟机

源码:https://github.com/limingios/netFuture/tree/master/redis-cluster-net ,可以查看,之前的文章,vagrant的介绍docker【中级】。

  • 环境

192.168.79.100 192.168.79.101 192.168.79.102 每台服务器1主1从,共3主3从 相关安装包存储路径:/root/soft/

系统类型

IP地址

节点角色

CPU

Memory

Hostname

Centos7

192.168.79.100

redis-master-1

2

2G

redis-master-1

Centos7

192.168.79.101

redis-master-2

2

2G

redis-master-2

Centos7

192.168.79.102

redis-master-3

2

2G

redis-master-3

(二)部署
  • 准备工作

三台主机都在root 目录下创建soft

代码语言:javascript
复制
mkdir soft
  • 下载 79.100机器
代码语言:javascript
复制
cd soft
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xvf redis-3.2.9.tar.gz
cd redis-3.2.9
  • 79.100机器安装
代码语言:javascript
复制
make install PREFIX=/root/soft/redis-3.2.9
  • 79.100机器配置
代码语言:javascript
复制
cd /root/soft/redis-3.2.9
#创建集群配置文件夹
mkdir cluster-conf
cd cluster-conf
#创建集群端口文件夹
mkdir 7001 
mkdir 7002
cd 7001
cp /root/soft/redis-3.2.9/redis.conf ./
cd ../7002
cp /root/soft/redis-3.2.9/redis.conf ./

79.100机器修改7001下的redis.conf,查找esc键,输入/名称

代码语言:javascript
复制
pwd
vi redis.conf
  1. bind 127.0.0.1 修改 bind 0.0.0.0
  2. port 6379 修改 port 7001
  3. logfile "" 修改 logfile "/root/soft/redis-3.2.9/cluster-conf/7001/redis.log"
  4. dir ./ 修改dir /root/soft/redis-3.2.9/cluster-conf/7001
  5. appendonly no修改appendonly yes
  6. 文件末尾添加 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000

79.100机器修改7002下的redis.conf,查找esc键,输入/名称

代码语言:javascript
复制
cd /root/soft/redis-3.2.9/cluster-conf/7002
pwd
vi redis.conf
  1. bind 127.0.0.1 修改 bind 0.0.0.0
  2. port 6379 修改 port 7002
  3. logfile "" 修改 logfile "/root/soft/redis-3.2.9/cluster-conf/7002/redis.log"
  4. dir ./ 修改dir /root/soft/redis-3.2.9/cluster-conf/7002
  5. appendonly no修改appendonly yes
  6. 文件末尾添加 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000
  • 配置说明 1.端口号。

port

2.指定了记录日志的文件。

logfile

3.数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录。

dir

4.是否开启集群

cluster-enabled

5.集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突

cluster-config-file nodes.conf

6.节点互连超时的阀值。集群节点超时毫秒数

cluster-node-timeout

7.默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

appendonly

  • scp拷贝到101,102主机
代码语言:javascript
复制
cd /root/soft
scp -r redis-3.2.9/ root@192.168.79.101:/root/soft/
scp -r redis-3.2.9/ root@192.168.79.102:/root/soft/
  • 启动100,101,102
代码语言:javascript
复制
#100 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &
#101 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &
#102 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &
  • 创建集群

100,101,102机器执行,安装ruby 2.4.1

代码语言:javascript
复制
yum -y install curl

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 

curl -sSL https://get.rvm.io | bash -s stable

find / -name rvm -print

source /usr/local/rvm/scripts/rvm

rvm install 2.4.1

rvm use 2.4.1 --default

gem install redis

100机器执行

代码语言:javascript
复制
cd /root/soft/redis-3.2.9/src
./redis-trib.rb create --replicas 1 192.168.79.100:7001 192.168.79.101:7001 192.168.79.102:7001 192.168.79.100:7002 192.168.79.101:7002 192.168.79.102:7002
#输入yes

redis-trib.rb是redis作者用ruby完成的是对redis cluster管理工具, 集成在redis的源码src目录下。

名称

作用

call

在集群全部节点上执行命令

set-timeout

设置集群节点间心跳连接的超时时间

del-node

从集群中删除节点

reshard

在线迁移slot

check

检查集群

import

将外部redis数据导入集群

add-node

将新节点加入集群

create

创建集群

info

查看集群信息

fix

修复集群

rebalance

平衡集群节点slot数量

  • 查看连接效果

里面三个master,三个slave。

代码语言:javascript
复制
cd /root/soft/redis-3.2.9/src
 ./redis-cli -c -p 7001
  • 查看集群
代码语言:javascript
复制
cd /root/soft/redis-3.2.9/src
 ./redis-cli -c -p 7001
 cluster nodes
  • 宕机重启集群
代码语言:javascript
复制
cd /root/soft/redis-3.2.9/src
./redis-trib.rb fix 192.168.79.100:7001

分片的方式,一个集群有16383的槽,根据主相对平均的方式来分配的。

(三)集群管理

增加节点:./redis-trib.rb add-node ip:port ip:port 第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口. 移除节点:redis-trib del-node ip:port <node-id> 第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址 改变一个从节点的主节点cluster replicate master-node-id

1.主节点挂了,是没有问题的正常。 2.从节点挂了,肯定是可以正常访问的。 3.两个都挂了(一主一从),不能用了

集群的方式不能使用select 1 直接选择数据库。但是它有槽的概念,cluster keyslot wst。可以看到这个key在那个槽位。

理论:redis最大的集群节点数16384,最大槽点数16384。一个集群16384个槽点。像微博,淘宝,他们的集群有个共性:N个集群,集群不在同一个机房中。

PS:redis的集群搭建基本就这样完毕了,写文章用了1个小时,但是搭建环境搞了我2个小时,家里的网速太不稳定了。就像咱们正常的情况可能应用都能承受的住,一旦突然情况量上去可能就无法承受,通过集群的很大好处,分担压力,容灾,众人拾柴火焰高。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)安装虚拟机
  • (二)部署
  • (三)集群管理
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档