add 架构之路/缓存/Redis集群安装配置说明.md.

This commit is contained in:
小柒2012
2020-07-21 21:22:31 +08:00
committed by Gitee
parent a5ad64a0d6
commit 2e5927c106

View File

@@ -0,0 +1,214 @@
## 下载
```
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
```
## 安装基础环境
```
# 查看gcc版本是否在5.3以上centos7.6默认安装4.8.5
gcc -v
# 升级gcc到5.3及以上,如下:
升级到gcc 9.3
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
这样退出shell重新打开就是新版的gcc了
以下其他版本同理修改devtoolset版本号即可。
```
## 编译安装
```
make && make install
```
## 其他命令
```
# 编译出错时,清出编译生成的文件
make distclean
# 编译安装到指定目录下
make PREFIX=/usr/local/redis install
# 卸载
make uninstall
```
## 启动服务
```
mkdir redis-cluster
```
创建集群文件夹然后在该文件夹下创建6个文件同redis.conf配置一致 7001.conf、7002.conf、7003.conf、7004.conf、7005.conf、7006.conf
然后修改各个配置:
```
port 700x // 端口700X
bind 本机ip // 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes // redis后台运行
pidfile /var/run/redis_7000.pid // pidfile文件对应7000,7001,7002
cluster-enabled yes // 开启集群 把注释#去掉
cluster-config-file nodes_7000.conf // 集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 // 请求超时 默认15秒可自行设置
appendonly yes
```
## 启动服务
```
redis-server ../redis-cluster/7001.conf
redis-server ../redis-cluster/7002.conf
redis-server ../redis-cluster/7003.conf
redis-server ../redis-cluster/7004.conf
redis-server ../redis-cluster/7005.conf
redis-server ../redis-cluster/7006.conf
```
## 创建集群
```
--replicas参数指定集群中每个主节点配备几个从节点这里设置为1。
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
```
测试连接:
```
redis-cli -c -h 127.0.0.1 -p 7001
```
关闭服务:
```
redis-cli -c -h 127.0.0.1 -p 7001 shutdown
```
## 查看集群
```
redis-cli --cluster check 127.0.0.1:7001
127.0.0.1:7001 (2d589d00...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7003 (85df8dc9...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7002 (406a1d6e...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 2d589d0077771ca9a7b2909b351e350aa69bea45 127.0.0.1:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 85df8dc9b649e02740fa0f932aa1df135d44953e 127.0.0.1:7003
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 406a1d6e9bcc760501c6b8f71f9151e020b247bd 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 60f49255085936fbcf682bafc81319f9393150c9 127.0.0.1:7006
slots: (0 slots) slave
replicates 406a1d6e9bcc760501c6b8f71f9151e020b247bd
S: e52eda05e4df779e15437f7f42522459a3e26b27 127.0.0.1:7005
slots: (0 slots) slave
replicates 85df8dc9b649e02740fa0f932aa1df135d44953e
S: 54f13720da944d3dcc75351c4042fcaf3b2300e0 127.0.0.1:7004
slots: (0 slots) slave
replicates 2d589d0077771ca9a7b2909b351e350aa69bea45
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
```
## 高可用
redis集群至少需要一个备份节点才能更好的保证集群的高可用。一个集群里面有`M1-S1、M2-S2、M3-S3`六个主从节点,其中节点 M1包含 0 到 5500号哈希槽节点M2包含5501 到 11000 号哈希槽节点M3包含11001 到 16384号哈希槽。如果是M1宕掉集群便会选举S1为新节点继续服务整个集群还会正常运行。当M1、S1都宕掉了这时候集群就不可用了。
## 集群命令
```
redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN #创建集群
--cluster-replicas <arg> #从节点个数
check host:port #检查集群
--cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
info host:port #查看集群状态
fix host:port #修复集群
--cluster-search-multiple-owners #修复槽的重复分配问题
reshard host:port #指定集群的任意一节点进行迁移slot重新分slots
--cluster-from <arg> #需要从哪些源节点上迁移slot可从多个源节点完成迁移以逗号隔开传递的是节点的node id还可以直接传递--from all这样源节点就是集群的所有节点不传递该参数的话则会在迁移过程中提示用户输入
--cluster-to <arg> #slot需要迁移的目的节点的node id目的节点只能填写一个不传递该参数的话则会在迁移过程中提示用户输入
--cluster-slots <arg> #需要迁移的slot数量不传递该参数的话则会在迁移过程中提示用户输入。
--cluster-yes #指定迁移时的确认输入
--cluster-timeout <arg> #设置migrate命令的超时时间
--cluster-pipeline <arg> #定义cluster getkeysinslot命令一次取出的key数量不传的话使用默认值为10
--cluster-replace #是否直接replace到目标节点
rebalance host:port #指定集群的任意一节点进行平衡集群节点slot数量 
--cluster-weight <node1=w1...nodeN=wN> #指定集群节点的权重
--cluster-use-empty-masters #设置可以让没有分配slot的主节点参与默认不允许
--cluster-timeout <arg> #设置migrate命令的超时时间
--cluster-simulate #模拟rebalance操作不会真正执行迁移操作
--cluster-pipeline <arg> #定义cluster getkeysinslot命令一次取出的key数量默认值为10
--cluster-threshold <arg> #迁移的slot阈值超过threshold执行rebalance操作
--cluster-replace #是否直接replace到目标节点
add-node new_host:new_port existing_host:existing_port #添加节点,把新节点加入到指定的集群,默认添加主节点
--cluster-slave #新节点作为从节点,默认随机一个主节点
--cluster-master-id <arg> #给新节点指定主节点
del-node host:port node_id #删除给定的一个节点,成功后关闭该节点服务
call host:port command arg arg .. arg #在集群的所有节点执行相关命令
set-timeout host:port milliseconds #设置cluster-node-timeout
import host:port #将外部redis数据导入集群
--cluster-from <arg> #将指定实例的数据导入到集群
--cluster-copy #migrate时指定copy
--cluster-replace #migrate时指定replace
help
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
```
## 整合
```
spring:
redis:
timeout: 30000
password: 123456
cluster:
nodes:
- 172.17.1.218:7001
- 172.17.1.218:7002
- 172.17.1.218:7003
- 172.17.1.218:7004
- 172.17.1.218:7005
- 172.17.1.218:7006
max-redirects: 3
lettuce:
max-active: 1000
max-idle: 10
max-wait: -1
min-idle: 5
```
新版本建议使用 `Lettuce`
1、`Jedis` 是直连模式,在多个线程间共享一个 `Jedis` 实例时是线程不安全的,每个线程都去拿自己的 `Jedis` 实例,当连接数量增多时,物理连接成本就较高了。
2、`Lettuce`的连接是基于`Netty`的,连接实例可以在多个线程间共享,如果你不知道`Netty`也没事,大致意思就是一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。通过异步的方式可以让我们更好地利用系统资源。