首页 > 数据库 >手工创建Redis 集群

手工创建Redis 集群

时间:2023-11-21 16:01:39浏览次数:32  
标签:手工 cluster Redis redis 6379 集群 6380 110.128 rxtd

官方的工具redis-trib.rb需要使用ruby,在kylin上不好安装。所以需要手工配置redis cluster。

1.使用配置文件启动redis

按照ip后缀拷贝到机器(90-92)上,每个机器上启动两个示例,分别使用6379和6380端口。
redis启动命令:./redis-server redis.conf

启动失败处理:

  • 错误提示:
1593407:M 07 Jul 2021 10:42:31.637 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1593407:M 07 Jul 2021 10:42:31.638 # WARNING Your kernel has a bug that could lead to data corruption during background save. Please upgrade to the latest stable kernel.
1593407:M 07 Jul 2021 10:42:31.638 # Redis will now exit to prevent data corruption. Note that it is possible to suppress this warning by setting the following config: ignore-warnings ARM64-COW-BUG
  • 错误处理:
# 错误1
执行以下命令
echo 1 > /proc/sys/vm/overcommit_memory
#错误2/3(该bug在kernel5.10以后版本修复,只反针对arm架构的服务器)
redis配置文件中放开配置`ignore-warnings ARM64-COW-BUG`

配置文件里边已经包含了启动集群必须的配置。启动之后可以用ps -ef | grep redis确认redis已经启动,并且可以看到redis进程上有[cluster]标志:

[root@i-biiiaknk ~]# ps -ef | grep redis
root     1706432       1  0 09:55 ?        00:00:13 redis-server 130.1.14.90:6379 [cluster]
root     1706438       1  0 09:55 ?        00:00:08 redis-server 130.1.14.90:6380 [cluster]
root     1790777 1654673  0 11:16 pts/0    00:00:00 grep redis

2.集群握手

只要一个在集群里面的机器meet了其他机器,这个集群里的其他机器也能感知到刚刚meet的集群。所以我们采用如下命令:

redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster meet 110.128.6.36 6379
redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster meet 110.128.6.37 6379
redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster meet 110.128.6.35 6380
redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster meet 110.128.6.36 6380
redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster meet 110.128.6.37 6380

这样6个节点都连接上了。可以用cluster nodes命令查看:

[root@i-biiiaknk ~]# redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b41ca9860dae529f7f577bd76f2f56b22e5e48c4 110.128.6.36:6380@16380 master - 0 1625626481411 4 connected
0b253ee5a7072d5b878e4c1c175a49fe063fdbb5 110.128.6.35:6380@16380 master - 0 1625626479404 3 connected
14ed1ee1382b22b294b7c938ed4f8e552c6ebb88 110.128.6.35:6379@16379 myself,master - 0 1625626480000 1 connected
95469852802e89cbf167e54354ec9df803df03d8 110.128.6.37:6379@16379 master - 0 1625626481000 2 connected
c1aab5839bc4a3879c92789ce99686ddd6daff13 110.128.6.36:6379@16379 master - 0 1625626480507 5 connected
cca133906cfcf416a10199648e62a1ca8fadccfb 110.128.6.37:6380@16380 master - 0 1625626481512 0 connected

3.建立副本

现在所有的机器都是master,我们需要建立副本,把一些机器设置成slave。这需要使用cluster replicate命令:

redis-cli -h 110.128.6.35 -p 6380 -a rxtd@123 cluster replicate 14ed1ee1382b22b294b7c938ed4f8e552c6ebb88
redis-cli -h 110.128.6.36 -p 6380 -a rxtd@123 cluster replicate c1aab5839bc4a3879c92789ce99686ddd6daff13
redis-cli -h 110.128.6.37 -p 6380 -a rxtd@123 cluster replicate 95469852802e89cbf167e54354ec9df803df03d8

注意这里使用的是节点id,一定要用cluster nodes命令获得正确的节点id。另外,cluster replicate命令是把当前节点设置成指定节点的slave,这个不要搞反了。
设置完成之后可以再使用cluster nodes命令确认三个6380的节点都变成slave了,并且指向正确的master节点。

4.分配slot

redis cluster一共有16383个槽,需要分配到三个节点。我们需要写一个脚本addslots.sh

start=$1
end=$2
ip=$3
port=$4
for slot in `seq ${start} ${end}`
do
        echo "slot:${slot}"
        redis-cli -h ${ip} -p ${port} -a rxtd@123 cluster addslots ${slot}
done

然后使用这个脚本分配slot:

./addslots.sh 0 5461 110.128.6.35 6379
./addslots.sh 5462 10922 110.128.6.36 6379
./addslots.sh 10923 16383 110.128.6.37 6379

注意,一定要在master节点上add,要不然slot的配置不能同步到所有的节点上去!!!不要问我怎么知道的,那是一个悲伤的故事。。。
可以使用cluster nodes命令来确定master节点。
如果不小心加错了slot,可以在添加的节点上使用cluster delslots命令删除。如果用上边的脚本加了很多,那么可以相应的写一个delslot.sh来删除:

start=$1end=$2ip=$3port=$4for slot in `seq ${start} ${end}`do        echo "slot:${slot}"        redis-cli -h ${ip} -p ${port} -a rxtd@123 cluster delslots ${slot}done

这样设置完毕之后,用cluster info命令就能看到集群已经能正常工作了。

[root@i-biiiaknk ~]# redis-cli -h 110.128.6.35 -p 6379 -a rxtd@123 cluster infoWarning: Using a password with '-a' or '-u' option on the command line interface may not be safe.cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:5cluster_my_epoch:1cluster_stats_messages_ping_sent:1347cluster_stats_messages_pong_sent:1360cluster_stats_messages_meet_sent:5cluster_stats_messages_sent:2712cluster_stats_messages_ping_received:1360cluster_stats_messages_pong_received:1352cluster_stats_messages_received:2712

5.配置文件

  • 110.128.6.35_6379
bind 110.128.6.35
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6379.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6379.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6379.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6379.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG
  • 110.128.6.35_6380
bind 110.128.6.35
port 6380
daemonize yes
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6380.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6380.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6380.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6380.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG
  • 110.128.6.36_6379
bind 110.128.6.36
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6379.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6379.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6379.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6379.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG
  • 110.128.6.36_6380
bind 110.128.6.36
port 6380
daemonize yes
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6380.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6380.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6380.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6380.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG
  • 110.128.6.37_6379
bind 110.128.6.37
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6379.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6379.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6379.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6379.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG
  • 110.128.6.37_6380
bind 110.128.6.37
port 6380
daemonize yes
pidfile "/var/run/redis_6380.pid"
loglevel notice
logfile "/dbdata/redis/log/redis-6380.log"
save 900 1
save 300 10
save 60 10000
dbfilename "dump_6380.rdb"
dir "/dbdata/redis/file"
maxclients 10000
maxmemory 100000000
appendonly yes
appendfilename "appendonly_6380.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
cluster-enabled yes
cluster-config-file "nodes-6380.conf"
cluster-node-timeout 5000
#禁用清空所有记录
rename-command FLUSHALL ""
#禁用清空数据库
rename-command FLUSHDB ""
#禁用客户端连接后可查看所有存在的键
rename-command KEYS ""
# Generated by CONFIG REWRITE
notify-keyspace-events "gxE"
masterauth "rxtd@123"
requirepass "rxtd@123"
ignore-warnings ARM64-COW-BUG

标签:手工,cluster,Redis,redis,6379,集群,6380,110.128,rxtd
From: https://blog.51cto.com/u_14372656/8504558

相关文章

  • Redis集群的实例什么情况使用redis集群和哨兵
    当考虑Redis集群和哨兵的使用时,我们可以考虑一个在线购物系统的场景,其中需要处理用户会话数据。这个例子将涵盖横向扩展、高可用性和故障处理的方面。场景描述:假设你的在线购物系统使用Redis存储用户会话数据,以提供个性化的购物体验。用户的会话数据包括购物车、用户偏好设置等......
  • strimzi operator 部署kafka集群
    环境说明本环境使用了单节点、临时存储集群的kafka-ephemeral-single配置。线上环境推荐kafka-persistent.yaml配置并修改storage配置为自动创建pv/pvc类型。配置清单说明1.kafka-ephemeral-single.yaml:非持久化存储,单节点集群;2.kafka-ephemeral.yaml:非持久化存储,多节点集群......
  • centos7.9 部署FastDFS+Nginx本地搭建文件服务器 高性能的文件服务器集群 同时实现在
    前言FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线......
  • Redis的其他操作、celery
    Redis的其他操作'''delete(*names)exists(name)keys(pattern='*')expire(name,time)rename(src,dst)move(name,db))randomkey()type(name)'''redis的key值,最大可以是多少? #最大不超过512M一般1KBredis的value值,最大可以是多少? #最大不超过51......
  • redis介绍使用、数据类型的使用方法
    redis介绍与安装#1redis什么 -数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样 -mysql关系型数据库(oracle,sqlserver,postgrasql)-非关系型数据(nosql):redis,mongodb,clickhouse,infludb,elasticsearch,hadoop。。。 -没有sql:没有sql语句-not......
  • 【Redis使用】一年多来redis使用笔记md文档,第(2)篇:命令和数据库操作
    Redis是一个高性能的key-value数据库。本文会让你知道:什么是nosql、Redis的特点、如何修改常用Redis配置、写出Redis中string类型数据的增删改查操作命令、写出Redis中hash类型数据的增删改查相关命令、说出Redis中list保存的数据类型、使用StrictRedis对象对string类型数据......
  • 分布式事务 Seata 集群搭建
    Seata是蚂蚁金服和阿里巴巴共同开源的一款分布式事务项目,致力于在微服务架构下提供高性能和简单易用的分布式事务解决方案。自诞生以来就备受国内开发人员推崇,在实际工作中使用者甚多。Seata提供了四种不同的分布式事务解决方案:XA模式:强一致性分阶段事务模式,牺牲了一定的可用......
  • redis
    redis单机安装安装并配置redis服务[root@localhost~]#ll-rw-r--r--1rootroot196633710月1010:09redis-5.0.4.tar.gz[root@localhost~]#tarxfredis-5.0.4.tar.gz[root@localhost~]#cdredis-5.0.4/[[email protected]]#make[root@localhostred......
  • Redis入门篇(一)
    初学Redis简介以及入门一.Redis的介绍1.什么是redis?Redis(RemoteDictionaryServer)是一个开源的内存数据结构存储系统。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。与传统的关系型数据库相比,Redis是一种更加快速高效的数据存储方式。Redis在内存中存......
  • Redis:Key-Value的NoSQL数据库
    Redis:Key-Value的NoSQL数据库(基础)主要内容:数据库分类Redis入门客户端连接RedisRedis数据类型及操作Springboot整合RedisSpringCache学习目标:知识点要求数据库分类熟悉Redis使用场景熟悉Redis下载与安装了解Redis启动关闭掌握客户端连接Redis......