本文主要是介绍Redis的主从复制(redis有密码版)——一主二仆、薪火相传、反客为主、哨兵模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 搭建一主多从
- 创建myredis文件夹并复制etc下的redis.conf到myredis下
- 创建三个配置文件
- 启动三个redis
- info replication查看从属关系
- 配置从机
- 测试主机从机
- 一主二仆
- 薪火相传
- 反客为主
- 哨兵模式
- 哨兵模式总结
- 主从复制java中使用
搭建一主多从
创建myredis文件夹并复制etc下的redis.conf到myredis下
创建
mkdir /myredis
进入文件夹
cd /myredis
复制操作
cp /etc/redis.conf /myredis/redis.conf
可以看到刚开始ls没有的,复制完ls就可以看见redis.conf文件了
创建三个配置文件
创建第一个
vim redis6379.conf
配置里面
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
然后再创建两个分别取名 redis6380.conf redis6381.conf
可以像这样复制 会快一点
cp redis6379.conf redis6380.conf
复制过来的记得修改里面的配置把6379全改成6380
ls
这时候就创建完成了
启动三个redis
成功了是这样的
如果6379和我显示的不一样 说明端口号被占用 先杀掉再开就行
info replication查看从属关系
可以看到 角色是主机,从机0
配置从机
在从机上执行slaveof 主机ip 主机端口号
即
在6380和6381上执行: slaveof 127.0.0.1 6379
**这里提一嘴如果redis配置了密码需要在从库的conf里添加
masterauth 密码 不然配置从库的时候从库显示有主库 主库却看不见从库
**
先配了一个 反正成功是这样的
测试主机从机
主机创建了 a1 v1
从机可以直接获取,且从机无法添加,只有读的功能
一主二仆
特点:
1.从机挂了之后需要重新(执行slaveof 主机ip 主机端口号) 不然从机就会变回主机
.
2.挂掉之后重新配置回从机时 会把主机数据从头到尾复制
.
3.主机挂了之后从机还是从机(不会变成主机) 并且显示主机状态为down 等主机恢复之后 主机就还是主机 从机也还是从机
薪火相传
比如6380是6379的从机 slaveof 127.0.0.1 6379
6381是6380的从机 slaveof 127.0.0.1 6380
特点:上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险
优点:减少压力
缺点:其中一个挂了,后面的都没了
反客为主
在从机设计slaveof no one 这是当主机挂了之后 这个从机会变成主机
但是变成的只是普通主机 如果是薪火相传的话他的从机还是他的从机
其他和他并列的从机不会变成他的从机
哨兵模式
首先前提是一主二从,二从是并列的而不是薪火相传
下面开始测试
- 在myredis下再建一个配置文件 sentinel.conf
- 打开配置类,在里面添加 sentinel monitor mymaster 127.0.0.1 6379 1
其中mymaster为监控对象起的服务器名称,1 为至少有多少个哨兵同意迁移(只要有一个哨兵同意即可迁移)。 - 再添加sentinel auth-pass mymaster 密码
- redis-sentinel sentinel.conf 启动哨兵模式
- 关掉6379端口的主机
- 这时哨兵模式启动了开始加载配置
可以看到6379端口down了,新主机为6381,这是6380为6381从机
这时候如果重新启动6379端口,可以看到他已经变成从机了,主机为6381
哨兵模式总结
当主服务器down机时,新服务器选举是有策略的
选择条件从上到下依次
1.选择优先级靠前的
优先级在redis.conf中默认:replica-priority 100,值越小优先级越高
2.选择偏移量最大的
偏移量是指获得原主机数据最全的
3.选择runid最小的从服务
每个redis实例启动后都会随机生成一个40位的runid
主从复制java中使用
引用即可
private static JedisSentinelPool jedisSentinelPool=null;public static Jedis getJedisFromSentinel(){
if(jedisSentinelPool==null){Set<String> sentinelSet=new HashSet<>();sentinelSet.add("192.168.11.103:26379");JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();jedisPoolConfig.setMaxTotal(10); //最大可用连接数
jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
jedisPoolConfig.setMinIdle(5); //最小闲置连接数
jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pongjedisSentinelPool=new JedisSentinelPool("mymaster",sentinelSet,jedisPoolConfig);
return jedisSentinelPool.getResource();}else{
return jedisSentinelPool.getResource();}
}
这篇关于Redis的主从复制(redis有密码版)——一主二仆、薪火相传、反客为主、哨兵模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!