一、主从复制配置
案例:一主三从
主:6378
从:6376、6377
# 下面是我用docker创建的容器给大家演示,可以理解为虚拟机,还是不懂的可以忽略。
docker run --net host --name=myredis01 --privileged=true \
-v /data/docker/redis/redis.conf:/etc/redis/redis.conf \
-v /data/docker/redis/data:/data \
-d redis:6.2.6 \
redis-server /etc/redis/redis.conf --port 6378docker run --net host --name=myredis02 --privileged=true \
-v /data/docker/redis/redis.conf:/etc/redis/redis.conf \
-d redis:6.2.6 \
redis-server /etc/redis/redis.conf --port 6377docker run --net host --name=myredis03 --privileged=true \
-v /data/docker/redis/redis.conf:/etc/redis/redis.conf \
-d redis:6.2.6 \
redis-server /etc/redis/redis.conf --port 6376
1、准备3台redis服务启动
并连接,这个就不演示了,没什么难度。
2、进入其中一台看下服务器状况
info replication
可以看出都是主服务器,然后配置主从关系
3、配置主从
进入6377和6376从机执行
slaveof 主服务器ip 端口
4、几个重要的点
1)当其中一台从机挂掉后,重新启动,就不是从机了,需要重新配置,重新配置完后,从机会立即拥有主机所有key
2)此时主机down掉后,从机是不会升级到主服务器的。重启主服务器后,主服务器还是主服务器,这点是和从服务器的区别
5、同步原理
1)当从连接上主服务器之后,从服务器向主服务发送进行数据同步消息
2)主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取---全量同步
3)每次主服务器进行写操作之后,和从服务器进行数据同步---增量同步
6、反客为主---哨兵模式
当哨兵模式开启时,哨兵会监控主服务是否挂掉,如果挂掉,会从slave里推选从新的master。
在redis任意一台服务器的一个位置新建文件 vim sentinel.conf,写入下面内容
sentinel monitor redismaster 47.95.33.138 6378 1
执行 redis-sentinel /data/sentinel.conf 启用哨兵,此时如果6378down掉了,其中剩下两个会成为master继续工作,如果如果6378再次重启,那么他会变为slave,丧失大哥权力。
1)缺点:复制延迟
由于所有的写操作都是先在Master上操作,然后同步更新到slave上,所以从Master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
2)推选新master原则
a. redis.conf里的配置 replica-priority 越小越容易被推选。默认100
replica-priority 100
b. 推选数据偏移量高的服务器,通俗讲就是,和之前的主服务器同步量最高的
c. 选择runid最小的从服务器
二、PHP、Java链接主从服务
根据sentinel配置里的主服务器名称获取主服务器链接,详细可以自己搜索下