两种redis集群搭建方式

it2023-07-08  72

redis集群及相关缓存问题

redis简介介绍redis的官方网站 redis单机版安装redis cluster集群安装1. 集群安装的准备工作2. redis5以前版本的集群启动3. redis5及以后版本的集群启动4. 主从节点的手动切换

redis简介

介绍

Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如:

字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets)范围查询位图(Bitmaps)基数计算(HyperLogLogs)地理空间(geospatial)

redis 内置了 复制,LUA脚本, LRU驱动事件,事务和不同级别的 磁盘持久化, 并通过 Redis哨兵和Cluster提供高可用性。

由于其支持多种存储格式,对高并发读写的优秀支持以及高可用使得redis逐渐成为最广泛使用的nosql数据库.

redis的官方网站

非常建议在安装和使用之前先看一下官方文档,里面对于redis安装和使用过程有非常明确的指导,是最有价值和最有参考意义的. 如果英文好的话可以看英文文档,地址: https://redis.io/

如果看英文比较吃力,也有中文社区 http://www.redis.cn/

redis单机版安装

检查是否安装gcc等依赖: yum list installed | grep gcc yum list installed | grep pcre-devel yum list installed | grep zlib-devel yum list installed | grep openssl-devel

如果没有安装需要安装:

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 上传附件redis文件夹 解压redis,安装到/app/redis目录 tar -zxvf redis-3.2.1.tar.gz -C /app cd /app/redis-3.2.1 make make install PREFIX=/app/redis 启动redis 进入redis安装目录 cd /app/redis/bin ./redis-server 查看redis进程 ps -ef|grep redis

如果有redis进程号存在证明安装成功了

redis cluster集群安装

集群安装很简单,但是不同的版本有不同的安装方式

1. 集群安装的准备工作

创建cluster

cd /app/redis/bin mkdir redis_cluster cd redis_cluster mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 mkdir 7006

注: 如果在不同的服务器下安装redis集群就将对应的cluster文件夹创建到该服务器下

修改redis.conf 复制redis.conf文件到集群目录下

cp /app/redis-3.2.1/redis.conf /app/redis/bin/redis_cluster/7000 vi redis.conf

修改如下:

daemonize yes bind 192.168.56.101 #绑定的ip,一定要修改 pidfile /var/run/redis_7000.pid #生成的唯一标识,一定要修改成不同的 logfile "/app/redis/redis_log/redis_7000.log" #根据需要修改 dir "/app/redis_db" #可以不修改 port 7000 #根据规划修改 cluster-enabled yes #开始集群,一定要修改 cluster-config-file nodes_7000.conf #自动生成配置文件,一定要修改 cluster-node-timeout 5000 #超时时间,根据需要修改 appendonly yes #打开aof持久化策略 # 新增配置 masterauth "yourpassword" #根据需要新增,如果你的redis需要密码则需要此项 requirepass "yourpassword" #需要密码登录

启动节点 检查是否开启了防火墙:

systemctl status firewalld

如果开启了要开放对应的两个端口如:7001,17001 例: 添加指定需要开放的端口:

firewall-cmd --add-port=7001/tcp --permanent firewall-cmd --add-port=17001/tcp --permanent

重载入添加的端口:

firewall-cmd --reload

查询指定端口是否开启成功:

firewall-cmd --query-port=7001/tcp firewall-cmd --query-port=17001/tcp

启动redis节点 redis-server redis_cluster/7001/redis.conf

依次配置好剩下的节点

2. redis5以前版本的集群启动

安装ruby和rubygem

离线安装

下载redis.gem 上传准备的包,解压并安装(具体版本可以在官网中找到) https://gems.ruby-china.com/search?utf8=%E2%9C%93&query=redis 点进去以后 选择自己的版本点进去,下载

下载ruby 当执行以下语句时会提醒你当前版本所需要的ruby最低版本

gem install redis ERROR: Error installing redis: redis requires Ruby version >= 2.3.0

到ruby的官方网站去下载对应的包,至少要大于提示的最低版本 http://www.ruby-lang.org/en/downloads/

下载rubygem https://rubygems.org/pages/download

安装 (1)ruby

tar -xvf ruby-2.3.0.tar.gz -C /app/ cd /app/ruby-2.3.0/ ./configure make && make install

检查是否成功

ruby -v

(2) rubygem

tar -xvf rubygems-2.3.0.tgz -C /app/ cd /app/rubygems-2.3.0/ ruby setup.rb

(3) redis gem模块 上传redis-3.3.1.gem到/app/rubygems-2.3.0/下

gem install -l ./redis-3.3.1.gem

RVM安装 可以参考其他博客教程 Redis集群环境Ruby必须版本2.2以上解决

(4)修改配置 powershell find / -name client.rb 找到位于此目录下的文件:lib/redis/client.rb

vi /usr/local/lib/ruby/gems/2.3.0/gems/redis-3.3.1/lib/redis/client.rb

修改password (5) 启动集群 进入redis源包下

cd /app/redis-3.2.1/src

创建并启动集群

./redis-trib.rb create -a yourpassword --replicas 1 192.168.75.23:7001 192.168.75.24:7004 192.168.75.24:7003 192.168.75.25:7006 192.168.75.25:7005 192.168.75.23:7002

注:

-a:密码 --replicas:副本数量(1为每个主节点有一个子节点) 集群按照一定的规则创建主备节点,写在前面的为主节点,紧跟其后的是它的从节点 (但存在一定的可能redis没有按照这个规则创建,后面会介绍怎么手动修改主备节点)主备节点的创建原则: (1) 至少需要6个节点(三主三从) (2) 根据redis选举机制,创建集群时尽量不让主节点都在一台机器上,或者一台机器上拥有超过半数的主节点 (3) 主节点的从节点需要分布在其他服务器上,如:192.168.75.23:7001的从节点应该为192.168.75.24:7004

(6)节点加入集群

进入redis安装目录cd \app\redis\bin 登录子节点redis-cli -h 192.168.75.23 -p 7001 -c 输入命令auth yourpassword cluster meet 192.168.75.24 7004 每个服务器节点都meet一遍然后等待连接成功

(7)测试集群是否创建成功 在redis中输入set命令,如果执行成功,集群创建成功

3. redis5及以后版本的集群启动

进入redis源包下

cd /app/redis-3.2.1/src

创建并启动集群

redis-cli -a yourpassword --cluster create --cluster-replicas 1 10.128.52.33:7001 10.128.52.34:7004 10.128.52.34:7003 10.128.52.35:7006 10.128.52.35:7005 10.128.52.33:7002

4. 主从节点的手动切换

从节点的手动切换 查看主从节点信息 cluster slots

如果发现有主节点的从节点是当前服务器的,需要手动将其他服务器的从节点更改为自己的从节点. 假设: 192.168.75.23 7001的从节点为192.168.75.23 7002,现在需要将192.168.75.24 7004更改为192.168.23 7001的从节点 操作如下: 登录192.168.75.24 7004,执行命令(masterid就是上图中的节点id,这里需要输入7001的节点id)

cluster replicate masterid

依次更换好其他从节点 再次执行 cluster slots查看集群信息

主节点的切换 一般不会出现redis主节点分配到同一台服务器的情况,但是如果出现了就需要重新分配主节点.

如果是刚开始创建的集群,建议删除所有的db文件和生成的节点文件,直接重新创建集群;但如果是无法停止redis服务并重新创建集群,那么就需要手动切换: redis没有直接更换主节点的命令,手动更新主节点非常麻烦.如果该主节点的的从节点位于其他服务器,可以手动下线该主节点,sentinel将自动将从节点变更为主节点,重启原先的主节点以后将自动变成原从节点(现主节点)的从节点如果情况更复杂一点,提供以下思路供参考: (1) 在需要创建主节点的服务器新建一个节点(如75.24:7007),启动,并加入到当前集群 新增结束后执行新增主节点命令:redis-trib.rb add-node 192.168.75.24:7007 //redis5以后用redis-cli redis-cli add-node 192.168.75.24:7007 (2) 重新分配hash槽,将你要挪动的主节点的所有hash槽全部迁移到新主节点上redis-trib.rb reshard 192.168.75.24:7003 //可以为任意的节点 在此登录的7003只是作为客户端去访问的 //redis5以后同样用redis-cli 原主节点有多少个就填多少个 等待一段时间之后按照以下输入 完成后检查集群cluster slots 分配成功后下线原来的主节点

以下是我觉得写的比较清晰的文章,推荐一下,可以看看 什么是redis的文件事件处理器 redis是单线程还是多线程 redis事件操作为什么选择单线程

总结一下: redis是单线程模型,但是仅仅是文件事件分派时使用单线程,而在I/O操作时为了提高效率在4版本以后采用了多线程. redis执行事件时不需要通过多线程提高效率,因为内存操作本来就非常快,而多线程频繁切换上下文反而会影响效率. 但是redis的瓶颈在内存和io.内存不用说,但单线程的io如果网络不好导致单线程阻塞在那里,将会非常影响效率,所以在高版本中,采用多线程提高网络数据和协议的处理效率,降低网络阻塞对redis性能的影响

最新回复(0)