Redis集群-Docker(二)

目录

  • 1. 三主三从-服务器
    • 介绍
    • 1.1 启动
      • 1.1.1 三个redis.conf配置文件
      • 1.1.2 编辑配置文件
      • 1.1.3 启动容器
      • 1.1.4 执行命令配置集群
      • 1.1.5 进入容器, 查看集群信息
  • 2. 一主双从
    • 2.1 启动主服务器
    • 2.2 启动从服务器
  • 3. Redis哨兵模式
    • 3.1 哨兵模式作用
    • 3.2 配置哨兵模式
  • 4. 客户端api连接哨兵模式
  • 5. 集群方案

1. 三主三从-服务器

介绍

  1. Redis Cluster 集群模式通常具有 高可用、可扩展性、分布式、容错 等特性
  2. master可以有多个slave;

1.1 启动

1.1.1 三个redis.conf配置文件

		/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

1.1.2 编辑配置文件

		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 数据的持久化

1.1.3 启动容器

		docker run -d --name redis7000 \
		-v /opt/redis/7000/redis.conf:/redis.conf \
		--net=host --restart=always \
		redis redis-server /redis.conf

1.1.4 执行命令配置集群

		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

1.1.5 进入容器, 查看集群信息

		docker exec -it redis7000 redis-cli -c -p 7000
		
		cluster info
		
		cluster nodes

-p: 指定进入的容器端口,可通过一个容器(redis7000)进入其他的容器

2. 一主双从

2.1 启动主服务器

docker run -d --name redis6379 --net=host --restart=always redis

主服务器直接启动,没有其他参数

2.2 启动从服务器

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

Redis集群-Docker(二)_第1张图片

3. Redis哨兵模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。

3.1 哨兵模式作用

  1. 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  2. 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
    单个哨兵监控, 可能会出现问题, 所以添加多个哨兵进行监控,
    (主从服务器都要添加哨兵)

3.2 配置哨兵模式

  1. 新建 5000.conf 文件
    /opt/redis/snetinel/5000.conf
		# 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
  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服务,三个哨兵服务
Redis集群-Docker(二)_第2张图片
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

  1. 重新启动6379, 不会把6379切换为主服务器, 而是作为从服务器
docker start redis6379

docker exec -it redis6379 redis-cli

info replication

4. 客户端api连接哨兵模式

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);
    }

5. 集群方案

  1. 主从高可用
           该方案就是单实例形式,只是为了保证数据的安全,对于用户数据少,业务的前期可以采用
  2. 客户端分片-Jedis
           典型代表:Jedis。自主写分片算法,代码掌握在自己手中,可控性强,但是需要专业的开发运维人员维护,技术要求和维护成本高
  3. 代理分片
           典型代表:Twemproxy,redis集群没有正式推出之前官网推荐的方案,也是目前使用最多的
  4. Redis cluster
           Redis 3版本推出的集群方案,历时四年之多的开发
  5. Codis集群
           豌豆荚15年开源的解决方案,开源之前其已经用了2年之多,与其同期官网推出redis cluster

你可能感兴趣的:(Redis,redis)