一、日常操作
redis 5.0版本命令有变化
1.初始化集群
redis-trib.rb create --replicas 1 IP1:6379 IP2:7000 IP3:7000 IP4:7000 IP5:7000 IP6:7000
new:./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
2.查看集群信息
redis-cli -p 7000 -c cluster info
3.查看节点信息
redis-cli -p 7000 -c cluster nodes|sort -t "." -k3n,3 -k4n,4
4.trib查看集群信息
redis-trib.rb info 127.0.0.1:7000
new:redis-cli --cluster info 127.0.0.1:7000
5.增加master主节点
redis-trib.rb add-node IP-new:7000 IP-old:7000
6.增加slave备节点
redis-trib.rb add-node --slave --master-id 88dkf##2dnf IP-new:7000 IP-old:7000
故障slave加入前需要将本机的rdb文件 和 node.conf文件重命名。
redis-cli --cluster add-node 127.0.0.1:7000 127.0.0.1:7002 --cluster-slave --cluster-master-id 6d838ee761f95d1fc2c1cf34f4272cf2151694c7
7.删除节点
redis-trib.rb del-node IP:port 611dbds**ebb
删除从节点非常简单,指定ip+port以及节点id即可。但是删除主节前,一定要先将slot槽重新移动到其他主节点。
8.重新分配槽位
redis-trib.rb reshard IP-new:7000
根据提示选择移动到新节点的槽位数量,源头的范围(一般填 all)。
最少3主。启动cluster6个节点:redis-server /redis/data/redis.conf ,确保该目录下没有AOF RDB文件,否则不能加入集群。
二、性能优化
1.关闭RDB防止fork进程的内存溢出问题
save ""
appendonly=yes
2.防止某个节点挂掉,整个cluster挂掉的问题
cluster-require-full-coverage no
3.设置最大内存
maxmemory
11453246122
~~最大不超过10G
4.日志
logfile "./redis.log"
5.防止因为磁盘同步,卡掉住进程的情况出现
no-appendfsync-on-rewrite yes
6.内核修改,如果没开防火墙可以不设置这个
net.nf_conntrack_max = 1648576
7.这个用来防止内存申请不到发生卡死的情况,很重要
vm.overcommit_memory=1
(1)编辑/etc/sysctl.conf,改vm.overcommit_memory=1,然后sysctl -p?使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
建议使用方法 1
8、thp redis warning要求关掉 ——【ok】默认为关
echo never > /sys/kernel/mm/transparent_hugepage/enabled
同时写入rc.local,保证下次重启生效
9.最大连接数要改一下,redis的warning会要求修改
net.core.somaxconn= 1024
编辑/etc/sysctl.conf ,增加 net.core.somaxconn= 1024,然后sysctl -p 使配置文件生效
10.设置内存超出策略
allkeys-lru
11.BGREWRITEAOF 这个命令可以重写aof,因为aof长时间增量更新,导致越来越大,但是内存可能没这么大,所以可以用这个命令重写进行复制备份,恢复等
12.内存吃紧的时候可以尝试手动去掉内存碎片
config set activedefrag yes
memory purge
三、疑难杂症处理
案例1:
集群中某个从节点down掉,重新开启从节点,然后手动加到集群中,但redis-cli -p 7000 -c cluster nodes|sort -t "." -k3n,3 -k4n,4
执行后,发现列表中存留下图所示的noaddr 从节点,cluster info
命令查看的话也会多一个僵尸slave。 虽然对集群无大的影响(也可能没发现),但总感觉要恢复到完美的初始状态。
分析:
网上查看原因,需要修复挂掉的从节点的node.conf。里面的节点id是‘0df3’
集群中随便挑选一个节点执行
grep 42.75 node.conf
,发现42.75的节点id是更新后的‘90bb’image.png
解决:
所有节点统一执行下
redis-cli -p 7000 -c cluster forget *0df3
。文献中说必须1分钟内执行完,笔者尝试发现没有这个限制,有待进一步研究。
四 redis 5.0.5 cluster 安装
4.1 redis安装
文件拷贝到/usr/local
tar xzvf redis-5.0.5.tar.gz
make
make install
4.4 ruby ruby-gem安装
pass
- If you are using Redis 5, this is very easy to accomplish as we are helped by the Redis Cluster command line utility embedded into redis-cli, that can be used to create new clusters, check or reshard an existing cluster, and so forth.
- For Redis version 3 or 4, there is the older tool called redis-trib.rb which is very similar. You can find it in the src directory of the Redis source code distribution. You need to install redis gem to be able to run redis-trib.
4.3 集群配置
命令全局化
cp redis-cli /usr/bin/
cp -p redis-trib.rb /usr/bin/
按照下面的目录来慢慢配置我们的集群
4.2.1 节点配置
在redis根目录新建7000节点
mkdir -p iclustre/7000
vi 7000/redis.conf
daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
cp -p ./src/redis-server icluster/7000/
同理创建7001-7005其他5个节点,注意更改redis.conf里的port。
cp -p ./src/redis-cli ./icluster
cp -p ./src/redis-trib.rb ./icluster
创建服务启动脚本 和 集群初始化脚本
vi start-all.sh
cd 7000
./redis-server redis.conf
cd ..
cd 7001
./redis-server redis.conf
cd ..
cd 7002
./redis-server redis.conf
cd ..
cd 7003
./redis-server redis.conf
cd ..
cd 7004
./redis-server redis.conf
cd ..
cd 7005
./redis-server redis.conf
cd ..
vi redis-cluster-init.sh
./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
#./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7000
参考
https://redis.io/topics/cluster-tutorial#redis-cluster-and-docker
网友评论