主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主。
1、 创建/myredis文件
2、复制redis.conf配置文件到文件夹中
关闭appendonly no
3、配置一主两从,创建三个配置文件
在redis6379.conf内填写一下内容,其他也是一样。
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
4、启动三台服务器
启动并查看进程:ps -ef | grep redis
查看三台主机运行情况:info replication
首先客户端连接上对应的redis:redis-cli -p 6379
配从(库)不配主(库):slaveof
在6380和6381上执行: slaveof 127.0.0.1 6379
1、在主机上写,在从机上只可以读取数据
2、主机挂掉,重启就行,一切如初,从机还是连接上主机。
3、从机重启需重设:slaveof 127.0.0.1 6379
1)当从连接上主服务后,从服务器 向 主服务发送进行数据同步消息
2)主服务器 接到 从服务器 发送过来的同步信息,把主服务数据进行持久化,rdb文件,把rdb文件发送给从服务器,从服务器拿到rdb进行读取
3)之后每次主服务器进行写操作后,都和从服务器进行数据同步。
答:是从头开始复制的,之前的数据也会复制。
答:不可以,只能读取数据。
答:原地待命,不会上位。
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求
优点:
有效减轻master的写压力
缺点:
1)一旦某个slave宕机,后面的slave都没法备份
2)主机挂了,从机还是从机,无法写数据了
当一个master挂了,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
操作:slaveof no one 将从机变为主机,这个是手动的。
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
1)一主二仆模式,6379为主,6380和6381为仆。
2)自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错
3)配置哨兵,填写内容
vim sentinel.conf --> 写入 :sentinel monitor mymaster 127.0.0.1 6379 1
sentinel 哨兵,monitor 监视,mymaster:为监控对象起的服务器名称
1 :为至少有多少个哨兵同意迁移的数量。
4)启动哨兵
执行 redis-sentinel /myredis/sentinel.conf
5)当主机挂掉,从机选举中产生新的主机
从机会被选举为主机呢?根据优先级别:默认级别:replica-priority 100,值越小优先级越高
就比如上面的6379这个主机挂掉了,这个时候比如选择了从机6380为主机,这时6381为6380的从机,其中6379也为6380的从机。
6)哨兵选择过程
选择条件依次:
1)选择优先级靠前的:优先级:在redis.conf中默认是:replica-priority 100
2)选择偏移量最大的:偏移量:获取原主机数据最全的
3)选择runid最小的从服务器: 每一个redis实例启动都会随机生成一个40位的runid。
挑选出新的从服务器,sentinel 向 原主服务器的下的从服务器发送 slaveof no one 命令,产生新的master
当原服务器再次上线好了,sentinel 向 其发送slaveof 命令让其成为新主机的从服务器