常用命令
常用命令 | 含义 | 示例 |
---|---|---|
info replication | 查询Redis当前库的集群信息 |
- 修改配置文件
常用命令 | 含义 | 示例
-------- | ---------- | ----------
port
| 服务绑定的端口 |
daemonize
| 服务是否后台运行 |
pidfile
| 进程文件 |
logfile
| 日志文件 |
dbfilename
| dump文件时输出的文件名|
slaveof
| | 主机只能写 从机只能读- 启动3个单节点
- 想作为子节点的,使用
slaveof
指定 所属的master服务;这里的配置是暂时的,重启之后恢复默认单节点;如果想永久生效需要在配置文件中修改;配置上主机之后会全量复制master中的数据;之后为增量复制数据;如果slaveof no one
将当前slaver变为 master;
Redis哨兵模式
哨兵进程的配置文件 sentinel.conf
# 最后的1表示 多少个哨兵投票认为该节点失联就是真的宕机了;投票阈值
sentinel monitor RedisMaster服务名称 ip 端口 1
常用命令
常用命令 | 含义 | 示例 |
---|---|---|
redis-sentinel sentinel.conf | 服务绑定的端口 |
主机如果宕机,会从slaver中选举出master,如果之前的master重新回来,会作为slave存在;
Redis高可用
1.缓存穿透和击穿如何解决? 设置
2.缓存雪崩如何解决?
redis.conf配置文件
不同文件的端口不一样 放在
/etc/redis/redis-cluster/redis-node0.conf
# 实例化多少个数据库
databases 1
# 监听的端口
port 7380
# 访问本机需要的密码 和 作为从机访问主机的密码
requirepass root12300.
masterauth root12300.
# 持久化文件的保存位置
dir /data
# 持久化文件名
dbfilename dump.rdb
# 指定存储至本地数据库时是否压缩数据
rdbcompression yes
# 持久化策略:一定时间内(S) 有多少条数据更新 就触发保存
# 如 第一条就是 900 秒内有 1 条数据更新 就触发保存
save 900 1
save 300 10
save 60 10000
# 日志文件的保存地址
logfile redis.log
# docker启动redis单节点
docker run -it --network mybridge -v /etc/redis/redis-cluster/redis-node1.conf:/etc/redis/redis.conf -v data-master:/data -p 7381:7381 -p 17381:17381 --name redis-node1 redis:5.0 redis-server /etc/redis/redis.conf
# 测试之后没有问题
docker-compose安装
#1)下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#2)授权
sudo chmod +x /usr/local/bin/docker-compose
#3)查看版本信息
docker-compose --version
docker-compose.yml文件
version: '3.1'
services:
master:
image: redis:5.0
container_name: redis-node0
ports:
- 7380:7380
- 17380:17380
volumes:
- /etc/redis/redis-cluster/redis-node0.conf:/etc/redis.conf
- ./data-node0:/data
command: redis-server /etc/redis.conf
networks:
mybridge:
slave1:
image: redis:5.0
container_name: redis-node1
ports:
- 7381:7381
- 17381:17381
volumes:
- /etc/redis/redis-cluster/redis-node1.conf:/etc/redis.conf
- ./data-node1:/data
command: redis-server /etc/redis.conf --slaveof redis-node0 7380
networks:
mybridge:
slave2:
image: redis:5.0
container_name: redis-node2
ports:
- 7382:7382
- 17382:17382
volumes:
- /etc/redis/redis-cluster/redis-node2.conf:/etc/redis.conf
- ./data-node2:/data
command: redis-server /etc/redis.conf --slaveof redis-node0 7380
networks:
mybridge:
networks:
mybridge:
external: true
启动redis
cd /usr/local/docker/redis
docker-compose up -d # docker-compoe 启动命令
docker ps # 查看容器是否正常启动
sentinel配置文件
# 禁止保护模式
protected-mode no
# 端口
port 27380
# 工作目录
dir "/data"
# 日志文件名
logfile "sentinel.log"
# 配置需要监听的 redis 集群,并起一个名称,这里只需要配置主机的地址即可
# redis-node0 该位置ip一定要外网可以访问!!
sentinel monitor mymaster redis-node0 7380 2
# 访问 redis 的密码
sentinel auth-pass mymaster root12300.
sentinel的compose文件
version: '3.1'
services:
sentinel0:
image: redis:5.0
container_name: redis-sentinel-0
ports:
- 27380:27380
volumes:
- /etc/redis/redis-cluster/sentinel-node0.conf:/etc/sentinel.conf
command: redis-sentinel /etc/sentinel.conf
networks:
mybridge:
sentinel1:
image: redis:5.0
container_name: redis-sentinel-1
ports:
- 27381:27381
volumes:
- /etc/redis/redis-cluster/sentinel-node1.conf:/etc/sentinel.conf
command: redis-sentinel /etc/sentinel.conf
networks:
mybridge:
sentinel2:
image: redis:5.0
container_name: redis-sentinel-2
ports:
- 27382:27382
volumes:
- /etc/redis/redis-cluster/sentinel-node2.conf:/etc/sentinel.conf
command: redis-sentinel /etc/sentinel.conf
networks:
mybridge:
汇总
mkdir -p /etc/redis/redis-cluster
# 将3个redis服务和3个sentinel服务配置文件放在该目录;redis-node0.conf redis-node1.conf redis-node2.conf sentinel-node0.conf sentinel-node1.conf sentinel-node2.conf
mkdir -p /usr/local/docker/redis
# 将docker-compose.yml文件放到该路径
# 所有配置文件中的所有ip都需要修改为本地电脑的ip
# 编排容器
docker-compose up -d
# 查询运行状态
docker ps | grep redis
特别注意
sentinel配置的监控ip如果是容器名称,sentinel获取的master或slaver地址也将会是docker局域网ip。其他宿主机访问不了。所以这个ip一般会配置成宿主机ip。