Redis集群搭建

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis集群搭建



一、 环境准备

   部署模式:1主2从3哨兵

   Redis版本:redis7.2.3

   gcc版本:gcc9.3.1

IP地址

操作系统

节点名称

角色

192.168.122.120 Centos7.6 node2.vteamcloud.com 哨兵节点
192.168.122.98 Centos7.6 node3.vteamcloud.com 哨兵节点
192.168.122.226 Centos7.6 node4.vteamcloud.com 哨兵节点
192.168.122.227 Centos7.6 node5.vteamcloud.com 工作节点
192.168.122.237 Centos7.6 node6.vteamcloud.com 工作节点
192.168.122.238 Centos7.6 node7.vteamcloud.com 工作节

二、 安装gcc

centos默认的gcc最高版本是4.8.5,而redis7需要更高版本的gcc来支持。

#安装centos-release-scl
yum -y install centos-release-scl 
#安装最新版本的GCC
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile #修改环境变量
source /etc/profile
gcc -v

三、 关闭防火墙

service iptables stop
service firewalld stop

如果不想关闭防火墙,则开放6379、16379、26379三个端口。

vim /etc/sysconfig/iptables
# 加入如下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 16379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 26379 -j ACCEPT

重启iptables服务

service iptables restart

四、 搭建主从集群

      redis哨兵是基于主从模式搭建的,因此先要搭建一个主从集群。

4.1 解压安装包并编译

# 进入安装目录
cd /usr/local
# 解压
tar -zxvf redis-7.2.3.tar.gz
# 进入redis目录
cd redis-7.2.3/
# 编译
make && make install
# 创建bin目录
mkdir bin
# 创建配置文件目录
mkdir config
# 创建数据存放目录
mkdir data
# 进入src目录
cd src
# 将常用命令复制到bin目录
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-7.2.3/bin
# 将配置文件复制到config目录
cp redis.config sentinel.conf /usr/local/redis-7.2.3/config

4.2 编写配置文件

    主从节点的配置基本差不多,只是从节点要配置数据从哪个节点同步。

vim redis.conf
# 修改以下内容
# 端口
port 6379
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid  # 把pid进程号写入pidfile配置的文件
# log文件输出位置
logfile "/usr/local/redis-7.2.3/logs/redis.log"
# 工作目录,注意,目录不存在则创建
dir /usr/local/redis-7.2.3/data
# 需要注释掉bind,127.0.0.1 是指只能本地访问
bind 0.0.0.0
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes
# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass Redis@123456
# 当master设置了密码保护时,slave服务连接master的密码
masterauth Redis@123456
# 指定本地数据库文件名
dbfilename dump.rdb
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
#(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有10000 个更改。)
# 开启AOF持久化
appendonly no
# aof持久化文件名
appendfilename "appendonly.aof"
# aof持久化频率  每秒同步
appendfsync everysec
# 从哪个节点同步数据,只有从节点要这个配置,Redis 5.0之前使用slaveof
replicaof 192.168.0.60 6379 
# 是否只读,这个配置只对从节点有效,所有节点配置为yes。
replica-read-only yes

4.3 启动服务

# 启动服务
./redis-server /usr/local/redis-7.2.3/config/redis.conf
# 连接服务
./redis-cli -h 192.168.122.227 -p 6379
# 输入密码:
auth Redis@123456
# 查看节点信息:
info replication
# 查看日志
tail -1000f redis.log

五、 搭建哨兵节点

  搭建哨兵节点的步骤到解压、编译这一步与主从节点都是一致的。只是使用的配置文件不同。

5.1 编写配置文件

vim sentinel.conf

#端口默认为26379。
port:26379
 
#关闭保护模式,可以外部访问
protected-mode:no
 
#设置为后台启动
daemonize:yes
 
#日志文件
logfile:./sentinel-26379.log
 
#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 192.168.122.227 6379 2
 
#当在Redis实例中开启了requirepass,这里就需要提供密码
sentinel auth-pass mymaster Redis@123456
 
#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 3000
 
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1
 
#故障转移的超时时间,这里设置为三分钟
sentinel failover-timeout mymaster 180000
 
#sentinel工作目录(默认/tmp)
dir  ./sentinel-work-26379
 
#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26379.pid

注意:如果要重新搭建集群,最好把data、logs和进程文件pidfile /var/run/redis_6379.pid都删掉。同时删除配置文件生成的进程id和底部的集群选举信息。

5.1 启动服务

./redis-sentinel /usr/local/redis-7.2.3/config/sentinel.conf

六、 搭建cluster集群模式

 cluster模式的搭建与主从模式类似,只是要多一步集群初始化操作。

6.1  cluster节点配置

 cluster的配置仍然使用redis.conf,它不需要配置从节点从哪个节点读取数据。但是配置允许cluster部署。

vim redis.conf
 
# 修改以下内容
 
# 端口
port 6379
 
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid  # 把pid进程号写入pidfile配置的文件
 
# log文件输出位置
logfile "/usr/local/redis-7.2.3/logs/redis.log"
 
# 工作目录,注意,目录不存在则创建
dir /usr/local/redis-7.2.3/data
 
# 需要注释掉bind,127.0.0.1 是指只能本地访问
bind 0.0.0.0
 
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes
 
# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
 
# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass Redis@123456
 
# 当master设置了密码保护时,slave服务连接master的密码
masterauth Redis@123456
 
# 指定本地数据库文件名
dbfilename dump.rdb
 
# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16
 
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)
 
# 开启AOF持久化
appendonly no
# aof持久化文件名
appendfilename "appendonly.aof"
# aof持久化频率  每秒同步
appendfsync everysec
 
# 启动集群模式
cluster-enabled yes
# 集群节点信息文件,这里6379最好和port对应上
cluster-config-file nodes-6379.conf
cluster-node-timeout 10000
 
# 是否只读,这个配置只对从节点有效,所有节点配置为yes。
replica-read-only yes

6.2  节点启动

# 启动服务
./redis-server /usr/local/redis-7.2.3/config/redis.conf
 
# 连接服务
./redis-cli -h 192.168.122.227 -p 6379
 
# 输入密码:
auth Redis@123456
 
# 查看节点信息:
info replication
 
# 查看日志
tail -1000f redis.log

6.3 集群初始化

# 此命令只要在一台机器上执行即可。6个节点,前面3个是主,后3个是从。一一对应的关系。
./redis-cli -a Redis@123456 --cluster create --cluster -replicas 1   192.168.122.227:6379 192.168.122.237:6379 192.168.122.238:6379 192.168.122.120:6379 192.168.122.98:6379 192.168.122.226:6379

6.4 集群验证

# 进入节点后输入下面命令查看集群节点状态
cluster info
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 缓存 NoSQL
服务搭建篇(五) Redis单机/redis-cluster集群搭建
当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射表。下面第21步操作会有演示
232 0
|
12月前
|
负载均衡 NoSQL Redis
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
|
6月前
|
NoSQL Linux Redis
Redis 6.X Sentinel 哨兵集群搭建
Redis 6.X Sentinel 哨兵集群搭建
76 5
|
6月前
|
存储 监控 NoSQL
一文搞懂不同方式Redis集群搭建
一文搞懂不同方式Redis集群搭建
62 0
|
6月前
|
NoSQL Linux Redis
Redis 6.X Cluster 集群搭建
Redis 6.X Cluster 集群搭建
75 0
|
6月前
|
NoSQL Ubuntu Redis
redis主从配置+集群搭建
redis主从配置+集群搭建
67 0
|
6月前
|
NoSQL Redis Ruby
redis高可用集群搭建
redis高可用集群搭建
|
6月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
218 0
|
6月前
|
NoSQL Shell Redis
Docker【应用 02】借助Docker部署Redis集群(Docker网卡创建+6个Redis集群搭建shell脚本)
Docker【应用 02】借助Docker部署Redis集群(Docker网卡创建+6个Redis集群搭建shell脚本)
114 0
|
6月前
|
存储 运维 监控
百度搜索:蓝易云【【NOSQL】redis哨兵模式、集群搭建详解。】
总结来说,Redis哨兵模式和集群都是为了提高Redis的高可用性和可伸缩性。哨兵模式适用于少数几个Redis节点的环境,当主节点不可用时能够自动进行故障切换。而集群则适用于大规模数据存储和处理的场景,通过数据分片和故障检测实现分布式的高性能Redis环境。根据具体需求,选择适合的方案来搭建Redis环境。
57 0