一 创建redis cluster 集群前提条件:

1 )  每个redis node 节点采用相同的硬件配置,相同的密码.
2 ) 每个节点必须开启的参数:
cluster-enabled yes # 必须开启集群状态,开启后redis进程会有cluster显示。
cluster-config-file node-6379.conf # 此文件由cluster 集群自动创建和维护,不需要任何手动操作。
3 ) 所有redis 服务器必须没有任何数据,否则会报错.
4 ) 先启动为单机redis且没有任何 key value
5 ) 针对redis 3.x、4.x版本ruby和redis-trib.rb,只安装一台机器能做集群管理即可. 2.1 )
[root@srv-1 src]# ps -ef | grep redis
root 5378 1 0 08:43 ? 00:00:00 /usr/local/bin/redis-server 0.0.0.0:6379 [cluster]
root 5383 5199 0 08:43 pts/0 00:00:00 grep --color=auto redis

二 生产环境建议6台服务器:

主从 1 主从 2 主从 3
10.10.5.11 10.10.5.12 10.10.5.13
10.10.5.14 10.10.5.15 10.10.5.16
预留位置 预留位置 10.10.5.17

三 安装redis-4.0.14 版本包:

3.1 )  下载并安装redis-4.0.14:
cd /data/src/
tar -zxvf redis-4.0.14.tar.gz -C /data/soft/ && mv /data/soft/redis-4.0.14 /data/soft/redis
cd /data/soft/redis
make && make install 3.2 ) 初始化redis(根据自己的习惯来设置即可):
./utils/install_server.sh [root@srv-1 redis]# ./utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] /etc/redis.conf
Please select the redis log file name [/var/log/redis_6379.log] /data/logs/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] /data/soft/redis/6379data
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis.conf
Log file : /data/logs/redis_6379.log
Data dir : /data/soft/redis/6379data
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort. 回车确认 安装完成. 3.3 ) 系统参数修改:
echo "65535" > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1 sysctl -p 3.4 ) 重启redis:
/etc/init.d/redis_6379 restart 3.5 ) 安装Ruby版本高于2.3.0:
yum remove ruby-2.0.0.648
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
tar -zxf ruby-2.5.5.tar.gz && cd ruby-2.5.5
./configure && make && make install gem install redis # 验证结果(执行/data/soft/redis/src/redis-trib.rb): [root@srv-1 src]# ./redis-trib.rb
Usage: redis-trib <command> <options> <arguments ...> create host1:port1 ... hostN:portN # 创建集群
--replicas <arg> # 指定Master 的副本数量
check host:port # 检查集群,跟着集群里面的任意主机+端口
info host:port # 查看集群信息
fix host:port # 修复集群
--timeout <arg>
reshard host:port # 在线热迁移集群制定主机的slots数据
--from <arg>
--to <arg>
--slots <arg>
--yes
--timeout <arg>
--pipeline <arg>
rebalance host:port # 平衡集群中各主机之间的slots的数量
--weight <arg>
--auto-weights
--use-empty-masters
--timeout <arg>
--simulate
--pipeline <arg>
--threshold <arg>
add-node new_host:new_port existing_host:existing_port # 添加主机到集群
--slave
--master-id <arg>
del-node host:port node_id # 从集群内删除主机
set-timeout host:port milliseconds # 设置节点的超时时间
call host:port command arg arg .. arg # 在集群的所有节点上执行命令
import host:port # 导入外部redis服务器的数据到当前集群
--from <arg>
--copy
--replace
help (show this help) For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

四 ) redis.conf 配置文件修改:


[root@srv-1 utils]# grep -vE '^#|^$' /etc/redis.conf
bind 0.0.0.0 # 绑定的IP地址
port 6379 # redis绑定的端口
tcp-backlog 511 #
timeout 0 # 超时时间
tcp-keepalive 300 #
daemonize yes # 是否进程运行
supervised no # 是否交给systemd 来运行redis,否
pidfile /var/run/redis_6379.pid # PID 存放路径
loglevel notice # 日志级别:debug > verbose > notice > warning
logfile /data/logs/redis_6379.log # log 日志存放路径,如果不是默认,要有redis的写入权限
databases 16 # redis 默认开启多少库
always-show-logo yes # 是否打开logo 写入日志. 浪费不了多少。
save 900 1 # 900秒(15分钟)有1个写入及执行bgsave命令保存Disk
save 300 10 # 300秒(5分钟) 有10个写入及执行bgsave命令保存Disk
save 60 10000 # 60秒(1分钟) 有10000个写入及执行bgsave命令保存Disk
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb # 数据文件名,这里只能是文件名
dir /data/soft/redis/6379data # 数据文件 存放目录,不能有文件名,只能有路径. 千万注意
masterauth 123456 # slave 连接master 时需要用到的密码,否则无法获取信息 千万注意
slave-serve-stale-data yes #
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no # AOF 模式保存日志
appendfilename "appendonly.aof" # AOF 日志文件名
appendfsync everysec #
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000 # 慢日志
slowlog-max-len 128 # 慢日志大小
latency-monitor-threshold 0 #
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

五 ) redis-4.x集群创建:

5.1 ) 创建1个集群:
[root@srv-1 src]# ./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379
./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379 5.1.1 )
1 节点redis 有密码需要做如下设置:
[root@srv-1 src]# vim /usr/local/lib/ruby/gems/2.5.0/gems/redis-4.1.4/lib/redis/client.rb
#修改里面的:password 选项为 redis 登录密码. 2 节点有数据会报错,创建集群的节点必须没有数据,刚开始强调过.
# 如果有集群存在数据,可以进入redis 执行flushall和bgsave即可,但这个是有风险的会清空redis数据,慎用. [root@srv-1 src]# ./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.10.5.11:6379
10.10.5.12:6379
10.10.5.13:6379
Adding replica 10.10.5.15:6379 to 10.10.5.11:6379
Adding replica 10.10.5.16:6379 to 10.10.5.12:6379
Adding replica 10.10.5.14:6379 to 10.10.5.13:6379
M: 291faee66636effee60e8409894a4ebae40fe4a6 10.10.5.11:6379
slots:0-5460 (5461 slots) master
M: 905e3ecb99a4723b12bb5d7fda91372ee72909be 10.10.5.12:6379
slots:5461-10922 (5462 slots) master
M: 3a311c961450d50f6236d814106fcd0f7723e071 10.10.5.13:6379
slots:10923-16383 (5461 slots) master
S: bad22bcf6c5c42b13c3692c4d1cfcbde7fd7ce14 10.10.5.14:6379
replicates 3a311c961450d50f6236d814106fcd0f7723e071
S: 761fbb98a72600b8322fc34e3b2bbf0adbd3822e 10.10.5.15:6379
replicates 291faee66636effee60e8409894a4ebae40fe4a6
S: 57e6cc3af523aa829705cd0072d6283b988a43c7 10.10.5.16:6379
replicates 905e3ecb99a4723b12bb5d7fda91372ee72909be
Can I set the above configuration? (type 'yes' to accept):
...... 集群创建完成......

集群创建信息



安装ruby问题:

## 问题:
解决ruby版本较低的问题:
[root@srv-1 ~]# gem install redis
Fetching: redis-4.1.4.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0. # 解决方法:
yum remove ruby-2.0.0.648
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
tar -zxf ruby-2.5.5.tar.gz && cd ruby-2.5.5
./configure && make && make install ## redis-trib.rb无法运行的问题:
[root@srv-1 ~]# /data/soft/redis/src/redis-trib.rb
/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'
from /data/soft/redis/src/redis-trib.rb:25:in `<main>' # 解决方法:
Ruby的redis接口没有安装,需要安装Redis接口,输入命令 " gem install redis " 进行安装:
[root@srv-1 ~]# gem install redis ## 安装期间出现各种奇葩问题:
解决*** No rule to make target `/include/ruby.h' 报错
https://blog.csdn.net/ck3207/article/details/90404952 此处有两种解决方法:
1、在Makefile文档最前面,设置变量top_srcdir的路径
2、用绝对/相对路径替换$(top_srcdir)该变量
来一个简单粗暴点的方法吧:
使用 vim Makefile(因为要大批量改动,建议先备份: cp Makefile Makefile-date +%F)编辑文件,而后替换所有$(top_srcdir),输入: : %s/$(top_srcdir)/..\/../g 保存退出,重新执行make即可.

Redis-4.X 版本 Redis Cluster集群 (一)的更多相关文章

  1. Redis系列5:深入分析Cluster 集群模式

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) 1 背景 前面我们 ...

  2. Redis 超详细自动管理Cluster集群工具上手 redis-trib.rb (多图,手把手)

    安装介绍 ​ redis-trib.rb是一款由Redis官方提供的集群管理工具,能够大量减少集群搭建的时间. ​ 除此之外,还能够简化集群的检查.槽迁徙.负载均衡等常见的运维操作,但是使用前必须要安 ...

  3. redis源码分析(五)--cluster(集群)结构

    Redis集群 Redis支持集群模式,集群中可以存在多个master,每个master又可以拥有多个slave.数据根据关键字映射到不同的slot,每一个master负责一部分的slots,数据被存 ...

  4. Redis进阶实践之十二 Redis的Cluster集群动态扩容

    一.引言     上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境.当然,大家可以使用 Cluster info 命令查看Cl ...

  5. Redis搭建(七):Redis的Cluster集群动态增删节点

    一.引言 上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境.当然,大家可以使用 Cluster info 命令查看Cluste ...

  6. jedis处理redis cluster集群的密码问题

    环境介绍:jedis:2.8.0 redis版本:3.2 首先说一下redis集群的方式,一种是cluster的 一种是sentinel的,cluster的是redis 3.0之后出来新的集群方式 本 ...

  7. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  8. Redis进阶实践之十一 Redis的Cluster集群搭建

    一.引言      本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...

  9. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

随机推荐

  1. Sql Server 数据把列根据指定的内容拆分数据

    今天由于工作需要,需要把数据把列根据指定的内容拆分数据 其中一条数据实例 select id , XXXX FROM BIZ_PAPER where  id ='4af210ec675927fa016 ...

  2. Django DRF 分页

    Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...

  3. Django 3.x 原生支持websocket 配置

    websocket.py 1 # websocket.py 2 async def websocket_application(scope, receive, send): 3 while True: ...

  4. Flink集群监控

    prometheus+grafana 监控hadoop.yarn https://blog.csdn.net/c275090933/article/details/82108014 Prometheu ...

  5. SQL精华总结索引类型优化SQL优化事务大表优化思维导图❤️

    索引类型 从数据结构角度: B+树索引, hash索引,基于哈希表实现,只有全值匹配才有效.以链表的形式解决冲突.查找速度非常快 O(1) 全文索引,查找的是文本中的关键词,而不是直接比较索引中的值, ...

  6. [GXYCTF2019]禁止套娃(无参RCE)

    [GXYCTF2019]禁止套娃 1.扫描目录 扫描之后发现git泄漏 使用githack读取泄漏文件 <?php include "flag.php"; echo &quo ...

  7. 关于ABAP和JSON互相转换

    关于ABAP数据结构和JSON格式转换,需要用到标准的类/UI2/CL_JSON一下两个方法, DESERIALIZE是把JSON格式转换成ABAP数据结构,SERIALIZE是把ABAP数据结构转换 ...

  8. jsp页面技术总结

    1.日期框只能选择不能输入属性设置 data-options="editable:false" 2.列表中多出一列空白 .datagrid-view1{ width: 0px!im ...

  9. 微信支付(PC扫码支付和H5公众号支付)

    最近在做微信支付,微信支付比较坑,官方居然只有.NET.C#.PHP的demo居然没有java的demo.然后微信支付是不提供测试账号的需要直接用正式的公众号.首先来介绍下微信扫码支付吧,微信扫码有两 ...

  10. JDBC学习(错误反思)

    注意拼写错误!!! 注意拼写错误!!! 注意拼写错误!!!  文档注释快捷键   alt+shift+J