一、主从复制
两台服务器
192.168.33.111(主)
192.168.33.112(备)
注意:主从复制的开启,完全是在从节点发起的;不需要在主节点做任何事情。
cd /usr/local/redis/conf
vi redis.conf
在从服务器的配置文件中加入主服务器的ip和端口,要作主从切换,所以建议所有的密码都一致, masterauth是从机对主机验证时,所需的密码。(即主机的requirepass)
slaveof 192.168.33.111 6380
masterauth 199032
分别启动redis然后进入客户端测试
docker run --privileged=true -p 6380:6379 --name redis -v /usr/local/redis/data:/data -v /usr/local/redis/conf:/usr/local/etc/redis -v /etc/localtime:/etc/localtime -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
docker run --privileged=true -p 6381:6379 --name redis -v /usr/local/redis/data:/data -v /usr/local/redis/conf:/usr/local/etc/redis -v /etc/localtime:/etc/localtime -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
docker exec -it 1083b6941f60 redis-cli -h 192.168.33.111 -p 6380 -a '199032'
docker exec -it 9a223efcfd09 redis-cli -h 192.168.33.112 -p 6381 -a '199032'
info命令查看当前服务器角色,如图:
主从复制里redis只能存在一个主,可以多个从,主机执行写命令,从机只能读并且能同步主机的值,主从复制,读写分离就实现了。
二、哨兵机制
万一主机挂了怎么办,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能。当主挂了之后会自动选举一个从节点作为主,复活后的主变为从。
1、分别在主从节点对应redis.conf同目录下新建sentinel.conf文件,名字绝对不能错。
2、配置哨兵,在sentinel.conf文件中填入内容:
sentinel monitor 被监控数据库名字(自己起名字) ip port 1
cd /usr/local/redis/conf
vi sentinel.conf
#每个节点端口号要配置不一样(从节点修改端口号26381)
port 26380
dir "/data"
logfile "sentinel.log"
sentinel monitor mymaster 192.168.33.111 6380 1
sentinel auth-pass mymaster 199032
#修改心跳检测 5000毫秒
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
#后台守护进程启动(注意docker是以配置文件启动所以设置为no)
daemonize no
#允许外网访问
protected-mode no
上述参数含义参照
https://blog.youkuaiyun.com/a1282379904/article/details/52335051/
3、启动哨兵
docker run --privileged=true -p 26380:26380 --name redis-sentinel -v /usr/local/redis/conf:/usr/local/etc/redis -d redis:3.2 redis-sentinel /usr/local/etc/redis/sentinel.conf
#进入哨兵客户端
docker exec -it 433a582f99b6 redis-cli -h 192.168.33.111 -p 26380 -a '199032'
#info命令查看信息
#进入容器也可以查看日志,默认data目录下有日志信息
#退出容器查看进程是否都在
ps -ef | grep redis
4、停止主redis节点,进入从redis节点客户端看是否切换
docker exec -it ae587b7756dd redis-cli -h 192.168.33.112 -p 6381 -a '199032'
info
复制的缺点:
延时,由于所有的写操作都是在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使得这个问题更加严重。