Redis主从及哨兵模式配置教程

您所在的位置:网站首页 重启redis哨兵 Redis主从及哨兵模式配置教程

Redis主从及哨兵模式配置教程

2023-10-16 03:57| 来源: 网络整理| 查看: 265

提示:以下是本篇文章正文内容,下面案例可供参考

本文环境:CentOS7.3, Redis 5.0.7

一、Redis主从配置 1.主从搭建服务器情况: IP角色redis版本192.168.223.131主Redis 5.0.7192.168.223.130从Redis 5.0.7192.168.223.132从Redis 5.0.7         2.修改主从的redis配置文件

进入Redis解压目录,本文解压目录为: /usr/local/redis-5.0.7,找到redis.conf文件,进行修改:

192.168.223.131 redis.conf配置文件:

配置文件中 pid和log配置到了 redis解压目录下的log文件,此文件没有需要手动新建,同理 /home/redisdb 目录也需要手动新建,不然启动redis报 找不到此目录。

bind 192.168.223.131 protected-mode yes #端口号 port 6379 #允许后台启动 daemonize yes #pid 文件保存路径 pidfile /usr/local/redis-5.0.7/log/redis_6379.pid #日志路径 logfile "/usr/local/redis-5.0.7/log/redis.log" #数据库备份文件存放目录 dir /home/redisdb/ #redis设置连接密码 requirepass "123456" #当 master 服务设置了密码保护时,slave连接master密码,master可省略 masterauth 123456

192.168.223.130 redis.conf配置文件:

bind 192.168.223.130 protected-mode yes #端口号 port 6379 #允许后台启动 daemonize yes #pid 文件保存路径 pidfile /usr/local/redis-5.0.7/log/redis_6379.pid #日志路径 logfile "/usr/local/redis-5.0.7/log/redis.log" #数据库备份文件存放目录 dir /home/redisdb/ #redis登录连接密码 requirepass "123456" #当 master 服务设置了密码保护时,slave连接master密码,master可省略 masterauth 123456 replicaof 192.168.223.131 6379 #配置为master的从

 192.168.223.132 redis.conf配置文件:

bind 192.168.223.132 protected-mode yes #端口号 port 6379 #允许后台启动 daemonize yes #pid 文件保存路径 pidfile /usr/local/redis-5.0.7/log/redis_6379.pid #日志路径 logfile "/usr/local/redis-5.0.7/log/redis.log" #数据库备份文件存放目录 dir /home/redisdb/ #redis登录连接密码 requirepass "123456" #当 master 服务设置了密码保护时,slave连接master密码,master可省略 masterauth 123456 replicaof 192.168.223.131 6379 #配置为master的从 3. 进入redis解压目录:依次启动Redis,131,130,132 

示例:以下操作在 132进行,130和131的操作 一样。

[root@localhost src]# cd /usr/local/redis-5.0.7/src/ [root@localhost src]# pwd /usr/local/redis-5.0.7/src [root@localhost src]# ./redis-server ../redis.conf

./redis-server ../redis.conf : 代表以配置文件的方式启动redis。

连接redis

[root@localhost src]# ./redis-cli -h 192.168.223.132 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.223.132:6379>

查看主从状态:

192.168.223.132:6379> info replication # Replication role:slave master_host:192.168.223.131 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:50568083 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:3fe68e545ae171f9b212c9c9fd813c156d1992dd master_replid2:0000000000000000000000000000000000000000 master_repl_offset:50568083 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:50497494 repl_backlog_histlen:70590 192.168.223.132:6379>

已上信息显示 132位从,主位131,然后连接131查看状态:

[root@localhost src]# ./redis-cli -h 192.168.223.131 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.223.131:6379> 192.168.223.131:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.223.130,port=6379,state=online,offset=50612477,lag=1 slave1:ip=192.168.223.132,port=6379,state=online,offset=50612477,lag=0 master_replid:3fe68e545ae171f9b212c9c9fd813c156d1992dd master_replid2:68e7d0a5a33e3ac6ae722c701123a7cd4e5a5340 master_repl_offset:50612477 second_repl_offset:50475090 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:49563902 repl_backlog_histlen:1048576 192.168.223.131:6379>

输入信息进行验证主从同步状态:

131主 redis 写入 信息:

192.168.223.131:6379> set testredis 'hello world' OK

分别在两个从服务器查询:

130

192.168.223.130:6379> get testredis "hello world" 192.168.223.130:6379>

132

192.168.223.132:6379> get testredis "hello world" 192.168.223.132:6379> set testwrite 'hello' (error) READONLY You can't write against a read only replica. 192.168.223.132:6379>

redis主从 模式下只能在主写入信息,从服务器无法写入信息,在132上写入信息,提示只有读权限。

 

4.主从复制的优缺点

优点:

master能自动将数据同步到slave,可以进行读写分离,分担master的读压力master、slave之间的同步是以非阻塞的方式进行的,同步期间,客户端仍然可以提交查询或更新请求

缺点:

不具备自动容错与恢复功能,master或slave的宕机都可能导致客户端请求失败,需要等待机器重启或手动切换客户端IP才能恢复master宕机,如果宕机前数据没有同步完,则切换IP后会存在数据不一致的问题难以支持在线扩容,Redis的容量受限于单机配置 二、Redis哨兵模式配置

哨兵模式是基于redis的主从模式配置的,要首先配置好主从模式,以下的哨兵模式是基于上面的主从配置的。

1.哨兵模式服务器搭建情况 IP角色192.168.223.131主192.168.223.130从192.168.223.132从192.168.223.131:26379Sentinel01192.168.223.130:26379Sentinel02192.168.223.132:26379Sentinel03 2.修改配置文件

sentinel.conf配置文件主要参数解析:

# 端口 port 26379 # 是否后台启动 daemonize yes # pid文件路径 pidfile /var/run/redis-sentinel.pid # 日志文件路径 logfile "/var/log/sentinel.log" # 定义工作目录 dir /tmp # 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为 sentinel monitor mymaster 127.0.0.1 6379 2 # 如果mymaster 30秒内没有响应,则认为其主观失效 sentinel down-after-milliseconds mymaster 30000 # 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。 sentinel parallel-syncs mymaster 1 # 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒 sentinel failover-timeout mymaster 180000 # 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。 sentinel deny-scripts-reconfig yes

进行130,131,132 sentinel.conf配置文件 配置:

daemonize yes logfile "/usr/local/redis-5.0.7/log/sentinel.log" pidfile "/usr/local/redis-5.0.7/log/redis-sentinel.pid" #sentinel工作目录 dir "/home/redisdb" #判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数 ,mymaster:规定主redis的名字 sentinel monitor mymaster 192.168.223.131 6379 2 #配置连接密码,此处的密码需要与 redis.conf里面配置的连接密码一致 sentinel auth-pass mymaster 123456 #判断master主观下线时间,默认30s sentinel down-after-milliseconds mymaster 30000

启动sentinel,启动顺序为:主Redis --> 从Redis --> Sentinel1/2/3。(由于上面主从已经启动过,这里直接启动sentinel)

以下操作已131位示例,130和132操作一样:

[root@localhost src]# ps -ef|grep redis root 36148 1 0 Sep10 ? 00:17:03 ./redis-server 192.168.223.131:6379 root 79094 3280 0 19:12 pts/0 00:00:00 ./redis-cli -h 192.168.223.131 -a 123456 root 79547 35965 0 19:44 pts/1 00:00:00 grep --color=auto redis [root@localhost src]# [root@localhost src]# ./redis-sentinel ../sentinel.conf [root@localhost src]# [root@localhost src]# ps -ef|grep redis root 36148 1 0 Sep10 ? 00:17:03 ./redis-server 192.168.223.131:6379 root 79094 3280 0 19:12 pts/0 00:00:00 ./redis-cli -h 192.168.223.131 -a 123456 root 79557 1 0 19:45 ? 00:00:00 ./redis-sentinel *:26379 [sentinel] root 79569 35965 0 19:45 pts/1 00:00:00 grep --color=auto redis

启动sentinel后,进行连接:

[root@localhost src]# pwd /usr/local/redis-5.0.7/src [root@localhost src]# ./redis-cli -p 26379 #连接 127.0.0.1:26379> sentinel master mymaster #输出被监控的主节点的状态信息 1) "name" 2) "mymaster" 3) "ip" 4) "192.168.223.131" 5) "port" 6) "6379" 7) "runid" 8) "d184f247a90f4ad70777bfe3b92ea162e5ea8c5c" 9) "flags" 10) "master" ..... 127.0.0.1:26379> sentinel slaves mymaster #查看mymaster的从信息,可以看到有2个 name 从节点 1) 1) "name" 2) "192.168.223.130:6379" 3) "ip" 4) "192.168.223.130" 5) "port" 6) "6379" 7) "runid" 8) "bf801f52eeb84e2e0a5a129a7e234fb88a8d5bda" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "70" 19) "last-ping-reply" 20) "70" 21) "down-after-milliseconds" 22) "30000" 23) "info-refresh" 24) "9624" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "220434" 29) "master-link-down-time" 30) "0" 31) "master-link-status" 32) "ok" 33) "master-host" 34) "192.168.223.131" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "51075160" 2) 1) "name" 2) "192.168.223.132:6379" 3) "ip" 4) "192.168.223.132" 5) "port" 6) "6379" 7) "runid" 8) "4c53675e9e410bc16fd133a4bd0d45817a3d34c2" 9) "flags" 10) "slave" 11) "link-pending-commands" ..... 3.哨兵模式下的主从测试

首先关掉131 主 redis服务,哨兵模式下 会自动选举另外一redis服务为主服务。

关闭131redis 服务

192.168.223.131:6379> shutdown not connected> quit [root@localhost src]# ps -ef|grep redis root 79557 1 0 19:45 ? 00:00:02 ./redis-sentinel *:26379 [sentinel] root 79606 35965 0 19:47 pts/1 00:00:00 ./redis-cli -p 26379 root 79666 3280 0 19:52 pts/0 00:00:00 grep --color=auto redis [root@localhost src]#

在130或者132上连接sentinel查看状态:(下面是在132上面连接)

127.0.0.1:26379> sentinel master mymaster 1) "name" 2) "mymaster" 3) "ip" 4) "192.168.223.132" #主 已经切换到 132 5) "port" 6) "6379" 7) "runid" 8) "4c53675e9e410bc16fd133a4bd0d45817a3d34c2" 9) "flags" 10) "master" ...... 127.0.0.1:26379> sentinel slaves mymaster 1) 1) "name" 2) "192.168.223.130:6379" 3) "ip" 4) "192.168.223.130" 5) "port" 6) "6379" 7) "runid" 8) "bf801f52eeb84e2e0a5a129a7e234fb88a8d5bda" 9) "flags" 10) "slave" 11) "link-pending-commands" 12) "0" 13) "link-refcount" 14) "1" 15) "last-ping-sent" 16) "0" 17) "last-ok-ping-reply" 18) "587" 19) "last-ping-reply" 20) "587" 21) "down-after-milliseconds" 22) "30000" 23) "info-refresh" 24) "4855" 25) "role-reported" 26) "slave" 27) "role-reported-time" 28) "96158" 29) "master-link-down-time" 30) "0" 31) "master-link-status" 32) "ok" 33) "master-host" 34) "192.168.223.132" 35) "master-port" 36) "6379" 37) "slave-priority" 38) "100" 39) "slave-repl-offset" 40) "51141312" 2) 1) "name" 2) "192.168.223.131:6379" 3) "ip" 4) "192.168.223.131" 5) "port" 6) "6379" 7) "runid" 8) "" 9) "flags" 10) "s_down,slave,disconnected" #原来主 131的状态目前为 下线且 已经为从 11) "link-pending-commands"

在新选举的 主 上面进行 插入操作进行验证:

192.168.223.132:6379> set newmaster 'lalalalal' OK 192.168.223.132:6379> keys * 1) "aa" 2) "testkey" 3) "hhaa" 4) "hgk" 5) "aaa" 6) "nihao" 7) "hong" 8) "xll" 9) "newmaster" #发现132 已经可以 写入操作 10) "testredis" 11) "lpf" 192.168.223.132:6379>

以上操作验证 哨兵模式下 主服务宕机后可自动进行切换。

sentinel模式下的几个事件:

+reset-master :主服务器已被重置。 +slave :一个新的从服务器已经被 Sentinel 识别并关联。 +failover-state-reconf-slaves :故障转移状态切换到了 reconf-slaves 状态。 +failover-detected :另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。 +slave-reconf-sent :领头(leader)的 Sentinel 向实例发送了 [SLAVEOF](/commands/slaveof.html) 命令,为实例设置新的主服务器。 +slave-reconf-inprog :实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。 +slave-reconf-done :从服务器已经成功完成对新主服务器的同步。 -dup-sentinel :对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。 +sentinel :一个监视给定主服务器的新 Sentinel 已经被识别并添加。 +sdown :给定的实例现在处于主观下线状态。 -sdown :给定的实例已经不再处于主观下线状态。 +odown :给定的实例现在处于客观下线状态。 -odown :给定的实例已经不再处于客观下线状态。 +new-epoch :当前的纪元(epoch)已经被更新。 +try-failover :一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。 +elected-leader :赢得指定纪元的选举,可以进行故障迁移操作了。 +failover-state-select-slave :故障转移操作现在处于 select-slave 状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。 no-good-slave :Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。 selected-slave :Sentinel 顺利找到适合进行升级的从服务器。 failover-state-send-slaveof-noone :Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。 failover-end-for-timeout :故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。 failover-end :故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。 +switch-master :配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。 +tilt :进入 tilt 模式。 -tilt :退出 tilt 模式 4. 哨兵模式的优缺点

优点:

哨兵模式基于主从复制模式,所以主从复制模式有的优点,哨兵模式也有哨兵模式下,master挂掉可以自动进行切换,系统可用性更高

缺点:

同样也继承了主从模式难以在线扩容的缺点,Redis的容量受限于单机配置需要额外的资源来启动sentinel进程,实现相对复杂一点,同时slave节点作为备份节点不提供服务

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3