标签:mil 提高 Raft算法 actor oss 技术 not image err
简介
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,mester以写为主,slaver以读为主。原则上是配从不配主。
搭建主从复制
新建三个文件夹:redis8000、redis8001、redis8002
将redis.conf复制到redis8000
配置redis.conf
1.bind 192.168.100.110 指定本机ip
2.port 8000 端口
3.daemonize yes
4.pidfile /yangk/redis/redis8000/redis_8000.pid
5.dir /yangk/redis/redis8000
6.requirepass 123456
-将8000文件里面的redis.conf复制到redis8001,redis8002
8001和8002都需要替换成自己的端口
使用 :%s/8000/8001/g 批量替换
// 下面这两个是重点,不然从机无法挂到主机下面
replicaof 192.168.100.110 8000
masterauth 123456
启动8000.8001,8002实例
./redis-server ../redis8000/redis.conf
./redis-server ./redis8001/redis.conf
./redis-server ./redis8002/redis.conf
客户端连接
./redis-cli -h 192.168.100.110 -p 8000 -a 123456
./redis-cli -h 192.168.100.110 -p 8001 -a 123456
./redis-cli -h 192.168.100.110 -p 8002 -a 123456
info replication 查看配置
主从复制优缺点
优点
缺点
slaveof no one 从机变成主机
slaveof 192.168.100.110 8001 从机从新指定主机
总结
简介
redis2.8版本之后引入的,核心功能就是主节点的自动故障转移。
监控(Monitoring): 哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移(Automatic Failover): 当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
配置提供者(Configuration Provider): 客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
通知(Notification): 哨兵可以将故障转移的结果发送给客户端。其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移;而配置提供者和通知功能,则需要在与客户端的交互中才能体现。
哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的Redis节点,不存储数据。
数据节点: 主节点和从节点都是数据节点。
搭建哨兵模式
1.复制sentinel.conf
cp sentinel.conf ../sentinel/sentinel7000.conf
2.修改配置
bind 0.0.0.0
port 7000
daemonize yes
pidfile /yangk/redis/redis/sentinel/redis-sentinel7000.pid
logfile "sentinel7000.log"
dir /yangk/redis/redis/sentinel
//意思是要对那个主机进行监控 2:的意思是有几个哨兵认为主机挂了,那这个主机就是挂了(主观宕机)一般配置的数据是哨兵数量/2+1
//# sentinel monitor master-name ip redis-port quorum
sentinel monitor mymaster 192.168.100.110 8000 2
//name要和上面一致,后面是密码
sentinel auth-pass mymaster 123456
将改完的sentinel7000.conf 复制两份
使用 :%s/7000/7001/g 批量替换
使用 :%s/7001/7002/g 批量替换
3. 启动哨兵
./redis-sentinel ../sentinel/sentinel7000.conf
./redis-sentinel ../sentinel/sentinel7001.conf
./redis-sentinel ../sentinel/sentinel7002.conf
使用Jedis监控故障转移
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(SentinelPool.class);
Set<String> set = new HashSet<>();
set.add("192.168.100.110:7000");
set.add("192.168.100.110:7001");
set.add("192.168.100.110:7002");
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", set, "123456");
while (true) {
Jedis jedis = null;
try {
jedis = jedisSentinelPool.getResource();
String s = UUID.randomUUID().toString();
jedis.set("k" + s, "v" + s);
System.out.println(jedis.get("k" + s));
Thread.sleep(1000);
} catch (Exception e) {
logger.error(e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
}
}
<哨兵的地址>,<哨兵的端口>,<哨兵的运行ID>,<哨兵的配置版本>,
<主数据库的名字>,<主数据库的地址>,<主数据库的端口>,<主数据库的配置版本>
??哨兵通过监听的_sentinel_:hello频道接收到其他哨兵发送的消息后会判断哨兵是不是新发现的哨兵,如果是则将其加入已发现的哨兵列表中并创建一个到其的连接(哨兵与哨兵只会创建用来发送PING命令的连接,不会创建订阅频道的连接)。
??实现了自定发现从数据库和其他哨兵节点后,哨兵要做的就是定时监控这些数据和节点运行情况,每隔一定时间向这些节点发送PING命令来监控。间隔时间和down-after-milliseconds选项有关,down-after-milliseconds的值小于1秒时,哨兵会每隔down-after-milliseconds指定的时间发送一次PING命令,当down-after-milliseconds的值大于1秒时,哨兵会每隔1秒发送一次PING命令。例如:
// 每隔1秒发送一次PING命令
sentinel down-after-milliseconds mymaster 60000
// 每隔600毫秒发送一次PING命令
sentinel down-after-milliseconds othermaster 600
sentinel monitor mymaster 192.168.100.110 8000 2
该配置表示只有当至少有两个Sentinel节点(包括当前节点)认为该主数据库主观下线时,当前哨兵节点才会认为该主数据库客观下线。接下来选举领头哨兵。
序号 | 挑选依据 |
---|---|
1 | 所有在线的从数据库中,选择优先级最高的从数据库。优先级通过replica-priority参数设置 |
2 | 优先级相同,则复制的命令偏移量越大(复制越完整)越优先 |
3 | 如果以上都一样,则选择运行ID较小的从数据库 |
2.选出一个从数据库后,领头哨兵将向从数据库发送SLAVEOF NO ONE命令使其升格为主数据库,而后领头哨兵向其他从数据库发送 SLAVEOF命令来使其成为新主数据库的从数据库,最后一步则是更新内部的记录,将已经停止服务的旧的主数据库更新为新的主数据库的从数据库,使得当其恢复服务时自动以从数据库的身份继续服务
标签:mil 提高 Raft算法 actor oss 技术 not image err
原文地址:https://www.cnblogs.com/yangk1996/p/12685822.html