03.Redis安装配置文档
文章目录
1. 下载安装
#下载redis的最新版本
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
yum -y install openssl-devel zlib-devel libtool automake autoconf make gcc gcc-c++
#解压:
tar -zxvf redis-7.2.4.tar.gz
#编译:
cd redis-7.2.4
make PREFIX=/usr/local/redis install
cp -rf redis.conf /usr/local/redis/bin/
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli
2. 编辑配置文件
vi /usr/local/redis/bin/redis.conf
- 将
daemonize no
修改为daemonize yes
默认值no,该参数设置redis服务是否以守护模式运行 - 注释掉bind,不再添加任何IP,避免出现问题.
- 将
protected-mode yes
修改为protected-mode no
不同网段的服务器才可以连接该redis服务,例10.0.200.109访问10.0.8.148:6379.protected-mode
是为了限制不同网段访问redis - 修改dump文件目录
# dump 数据文件名
dbfilename dump.rdb
# dump文件保存路径
dir /usr/local/redis
- 修改内存大小以及失效模式
maxmemory 4gb
maxmemory-policy volatile-lru
Redis在运行时,不重启使用redis-cli修改配置
CONFIG SET maxmemory 4gb
- 批量删除keys 批量删除包含 "_2016" 的key,每次删除500条
redis-cli EVAL "local keys = redis.call('keys', ARGV[1]) for i=1,#keys,500 do redis.call('del', unpack(keys, i, math.min(i+499, #keys))) end return #keys" 0 *_2016*
或者自从redis2.8以后就开始支持scan命令,批删除大量的key
redis-cli --scan --pattern "*_2016*" | xargs -L 500 redis-cli DEL
- 修改pidfile的路径
pidfile /usr/local/redis/redis.pid
3. 测试Redis
#启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
#测试redis:
/usr/local/redis/bin/redis-cli
127.0.0.1:6379> set foo springrain
OK
127.0.0.1:6379> get foo
"springrain"
#关闭redis
/usr/local/redis/bin/redis-cli shutdown
4. 注册服务
添加 /etc/systemd/system/redis.service 文件
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl 注册服务
systemctl daemon-reload
systemctl enable redis.service
5. Redis主从配置
Redis的主从比较简单,只需要修改slave的配置
修改slaveof master的ip master的端口
slaveof 192.168.0.88 6379
6. 集群
参考资料:https://redis.io/topics/cluster-tutorial
6.1 集群配置和脚本
#解压到/usr/local/redis/ 目录下
#添加执行权限:
chmod 755 /usr/local/redis/cluster/*.sh
#启动6个redis节点:
/usr/local/redis/cluster/redis-start.sh
#创建集群:
/usr/local/redis/bin/redis-cli --cluster create --cluster-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:7006
#关闭6个节点:
/usr/local/redis/cluster/redis-stop.sh
#清除集群数据:
/usr/local/redis/cluster/redis-clear.sh
6.2 维护
#连接集群:
/usr/local/redis/bin/redis-cli -c -p 7001
#集群节点查看:
/usr/local/redis/bin/redis-cli -p 7001 cluster nodes
#集群检查
/usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:7001
6.3 添加新的master节点到集群
redis-server 新节点.conf
-redis-cli --cluster add-node 新节点IP:新节点PORT 集群中任一IP:7001
例子:# redis-cli --cluster add-node 127.0.0.1:8001 127.0.0.1:7001
说明:
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
新节点没有包含任何数据,也没有包含任何slot.
当集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,同时新的主节点因为没有包含任何slot,不参加选举和failover.
为新节点分配slot
-redis-cli --cluster reshard 新节点IP:新节点PORT
6.4 添加新的slave节点到集群
启动新节点
redis-server 新节点.conf
方法一.
语法:-redis-cli --cluster add-node -slave 新节点IP:新节点PORT 集群中任一IP:7001
例子:# redis-cli --cluster add-node -slave 127.0.0.1:8011 127.0.0.1:7001
方法二.
语法:redis-cli --cluster add-node -slave -master-id MASTER_ID 新节点IP:PORT 任意存在节点:PORT
例子:# redis-cli --cluster add-node -slave -master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:8011 127.0.0.1:7001
说明:
-master-id xxxx 主节点的 ID
第一个 ip:port 为新节点
第二个 ip:port 是任意一个已经存在的节点
例子:
注意:在线添加slave 时,需要bgsave整个master数据,并传递到slave,再由 slave加载rdb文件到内存,rdb生成和传输的过程中消耗Master大量内存和网络IO,以此不建议单实例内存过大,线上小心操作.
6.5 在线reshard数据
对于负载/数据不均匀的情况,可以在线reshard slot来解决,方法与添加新master的reshard一样,只是需要reshard的master节点是已存在的老节点.
语法:redis-cli --cluster reshard master节点IP:PORT
例子:redis-cli --cluster reshard 127.0.0.1:7003
6.6 删除一个slave节点
语法:redis-cli --cluster del-node ip:port ''
例子:redis-cli --cluster del-node 127.0.0.1:7001 'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'
说明:
ip:port 集群中已有的任意一节点(不是被删除的节点)
被删除节点的 ID
6.7 删除一个master 节点
删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点. (目前redis-cli --cluster只能把被删除master的slot对应的数据迁移到一个节点上).
6.8 改变从节点的隶属关系
# redis-cli -p 7013
127.0.0.1:7013> cluster replicate 2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835
#说明:2b9ebcbd627ff0fd7a7bbcc5332fb09e72788835 为新的主节点的 ID
7. Redis容错说明
Redis集群需要超过一半的Master存活才能正常运行,所以集群生存性存在风险,建议一台服务器一个redis实例. 例如两台服务器,3主3从. A服务器2主1从,B服务器2从1主.如果A宕机,集群就会异常.如果B宕机,A就会有3个主,即便B恢复了,A也不能宕机.建议6台机器进行集群,每台1个redis实例.
文章作者 springrain
上次更新 2024-04-29