Redis主从同步和哨兵模式配置

sentinel.png

redis主从简单安装

1·从redis官网下载redis-4.0.14.tag.gz
2.然后解压,并进入
3.进入后先安装

tar xzf redis--4.0.14.tar.gz
cd redis--4.0.14
make && make install

我们只有一台服务器,要配置主从结构,必须启动多实例,我们启动配置三个redis实例,端口分别为7379,8379,9379。
7379为主服务器,8379 和9379为从服务器。
执行完 make && make install 会在/usr/local/bin 目录下创建文件
我们将这些文件都移动到当前redis的bin目录下

cd /redis/redis7379
mkdir bin
cd /redis/redis7379/bin
mv /usr/local/bin/*  ./

配置redis.conf 端口为7379

port 7379  ##修改端口
bind 172.31.123.211 ##绑定本机Ip 使用ifconfig命令查看
loglevel debug;//修改日志级别
logfile /redis/redis7379/log/redis_7379.log ;//日志的文件路径
pidfile /redis/redis7379/pid/redis_7379.pid ;//pid的文件路径 pid安装并没有 需要收到创建,默认制定为/var/run/redis_7379.pid
slaveof 172.31.123.211 7379;//配置主服务器为7379

配置完毕之后 进入到bin目录下

./redis-server ../redis.conf

ps -ef|grep redis 如果成功启动则会出现下面这种情况

root     29405     1  0 10:51 ?        00:00:41 ./redis-server 172.31.123.211:7379

再次解压一个redis 重命名为redis8379
配置redis.conf 端口为8379

port 8379  ##修改端口
bind 172.31.123.211 ##绑定本机Ip 使用ifconfig命令查看
loglevel debug;//修改日志级别
logfile /redis/redis7379/log/redis_8379.log ;//日志的文件路径
pidfile /redis/redis7379/pid/redis_8379.pid ;//pid的文件路径 pid安装并没有 需要收到创建,默认制定为/var/run/redis_8379.pid
slaveof 172.31.123.211 7379;//配置主服务器为7379

然后启动./redis-server ../redis.conf

再次解压一个redis 重命名为redis8379
配置redis.conf 端口为8379

port 8379  ##修改端口
bind 172.31.123.211 ##绑定本机Ip 使用ifconfig命令查看
loglevel debug;//修改日志级别
logfile /redis/redis8379/log/redis_8379.log ;//日志的文件路径
pidfile /redis/redis8379/pid/redis_8379.pid ;//pid的文件路径 pid安装并没有 需要收到创建,默认制定为/var/run/redis_8379.pid
slaveof 172.31.123.211 7379;//配置主服务器为7379

修改成功后调用./redis-cli -h 172.31.123.211 -p 7379 连接

[root@iZ8ykv3uxiy4adZ bin]# ./redis-cli -h 172.31.123.211 -p 7379
172.31.123.211:7379> 

则表明连接成功。
使用info Replication 查看

role:master ;//表明为主库
master_host:172.31.123.211
master_port:7379
master_link_status:up

然后在主库设置值 从库读取值。是否会同步

哨兵模式配置

在redis 的目录下有sentinel.conf文件 修改redis7379目录下的文件

port 27379
sentinel monitor mymaster 172.31.123.211 7379 1
#设定5秒内没有响应,说明服务器挂了
sentinel down-after-milliseconds mymaster 5000
#设定15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000

redis8389 和redis9379中的sentinel.conf配置文件是差不多的。
Redis主从采用异步复制,那么当主节点挂掉时,从节点可能没有收到全部的同步消息,这部分未同步的消息可能就丢失了,如果主从延时过大,那么丢的消息可能会更多,sentinel(哨兵)无法保证消息不丢失,但是也可能保证消息少都是,他提供两个参数。可以限制主从延时过大

min-slaves-to-write 1 #主节点必须至少有一个从节点在进行正常复制,否则就停止对外服务丧失可用性,
min-slaves-max-lag 10 #什么时候下是正常复制或者是异常复制,如果10s内没有收到从节点的反馈,就意味着同步不正常了

Redis哨兵模式原理:

Redis Sentinel 是一个分布式系统,可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来 接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故 障迁移, 以及选择哪个从服务器作为新的主服务器。
Redis Sentinel 的三个任务:
1.监控:哨兵会不定期检查主服务器和从服务器是否运作正常。
2.提醒:当被监控的某个主服务器出现异常,哨兵可以通过API向管理员发送通知。
3.故障迁移:当一个主服务器不能正常工作时,哨兵会进行自动故障迁移工作,它会是一个从服务器变成主服务器,当一个客户端尝试连接故障服务器的时候,它也会向新客户端返回新的地址。

Sentinel.conf配置文件介绍:

1.sentinel monitor <master-name> <ip> <port> <quorum>  
意思是让哨兵做定期监控 master-name 为哨兵的名称 ip 和端口 quorum为当主服务器出现
2.sentinel down-after-milliseconds <master-name> <times>
每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的 如果超过了配置的times 时间就会认为是不可达的。times为毫秒
3.sentinel parallel-syncs <master-name> <nums>
当主服务器故障时,每次从服务器向新的主服务器发的复制节点的个数
4.sentinel failover-timeout <master-name>  <times>
当发送故障迁移时,超过了配置的时间就会故障迁移失败
5.sentinel notification-script <master-name> <script-path>
当redis发生故障时,将会调用这个脚本 script-path为脚本路径

哨兵的定时监控

当启动一个哨兵(Sentinel)时会发生一下情况:
1.每隔一秒每隔哨兵都会向其余的哨兵节点和主节点以及从节点,发送一次Ping命令,做一次心跳检测。
2.每隔两秒redis的哨兵将所有监视的主丶从节点向指定频道上发送当前的主节点信息。
3.每隔哨兵都会每隔10秒都会向主节点和从节点发送info命令,获取最新的拓扑结构图。
主观下线:单个哨兵认为某个服务下线,sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度,如果超过了改时间,那么该哨兵会认为该实例以及下线了。
客观下线:当主观下线的节点是主节点时,该节点会根据sentinel is-masterdown-by-addr <quorum>命令哨兵会征求其他节点的哨兵的意见,如果认为主观下线的票数大于 quorum,此时哨兵节点就会认为该节点有问题,就会客观下线了。

哨兵主节点选取流程

如果主节点被判定为客观下线后,就要选取一个从节点来当主节点。
1.每隔从节点都可能成为主节点,当他确定主节点下线后,会向其他节点发送
is-master-down-by-addr 命令,来询问是否可以将自己设置为主节点,
2.当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;
3.如果哨兵3发现自己在选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举…………

自动故障转移机制

sentinel状态数据结构中保存了主服务的所有从服务信息,领头sentinel按照如下的规则从服务列表中挑选出新的主服务过滤掉主观下线的节点
选择slave-priority最高的节点,如果由则返回没有就继续选择
选择出复制偏移量最大的系节点,因为复制便宜量越大则数据复制的越完整,如果由就返回了,没有就继续
选择run_id最小的节点

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容