搭建 Redis集群,三个主节点,三个从节点,多主节点为了分布集群,从节点是为了高可用性。(记录自己搭建Redis集群遇到的问题)
- 下载redis
地址:https://github.com/MicrosoftArchive/redis/releases
此次案例中使用的版本为3.0.503 Source code可以一起下载,下文会用到。
2. 安装redis
此默认端口为6379,复制6份,分别命令redis6380 redis6381 redis6382 redis6383 redis6384 redis6379
解压Redis-x64-3.0.503.zip,并复制,如下图
3. 修改每台redis.windows.conf,修改里面的端口号,以及集群的配置
port 6380
cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 15000
appendonly yes
修改Redis的默认配置
设置Redis的最大占用内存
Redis设置最大占用内存,打开redis配置文件,找到如下段落,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。修改如下所示:
maxmemory 2147483648
如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存。
修改数据默认存放位置
这里自定义一个文件夹,用来存放Redis数据
# Note that you must specify a directory here, not a file name.**
dir D:\MyRedisSwap
设置LRU算法删除数据
设置了maxmemory的选项,redis内存使用达到上限。可以通过设置LRU算法来删除部分key,释放空间。默认是按照过期时间的,如果set时候没有加上过期时间就会导致数据写满maxmemory。
LRU是Least Recently Used 近期最少使用算法。
volatile-lru -> 根据LRU算法生成的过期时间来删除。
-allkeys-lru -> 根据LRU算法删除任何key。
volatile-random -> 根据过期设置来随机删除key。
allkeys->random -> 无差别随机删。
volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
noeviction -> 谁也不删,直接在写操作时返回错误。
如果设置了maxmemory,一般都要设置过期策略。Redis默认有六种过期策略
# maxmemory-policy noeviction**
maxmemory-policy volatile-lru
以下是其他配置:
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 (在Windows上不支持守护进程)
daemonize no
指定Redis监听端口,默认端口为6379
(在Windows上不支持守护进程)
port 6379
绑定的主机地址
bind 127.0.0.1
指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
- 安装Ruby
Redis 的集群是用Ruby脚本编写,所以系统需要有 Ruby 环境。
下载地址:https://www.jb51.net/jiaoben/141880.html
安装,下面红框标记的地方必选。
验证:打开cmd窗口,输入ruby –version出现版本号 表示安装成功
5. 安装redis的ruby驱动rubygems
地址:https://rubygems.org/pages/download
可能有点慢,也可以去下面这个地址下载
https://www.jb51.net/softs/539242.html
6.解压到6379文件夹下面(任意位置,此处只是为了方便放在一起)
进入rubygems-3.1.4目录下面执行cmd命令:ruby setup.rb
7.切换到6379目录下面,执行命令gem install redis
8. 安装集群脚本redis-trib
找到第一步下载的source code,解压,将里面src路径下面的redis-trib.rb 复制到6379文件夹下面
9.安装6个redis服务
redis-server.exe --service-install D:/Redis/Redis6379/redis.windows.conf --service-name redis6379
redis-server.exe --service-install D:/Redis/Redis6380/redis.windows.conf --service-name redis6380
redis-server.exe --service-install D:/Redis/Redis6381/redis.windows.conf --service-name redis6381
redis-server.exe --service-install D:/Redis/Redis6382/redis.windows.conf --service-name redis6382
redis-server.exe --service-install D:/Redis/Redis6383/redis.windows.conf --service-name redis6383
redis-server.exe --service-install D:/Redis/Redis6384/redis.windows.conf --service-name redis6384
``
- 启动这6个服务
redis-server.exe --service-start --service-name Redis6379
redis-server.exe --service-start --service-name Redis6380
redis-server.exe --service-start --service-name Redis6381
redis-server.exe --service-start --service-name Redis6382
redis-server.exe --service-start --service-name Redis6383
redis-server.exe --service-start --service-name Redis6384
11.当前目录执行以下命令
ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
创建redis集群显示,Sorry, can’t connect to node
第一次是因为redis设置了密码,单机连接都OK,但是创建集群就报错Sorry, can’t connect to node
需要修改
D:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\redis-4.2.1\lib\redis\client.rb
可能大家路径不一样,找一下ruby的安装路径
class Client
DEFAULTS = {
url: -> { ENV["REDIS_URL"] },
scheme: "redis",
host: "127.0.0.1",
port: 6379,
path: nil,
timeout: 5.0,
password: "123456",
db: 0,
driver: nil,
id: nil,
tcp_keepalive: 0,
reconnect_attempts: 1,
reconnect_delay: 0,
reconnect_delay_max: 0.5,
inherit_socket: false,
sentinels: nil,
role: nil
}.freeze
添加或修改password就OK了
第二次报这个错是因为手残,取消了集群密码,重新创建redis集群就GG了,把password注释掉就行了!
注:如果出现Node is not empty,先清空所有端口目录下面的nodes.conf和dump.rdb文件再重复执行第10步,然后再执行上面的命令。
注意途中标记的红色地方,yes。
- 测试
验证集群是否启动成功
命令 redis-cli -c -h ”地址” -p “端口号” ; c 表示集群
例如 redis-cli -c -h 127.0.0.1 -p 6380
keys * 查询key的信息
del k1 删除key
第一个question:
以上安装过程很容易把,但是安装之后,会发现只有可以127.0.0.1可以访问,本地的ip地址都不能访问,远程更别提了,那咋整呢,很容易的。
第一步注释:
#bind 127.0.0.1
第二步:
protected-mode yes 改为 protected-mode no
第三步:若需要设置授权, 那么找到requirepass 将其后的值改为自已的密码
requirepass 123456
第二个question:
这时候 在开启一个终端 进入redis安装目录 输入redis-cli.exe -h 你的ip地址 -p 6379,发现各种认证失败
怎么办呢,很简单 敲入 auth “密码” 即可
比如你的密码是 root
敲入 auth “root”即可
第三个question:
在创建redis集群的时候,创建节点的时候出现错误
[ERR] Node 127.0.0.1:6381 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
问题解决方案(删除D:\MyRedisSwap里面的文件)
1)、将需要新增的节点下aof、rdb等本地备份文件删除;
2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:
172.168.63.201:7001> flushdb #清空当前数据库
其他命令
关闭这6个服务
redis-server.exe --service-stop --service-name Redis6379
redis-server.exe --service-stop --service-name Redis6380
redis-server.exe --service-stop --service-name Redis6381
redis-server.exe --service-stop --service-name Redis6382
redis-server.exe --service-stop --service-name Redis6383
redis-server.exe --service-stop --service-name Redis6384
卸载服务
redis-server.exe --service-uninstall --service-name Redis6379
redis-server.exe --service-uninstall --service-name Redis6380
redis-server.exe --service-uninstall --service-name Redis6381