从官网下载redis压缩包
解压安装
解压到指定路径
tar -zxvf ./xxxx.tar.gz -C /xxx
然后cd进入目录编译安装
redis需要gcc环境,没有的自行安装一下
make && make install
安装完了默认的redis-server在/usr/local/bin/redis-server
或者在安装的时候指定路径 prefix
make PREFIX=/usr/local/redis && make install PREFIX=/usr/local/redis
修改redis.conf配置
将bind 127.0.0.1
注释掉不然只能本地自己连接
添加密码
requirepass xxxxx
启动和停止redis
启动
/usr/local/bin/redis-server ./redis.conf
有密码时停止
/usr/local/bin/redis-cli -p 6379 -a xxx shutdown
热修改redis内存配置
单节点并指定后台运行
单节点最简单,直接把编译后目录里的redis.conf的端口改改,后台运行改为yes即可
port 6379 # 指定端口为 6379,也可自行修改
daemonize yes # 指定后台运行
启动的时候还是用同一个命令,启动对应的配置文件
/usr/local/bin/redis-server xxx/redis.conf
主从
主从也很简单,就在上面单节点的基础上,只需要将redis.conf复制出来然后改个端口改改配置就OK了
port 6380
slaveof 127.0.0.1 6379
启动的时候还是用同一个命令,启动对应的配置文件
/usr/local/bin/redis-server xxx/redis.conf
哨兵sentinel
和主从差不多,就是多搞几个从节点,然后启动哨兵模式,同样多复制几份redis.conf然后改改配置
vim redis01.conf
port 63791
vim redis02.conf
port 63792
slaveof 127.0.0.1 63791
vim redis03.conf
port 63793
slaveof 127.0.0.1 63791
#这个sentinel.conf在最开始编译的那个目录下
vim sentinel.conf
daemonize yes
port 26379
sentinel monitor mymaster 127.0.0.1 63793 1 # 下面解释含义
mymaster 为主节点名字,可以随便取,后面程序里边连接的时候要用到
127.0.0.1 63793 为主节点的 ip,port
1 后面的数字 1 表示选举主节点的时候,投票数。1表示有一个sentinel同意即可升级为master
启动哨兵
redis-server path/to/redis-sentinel/redis01.conf
redis-server path/to/redis-sentinel/redis02.conf
redis-server path/to/redis-sentinel/redis03.conf
redis-server path/to/redis-sentinel/sentinel.conf --sentinel
集群模式
集群和哨兵差不多,配置redis集群需要至少6个redis节点,为啥呃,redis官方有一句话,最少3个主节点,那么住主+从不就6个节点了
Note that the minimal cluster that works as expected requires to
contain at least three master nodes.
集群的配置文件中都需要开启集群模式
bind 192.168.83.128 # 设置当前节点主机地址
port 7001 # 设置客户端连接监听端口
pidfile /var/run/redis_7001.pid # 设置 Redis 实例 pid 文件
daemonize yes # 以守护进程运行 Redis 实例
cluster-enabled yes # 启用集群模式
cluster-node-timeout 15000 # 设置当前节点连接超时毫秒数
cluster-config-file nodes-7001.conf # 设置当前节点集群配置文件路径
#appendonly yes # 开启redis aof
主:redis01 从 redis02 slaveof redis01
主:redis03 从 redis04 slaveof redis03
主:redis05 从 redis06 slaveof redis05
mkdir redis-cluster
cd redis-cluster
mkdir redis01 到 redis06 6个文件夹
cp redis.conf 到 redis01 ... redis06
修改端口
分别配置3组主从关系
逐个启动redis实例,启动完之后ps查看可以看到有个集群标志
手动启动和停止嫌麻烦可以自己写个脚本
启动
#!/bin/bash
cd 6379_master
/usr/local/bin/redis-server ./redis.conf
cd ../6380_master
/usr/local/bin/redis-server ./redis.conf
cd ../6381_master
/usr/local/bin/redis-server ./redis.conf
cd ../6379_master_slave_6382
/usr/local/bin/redis-server ./redis.conf
cd ../6380_master_slave_6383
/usr/local/bin/redis-server ./redis.conf
cd ../6381_master_slave_6384
/usr/local/bin/redis-server ./redis.conf
停止
#!/bin/bash
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6379 shutdown
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6380 shutdown
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6381 shutdown
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6382 shutdown
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6383 shutdown
/usr/local/bin/redis-cli -a 10086 -c -h 127.0.0.1 -p 6384 shutdown
然后创建集群,redis5.0
版本之前使用的ruby脚本 redis-trib.rb
,如果你的redis
有密码需要修改redis-trib.rb
中连接redis
部分
老版本redis-trib
简历集群命令,前面三个是master
节点后面三个是slave
节点,按照顺序对应
./redis-trib.rb create --replicas 1 124.221.240.76:6379 124.221.240.76:6382 124.221.240.76:6380 124.221.240.76:6383 124.221.240.76:6381 124.221.240.76:6384
新版本的都直接用redis-cli
创建即可
/usr/local/bin/redis-cli -a xxxx --cluster create --cluster-replicas 1 192.168.1.1:8001 192.168.1.1:8002 192.168.1.2:8001 192.168.1.2:8002 192.168.1.3:8001 192.168.1.3:8002
-a :密码;
–cluster-replicas 1:表示1个master下挂1个slave; --cluster-replicas 2:表示1个master下挂2个slave。
集群创建成功
验证集群,连接任意一个客户端
‐a表示服务端密码;‐c表示集群模式;-h指定ip地址;-p表示端口号
redis-cli -a xxxx -c -h 192.168.1.1 -p 8001
查看集群的信息: cluster info
查看节点列表: cluster nodes
关闭集群则需要逐个进行关闭
/usr/local/redis‐5.0.3/src/redis‐cli ‐a redis-pw ‐c ‐h 192.168.1.1 ‐p 8001 shutdown /usr/local/redis‐5.0.3/src/redis‐cli ‐a redis-pw ‐c ‐h 192.168.1.1 ‐p 8002 shutdown
......
redis集群扩容
当业务开始增长的时候redis集群就需要扩容了
利用redis-cli工具增加主节点,第1个节点是需要新加入的主节点,第2个节点是既有集群中的任意1个节点。
按照之前Cluster搭建方式,重新在新的一台机器上启动2个实例,1主1从
添加主节点
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6385
添加成功了类似下面的图中的结果
然后进入集群查看是否添加成功
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6380
增加从节点
前面是从节点,后面是集群中的任意节点
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6385 --cluster-slave --cluster-master-id 6ad45a1a6b276d487a927b9cb7b284edf1690e21
迁移槽位和数据
此时新的节点是没有分配槽位的,所以需要重新分配槽位
# 最后填写集群中任意1个节点都行。
/usr/local/redis/bin/redis-cli --cluster reshard 127.0.0.1:6385
- 指定分配的槽位数量。
- 指定获取这些槽位的主节点id。
- 填写all表示要迁移的这些槽位由集群中原有的各个主节点平均分摊给新加入的主节点。
- 会有一次确认,输入yes即可,稍等一会槽位就会迁移到新的主节点上。
再次确认集群各节点信息,可以看到新加入的节点已经获得槽位了。
修改集群IP
使用场景,当因为一些原因需要更换对外ip时。
先停止所有节点
将所有节点的cluster-config-file
文件中的IP地址改成对应地址
然后使用sed
命令修改ip
sed -i 's/127.0.0.1/124.221.240.76/g' `grep -w "127.0.0.1" -rl ./` nodes-6384.conf
修改完之后再一个一个起来就ok了
备注
如果是云服务器在使用外网ip create cluster
时还需要开通总线端口,默认是1000+redis port
参考了大佬的博文
https://juejin.cn/post/6890911655451394062
https://xie.infoq.cn/article/176a69d28ad007e338a07ae15