1搭建哨兵模式
. network_mode: host 表示当前容器直接接入宿主机的网络,也就是说这个容器没有ip地址,他的ip地址就是宿主机的ip地址,你直接访问宿主机的端口就好了,
为什么要这么设置:
1.为了保持和外网是同一个网段:因为说白了从外面的请求访问他就是说白了要靠宿主机的端口映射去访问,我本质是访问宿主机的某一个端口然后映射到局域网的里面某个端口就可以访问里面的机器了。
2.如果不是同一个网段:
现在把读命令或者写命令发给哨兵机器接收请求并不是由哨兵决定发给谁,而是他根据你的命令决定由那台机器接收你的请求,他会把他的IP请求返回给客户端
由客户端操作机器。然后由客户端去操作这台机器去读取,如果这快是一个独立局域网,和外网不是同一个网段,那么对于哨兵来说这台机器的ip地址是相对于局域网的ip地址,那么这个时候把这个ip返回给外面,外面是访问不了redis,这个时候必须要把容器的ip给暴露出来,那他和客户端处于同一个网络之下才行。那么就没有必要做端口映射了。

  1. Redis主从复制集群(哨兵)
version: "3.1"
services:
  master:
    image: redis:5
    container_name: master
    restart: always
    network_mode: host
    volumes:
      - ./redis_master/conf/redis.conf:/etc/redis/redis.conf
      - ./redis_master/data:/data
    command:
      ['redis-server', '/etc/redis/redis.conf']
  slave1:
    image: redis:5
    container_name: slave1
    restart: always
    network_mode: host
    volumes:
      - ./redis_slave1/conf/redis.conf:/etc/redis/redis.conf
      - ./redis_slave1/data:/data
    command:
      ['redis-server', '/etc/redis/redis.conf']
  slave2:
    image: redis:5
    container_name: slave2
    restart: always
    network_mode: host
    volumes:
      - ./redis_slave2/conf/redis.conf:/etc/redis/redis.conf
      - ./redis_slave2/data:/data
    command:
      ['redis-server', '/etc/redis/redis.conf']
  1. 这个还需要注意你配置了host这几个redis的端口都起了冲突,得改一些配置

3.1master的bind得改成0.0.0.0

redis客户端连接到集群 redis集群客户端连接ip配置_ip地址

3.2 把保护模式关掉

redis客户端连接到集群 redis集群客户端连接ip配置_redis_02

3.3每个哨兵的端口也得设置一个单独的 端口

redis客户端连接到集群 redis集群客户端连接ip配置_客户端_03

二:配置哨兵的sentinel.conf(搭建主从复制)

redis客户端连接到集群 redis集群客户端连接ip配置_redis客户端连接到集群_04


(masterip)主机的IP地址,(masterport)主机的端口2.1如果主机是有密码的把他得改一下

redis客户端连接到集群 redis集群客户端连接ip配置_客户端_05


2.2搭建哨兵和搭建redis几乎一模一样这是守护进程,redis默认非守护的,如果是守护的他会阻塞你当前的进程,redis主线程没事干了这个容器就会主动退出,我们自己去安装redis服务就要安装成守护的这样的话就可以后台运行前台敲命令,docker容器的话,就必须要非守护的占着前台不动,容器就不会主动退出

redis客户端连接到集群 redis集群客户端连接ip配置_客户端_06

3.哨兵连接主机的地址

把ip给改了,后面的2是有几个哨兵认为master挂了会注册切换

redis客户端连接到集群 redis集群客户端连接ip配置_客户端_07


4.当after下线他认为多少毫秒进行切换

redis客户端连接到集群 redis集群客户端连接ip配置_ip地址_08


5.故障的切换多久会认为切换失败,

redis客户端连接到集群 redis集群客户端连接ip配置_ip地址_09


6.如果还这样配置就没有读写分离的效果

redis客户端连接到集群 redis集群客户端连接ip配置_客户端_10


就得这么配置哨兵端口形成读写分离 Spring: redis:


sentinel:


master: mymaster


nodes:


- 192.168.195.188:26379


- 192.168.195.188:26380


- 192.168.195.188:26381