/opt/redis/7000/redis.conf
/opt/redis/7001/redis.conf
/opt/redis/7002/redis.conf
/opt/redis/7003/redis.conf
/opt/redis/7004/redis.conf
/opt/redis/7005/redis.conf
cd /opt/redis/
mkdir 7000 7001 7002 7003 7004 7005
vim /7000/redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
环境变量 | 作用 |
---|---|
port | 配置端口 |
cluster-enabled | 开启redis群集支持 |
cluster-config-file | 集群配置文件 |
cluster-node-timeout | 能够失联的最大时间 |
appendonly | 数据的持久化 |
docker run -d --name redis7000 \
-v /opt/redis/7000/redis.conf:/redis.conf \
--net=host --restart=always \
redis redis-server /redis.conf
docker exec -it redis7000 \
redis-cli --cluster create \
192.168.126.130:7000 192.168.126.130:7001 \
192.168.126.130:7002 192.168.126.130:7003 \
192.168.126.130:7004 192.168.126.130:7005 \
--cluster-replicas 1
docker exec -it redis7000 redis-cli -c -p 7000
cluster info
cluster nodes
-p: 指定进入的容器端口,可通过一个容器(redis7000)进入其他的容器
docker run -d --name redis6379 --net=host --restart=always redis
主服务器直接启动,没有其他参数
docker run -d --name redis6380 --net=host --restart=always redis \
redis-server --port 6380 --slaveof 192.168.126.130 6379
docker run -d --name redis6381 --net=host --restart=always redis \
redis-server --port 6381 --slaveof 192.168.126.130 6379
参数 | 作用 |
---|---|
- -net=host | 使用宿主机的端口,不用通过-p指定端口 |
- -port | 设置服务启动端口号 |
- -slaveof | 指定主服务器 |
查看主从结构: 进入其中一个服务器
info replication
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
# sentinel监听端口
port 5000
# 配置哨兵 哨兵名称 主服务masterip 端口 代表多少个sentinel认为master失效,才真正的失效
sentinel monitor mymaster 192.168.126.130 6379 2
# 失效多长时间,sentinel才会认为的失效
sentinel down-after-milliseconds mymaster 5000
# 同一个sentinel对同一个master两次failover之间的间隔时间
sentinel failover-timeout mymaster 60000
# 主从切换时最多可以有多少个slave同时对新的master进行同步
sentinel parallel-syncs mymaster 1
# 启动哨兵进程
docker run -d --name sentinel5000 \
-v /opt/redis/sentinel/5000.conf:/sentinel.conf \
--net=host \
redis redis-sentinel /sentinel.conf
docker run -d --name sentinel5001 \
-v /opt/redis/sentinel/5001.conf:/sentinel.conf \
--net=host \
redis redis-sentinel /sentinel.conf
docker run -d --name sentinel5002 \
-v /opt/redis/sentinel/5002.conf:/sentinel.conf \
--net=host \
redis redis-sentinel /sentinel.conf
启动后,是三个redis服务,三个哨兵服务
3. 停止主服务器, 测试主服务器重新选举
# 停止主服务器
docker stop redis6379
# 在哨兵日志中查看切换信息+switch-master mymaster 192.168.126.130 6379 192.168.126.130 6381
docker logs sentinel5000
# 查看服务器角色-进入容器
docker exec -it redis6380 redis-cli -p 6381
# 查看主从信息
info replication
主服务器从6379切换为6381
docker start redis6379
docker exec -it redis6379 redis-cli
info replication
public static void main(String[] args) {
//哨兵模式地址
HashSet<String> set = new HashSet<>();
set.add("192.168.126.130:5000");
set.add("192.168.126.130:5001");
set.add("192.168.126.130:5002");
//连接哨兵--哨兵集群名称,哨兵集群地址
JedisSentinelPool pool = new JedisSentinelPool("mymaster",set);
//获取连接
Jedis j = pool.getResource();
j.set("k1","v1");
String k1 = j.get("k1");
System.out.println(k1);
}