背景
因为迁移上云的原因,所以需要把老虚拟机关掉,发现有一个老虚拟机上就一个redis什么都没有。
故决定搭建一个公用的redis
搭建公用redis的思路
- 多租户
- 集群稳定
- 配置够顶
创建命令
1 | docker run --name redis-main -d -p 6379:6379 -v /root/redis-data:/data -v /root/redis-conf/redis.acl:/usr/local/etc/redis/redis.acl redis:7.4.1 redis-server --aclfile /usr/local/etc/redis/redis.acl --appendonly yes --appendfsync everysec --save "60 1000" --bind 0.0.0.0``` |
每个部分的详细解释:
-p 6379:6379:这将容器内部的6379端口映射到宿主机的6379端口,使得外部可以通过宿主机的6379端口访问到容器中的Redis服务。-v /root/redis-data:/data:这将宿主机的/root/redis-data目录挂载到容器的/data目录,通常用于持久化存储Redis的数据。-v /root/redis-conf/redis.acl:/usr/local/etc/redis/redis.acl:这将宿主机的/root/redis-conf/redis.acl文件挂载到容器的/usr/local/etc/redis/redis.acl路径,用于配置Redis的ACL(访问控制列表)。redis:7.4.1:指定要使用的Redis镜像的名称和版本,这里是redis镜像的7.4.1版本。redis-server:这是在容器内启动Redis服务的命令。--aclfile /usr/local/etc/redis/redis.acl:指定Redis的ACL配置文件路径。--appendonly yes:启用Redis的AOF(Append Only File)持久化模式,即所有的写操作都会被记录到AOF文件中。--appendfsync everysec:设置AOF持久化的同步策略为每秒同步一次到磁盘。--save "60 1000":设置RDB(Redis Database)持久化的触发条件,即在60秒内至少有1000个键被修改时,自动触发RDB持久化。--bind 0.0.0.0:将Redis服务绑定到所有网络接口,使得容器内的Redis服务可以从任何IP地址访问。
redis.acl格式
1 | user default on >passwordforuser ~* +@all |
以上命令创建了默认用户和user1,user2两个租户。其中默认用户拥有全部的权限,主要包含了@admin系列权限。
@admin权限包含了redis-cli里运行的acl命令系列,可以更改其他人权限。
需要注意的点是租户一定不能赋予@admin权限。
redis实例的查看工具
我是用redis insight,就官方提供的gui界面。里面连上对应的实例之后,左下角有cli窗口,可以进行各种测试。
redis多租户的效果
使用key的时候需要加入账户名同名前缀
用管理员账号查看大概就是下面的效果
增加一个新的租户的操作
- 编辑redis.acl文件,增加一行,指定用户名和password
- docker restart redis-main
后续要做的工作
- 集群化等后续再说
- 等需要做集群了再申请多的机器
