1搭建哨兵模式
. network_mode: host 表示当前容器直接接入宿主机的网络,也就是说这个容器没有ip地址,他的ip地址就是宿主机的ip地址,你直接访问宿主机的端口就好了,
为什么要这么设置:
1.为了保持和外网是同一个网段:因为说白了从外面的请求访问他就是说白了要靠宿主机的端口映射去访问,我本质是访问宿主机的某一个端口然后映射到局域网的里面某个端口就可以访问里面的机器了。
2.如果不是同一个网段:
现在把读命令或者写命令发给哨兵机器接收请求并不是由哨兵决定发给谁,而是他根据你的命令决定由那台机器接收你的请求,他会把他的IP请求返回给客户端
由客户端操作机器。然后由客户端去操作这台机器去读取,如果这快是一个独立局域网,和外网不是同一个网段,那么对于哨兵来说这台机器的ip地址是相对于局域网的ip地址,那么这个时候把这个ip返回给外面,外面是访问不了redis,这个时候必须要把容器的ip给暴露出来,那他和客户端处于同一个网络之下才行。那么就没有必要做端口映射了。
- 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']
- 这个还需要注意你配置了host这几个redis的端口都起了冲突,得改一些配置
3.1master的bind得改成0.0.0.0
3.2 把保护模式关掉3.3每个哨兵的端口也得设置一个单独的 端口
二:配置哨兵的sentinel.conf(搭建主从复制)
(masterip)主机的IP地址,(masterport)主机的端口2.1如果主机是有密码的把他得改一下
2.2搭建哨兵和搭建redis几乎一模一样这是守护进程,redis默认非守护的,如果是守护的他会阻塞你当前的进程,redis主线程没事干了这个容器就会主动退出,我们自己去安装redis服务就要安装成守护的这样的话就可以后台运行前台敲命令,docker容器的话,就必须要非守护的占着前台不动,容器就不会主动退出
3.哨兵连接主机的地址
把ip给改了,后面的2是有几个哨兵认为master挂了会注册切换
4.当after下线他认为多少毫秒进行切换
5.故障的切换多久会认为切换失败,
6.如果还这样配置就没有读写分离的效果
就得这么配置哨兵端口形成读写分离 Spring: redis:
sentinel:
master: mymaster
nodes:
- 192.168.195.188:26379
- 192.168.195.188:26380
- 192.168.195.188:26381