前几天,看到一篇H5房卡斗牛平台,H5房卡斗牛平台租赁,想法说得很好,但是没有建设过程,本文记录了Redis哨兵高av可服务性服务体系构建过程。
根据作者的第四个计划,
1。ReDIS是一个完全开源的、免费的、符合BSD的、高性能的密钥值数据库。
ReDIS和其他关键值缓存产品具有以下三个特征:
Redis支持数据持久性,将内存中的数据保存到磁盘,并在重新启动时再次加载。Redis不仅支持简单的键值数据,还支持列表、集合、zset、散列和其他数据结构。Redis支持数据备份,即主从模式下的数据备份。Redis的优点:
性能非常高——Redis读取110000次/s,写入81000次/s。富数据类型——Redis支持二进制大小写字符串、列表、散列、集和排序集数据类型操作。e.一个操作就是原子性。多个操作也支持由MULTI和EXEC指令包装的事务,即原子性。富特性-Redis也支持诸如发布订阅、通知、密钥过期等特性。RunoOb.com /ReIDIS/ReDIS-ION.HTML
2。ReISS哨兵,ReISIS哨兵的概念,是ReIDS官方推荐的一种高度可用的解决方案。当使用Redis作为主-从高可用性解决方案时,如果主服务器出现故障,Redis本身(包括它的许多客户端)不会在主机和备用之间自动切换,Redis-Sentinel也会这样做。当主人下降时,集群和开关。
ReDIS StaveNele系统用于管理执行以下三个任务的多个ReDIS服务器(实例):
监视:Sentinel不断检查主服务器和从服务器是否正常工作。通知:当被监视的Rdis服务器出现问题时,Sentinel可以通过API向管理员或其他应用程序发送通知。自动故障转移:当主服务器出现问题时无法正常工作,Sentinel启动自动故障转移操作,将故障主服务器的一个辅助服务器升级到新的主服务器,并用复制新的主服务替换故障主服务器的其他辅助服务器。当连接到失败的主服务器时,集群还将新主服务器的地址返回给客户端,允许集群使用新的主服务器而不是失败的服务器。即使用流言协议来接收关于主服务器是否离线的信息,并使用协议协议来决定是否执行自动故障转移。移动并选择哪个服务器是新的主服务器。
一个哨兵进程可以连接到其他几个哨兵进程,每个哨兵进程可以检查彼此的可用性并交换信息。
上面的内容是从http:/rDeDoc .com /Stutial/StaveNel.HTML中提取的。
三。构建ReDIS服务器(Master),我们将遵循上面的架构图,大约三个服务器(防火墙关闭):
10.9.10.154主redis-server redis-.nel10.9.10.152从redis-server redis-.nel10.9.10.215redis-.nel首先从redis.ioreleases下载redis的最新版本。
http
ter-runter$CC Makefile.dep INSTALL redis-sentinel CC redis-cli.o LINK redis-cli CC redis-benchmark.o LINK redis-benchmark INSTALL redis-check-rdb提示:运行make test是个好主意;)INSTALL安装INSTALL安装INSTALL安装INSTALL安装INSTALL安装安装INSTALL安装成功编译,将被redis-4.0.8/src头记录,生成redis-服务器和ReISS哨兵可执行文件。
然后,在主节点(10.9.10.154)上,我们创建具有以下示例配置的redis-4.0.8/redis-master.conf配置文件:
#使用守护进程yes#unprotected模式,外部访问受保护模式no#port 6379#bound ip,本地IP bind 10.9.10.154#学习和开发,使用最大日志级别,可以看到日志信息最多的日志级别调试#指定日志文件路径,没有file要做到这一点,创建日志文件hoMe/ubuntu/Redis/ReDIS-4.0.8/ReIS-Server。Log-x客户端访问,要求PASS 123456需要密码连接,然后启动主机:
Src/redis-server redis-master.config $cat redis-server.config $cat redis-server.log 8517:8517:C 28 Feb 06:06:10:10:38.345####oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 8517:C 28 Feb 06:10:10:10:10:38.345ation loaded 8518:M 28FEB 06:10:10*将打开文件的最大数量增加到10032(最初设置为1024)。8518:2月28日06:10:38.352*运行模式=独立运行,端口=6379.8518:M 6379.8518:M282月28日2月28日2月2282月206:10:10:38.352#警告:511的TCP积压设置511不能强制procproc2月06:10:38.352警告您在内核中启用了透明巨型页面(THP)支持。这将导致Redis的延迟和内存使用问题。要修复此问题,请运行echo.gtsyskernelmm.t_hugepageenabled作为根,并将其添加到etcrc local,以便保留setti。在THP被禁用之后,Redis必须重新启动。8518:M 28 Feb 06:10:38.352*准备接受连接8518:M 28 Feb 06:10:38.352-0(从机),765776字节用于查看Redis的状态:
$redis-cli-h 10.9.10.154-p 6379-a 123456 10.9.10.154:6379gt;INFO复制#复制角色:主连接_从站:0master_replid:0master_replid:7f90fb4ba0c450b184a348f31d9c40b010d master_replid2:0000000000000000000000000000000000000000000000000000_._offset:0_replreplreplreplreplreplrepley:-log-1_activ_replid 1E:0repl_backlog_log_size:01048576 PrimeBeaLogyFixSTyByTeOffOffice:0 RealPosixReLogyStudiLeN:0:10.97.154:6399GT;乒乓添加和获取键值测试:
10. 7.154:637 9GT;集合测试Hello OK 107.10154:637 9GT;获得测试HeleReles是常用命令:
开始服务:服务redis开始停止服务:服务redis停止重新启动服务:如果服务redis x未配置为服务服务,则可以通过以下命令关闭Redis:
设置Redis Server(从机)从节点类似于构建主节点,只是redis-slave.conf配置文件有所不同:
使用守护是无保护模式,保护模式没有从外部网络访问的6379端口绑定IP。本地IP绑定10.9.10.152#指定用于学习和开发的主IP地址和端口从站10.9.10.154 6379#。使用最大日志级别,可以看到最多的日志。日志级别Debug G指定日志文件的路径。如果没有文件,则创建Logfile /home /ubuntu/Redis/ReDIS-4.0.8/ReIS-Server。Log-*设置密码主AUTH 123456以访问主机并启动从机:
Srcredis-服务器redis-从服务器redis-从从.conf$$cat redis-服务器$cat$cat redis-服务器.log 7307.log 7307#7307.#7307.#7307.$cat#737373737307$cat$cat.$cat$2月206$2月20606 06 06 06 06 06 06:11:11:11:11:11:11:11:11:11:11:11:00.11:00.987.987##Redis版本=4 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8,bits=64,commit=00000,.=0:.=0,start=7307,just 7307:just 7307:OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOfiguration加载了7308S 28,2月28日,06:11:00.989*将打开文件的最大数量增加到10032(最初设置为1024)。7308:S2282月28日06:11:00.989*运行模式=独立运行,端口=6379.7308:S26379.7308:S2282月2282月2282月206:06:11:00.990#警告:511的TCP积压设置不能强制proc08:S 28 2月28日06:11:00.990警告您在内核中启用了透明巨页(THP)支持。这将导致Redis的延迟和内存使用问题。要修复此问题,请运行命令echo,永不gt;S/kernelmm.t_hugepageenabled a s根,并将其添加到etc/rc.local,以便保留s。重新启动后重启。在THP被禁用后,必须重新启动Redis。7308:S 28 2月28日06:11.990*准备接受7308:S 28 2月28日连接(从站)06:11:00.990-0,76572月06:00.990-0连接36字节,使用7308:S 28:S 28 2月28日06:11:00.990*连接到MASTER 10.9.15 4:6379 7308:S 28:S 28 2月28日06:11:00.990*-gt;从同步开始7308:S 28 Feb 06:11.990*SYNC的非阻塞连接触发事件.7308:S 28 Feb 06:S 28 Feb 06:S 28:S 28 Feb 06:11:00.991*主机响应PING,复制可以继续7308:S 28 Feb 06:11.993*部分重新同步不可能(没有缓存主机)7308:S 28 Feb 06:S 28:11.993*995×从主:Redis,B929,9FF66F9610687CE95DDFBDECB986:0检查完整的状态:
Redis-cli-h 10.9.10.152-p 6379-a 123456 10.9.10.154:6379gt;INFO复制#复制角色:从属master_host:10.9.10.154master_port:6379master_link_status:up_last_io_seconds_s:10_sync_.:0slave_repl_offset:280ve_.:100:1_connected_read_.:1_slave_read_host:10.9.10。154master_port:6379master_link_status:up_last_io_seconds_master_.:0slave_repl_offset:Es:0master_replid:55b29a9f06ffb89f961087ce95ddfbdeccb986master_replid 2:0000000000000000000000000master_repl_offset:280._repl_offset: -1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_offset:1repl_histlen:280.10.9.152:PONG,但是;然后,我们将检查主服务器的状态(更新._slaves的信息):
$redis-cli-h 10.9.10.154-p 6379-a 123456 10.9.10.154:6379gt;INFO复制#复制角色:主._slaves:1000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000百万亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿万万00 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000Master_repl_offset:28._repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28此外,可以通过向主服务器添加密钥和值来测试,然后获得v_backlog_active_size:1048576 repl_backlog_first_byte_offset:28。出售相应的密钥。
5。构建Redis Sentinel,然后在三个服务器上配置Redis Sentinel,创建redis-4.0.8/.nel-my.conf配置文件、示例配置(请记住更改不同的绑定ip):
端口26379绑定10.9.10.154守护进程是是日志文件home%ubuntu/redis/redis-4.0.8redis-.nel.log哨兵监视器管理器1 10.9.10.154 6379 2哨兵身份验证管理器1 123456yncs ManagER1 1 1被配置为一组四行,因为我们只有一个主节点,所以只有一个主节点可以被配置为配置多个主节点,而不配置从节点信息,因为可以自动检测从节点(主节点将具有关于从节点的消息)
第一行配置指示Sentinel监视名为manager 1的主服务器,该服务器的IP地址为10.9.10.154,端口号为6379,并且要求至少两个Sentinel同意失败(只要Sentinel的数量没有达到标准,自动故障转移就不会成功)。进行)。
其他选项的基本格式如下:
哨兵lt;选项的名称是gt;lt;主服务器的名称是gt;lt;选项的值是gt;选项描述:
Auth-pass:选项指定主连接的密码。Down-.-.seconds:选项指定Sentinel要求服务器断开连接的毫秒。Failover-timeout:如果故障转移操作在该时间(ms)内没有完成,则考虑故障转移a..Parallel-syncs:该选项指定在执行故障转移时最多可以有多少从服务器与新主服务器同步,并且数量越小,完成故障转移所需的时间越长。接下来,启动Redis Sentinel(默认端口26379):
$src/redis-server sentinel-my.conf--sentinelor $src/redis-sentinel-my.conf -- sentinelor or $src/redis-sentinel-my.conf $cat redis-sentinel.log 5716:X 28 Feb 03:04:04:17.407## # # # # # # # # # OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo 57OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOjust启动5716:X 28 Feb 03:04:04:04:04:17.407#Configuration加载5716:X 28 Feb 03:04:04:04:04:17.408*将打开文件的最大数量增加到10032(最初设置为1024)。```````````````````````-u.-``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````-...-` __...-.``-._` _.- Port: 26379 `-._ `._ / _.- PID: 5716 `-._ `-._ `-./ _.- _.- `-._`-._ `-.__.- _.-_.- `-._`-._ _.-_.- http://redis.io `-._ `-._`-.__.-_.- _.- `-._`-._ `-.__.- _.-_.- `-._`-._ _.-_.- `-._ `-._`-.__.-_.- _.- `-._ `-.__.- _.- `-._ _.- `-.__.- 5716:X 28 Feb 03:04:17.410 # WA511的TCP积压设置无法强制执行,因为procprocsys/procsys/net
et
et核心/somaxaxaxaxaxaxaxconn/proc
et
et
et
et
et
et
et当服务器启动ReISS哨兵时,有这样的日志(RADIS哨兵互相通信):
5716:x28 Feb 03:18:46.404#倾斜模式退出5716:X 28 Feb 03:19:43.959*+哨兵55ebce153ac69c908800 bc14 beff24725fc5a721 10.9.10.152 [email protected] 1 10.9.10.154 6379连接测试(测试三个服务器):
Redis-Redis-cli-10.9.10.154-p 26379 10.9.10.10.154-p 26379 10.9.10.10.154-p 26379 10.10.10.10.154-p 26379 10.10.10.10.154-p 26379 10.9 10.10.10.154-p 26379 10.10.10.10.154-2679gt;乒乒乓$redirediredis$redis$redis-redis-cli-redi-cli-重定-cli-cli-cli-10.10.10.9-10.9.9.10.10.10.10.10.152-10.152-p 26379-10.10.10.10 s:
PING-此命令仅返回PONE.SENTINEL主机-显示监视主机的列表及其状态。SENTINEL主机{主机名}显示指定主机的状态和信息。SENTINEL从机{主机名}显示从机列表及其发送的主机状态。inels{master name}-显示主控的哨兵实例及其状态的列表。SENTINEL get-master-addr-by-name{master name}-返回IP和主控的端口。如果故障转移被处理或成功终止,则返回提升从属的IP和端口。SENTINEL复位{.}-this命令将重置所有匹配的主机名。参数是blog样式。重置过程清空主机的所有状态,并移除已经找到并与主机关联的所有从属和哨兵。SENTINEL故障转移{主机名}-如果无法访问主机,则执行fai未经其他Sentinels同意的情人。SENTINEL ckquorum{主名称}-检查当前Sentinel配置是否能够达到故障转移所需的仲裁,并且需要大多数故障转移授权。此命令应该用于监视系统以检查是否展开。yment是正确的。SENTINEL刷新配置-强制Sentinel重写磁盘上的配置,包括当前的Sentinel状态。一般来说,每次重写配置时,Sentinel都会改变其状态。但是,有时,配置文件可能由于操作错误而丢失,硬盘失败ures、包升级脚本或配置管理器。在这种情况下,接收到强制性Sentinel重写配置文件。即使上面的配置文件完全丢失,也可以使用此命令。Read哨兵故障测试我们的计划是停止大师的ReISIS服务,看看Read哨兵是如何工作的。
首先,让我们看看当前的主节点信息(记住IP):
$redis-cli-h 10.9.10.154-p 6379 10.9.10.154:26379gt;SENTINEL get-master-addr by-name manager 1 1)10.9.10.154 2)6379并执行以下命令(强制Redis Server睡眠120秒):
ReDIS-CY-H 107.10154-P 637 9A A 123456调试休眠120,然后我们查看主节点信息:
$redis-cli-h 10.9.10.154-p 6379 10.9.10.154:26379gt;SENTINEL get-master-addr-by-name manager 1)10.9.10.152)6379发现IP已成为前一个盐节点,即,10.9.10.152已成为主节点,然后查看当前主信息:
$redis-cli-cli-10.9.10.10.10.10.152-p 6379-p 6379-a 12345616110.9.9.10.10.10.10.10.10.10.152-p634579-a 123456 10.10.10.10.10.10.10.10.152-p 6379-p 6379-p63797979797979a 1234561456 10.10.10.9.10.10.10.10.10.10.10.10.10.10.10.10.10.10.152-p 6379-p 6379-p 6379-p 6379-p 6379-p 6379-p63797979797979797979797979797979a 12345a 123451 12345b033 de604be41707070707070707070707070707070707070707070707070707b2727b27b52bcc2981_master_master_replc2981_repl replreplreplreplreplf1d4b24c9499c4a master_repl_offset:12707070707070707070707070707070707070707070707070707b277b27272727b2727b2727b27b27b27b2727b2727b27b27b22b主repl_offset:1270535._repl_offset:1208143repl_backlog_active:1repl_backlog_size:1repl_backlog_size:1048576replEN:1048 57 6SLave0:IP=10. 9·10154,端口=6379表示先前的主机已经变为SOLVE。
在整个过程中,我们可以查看Read哨兵的日志:
20153:X 20153:2010年2月28日2月28日0909:13:13:51.023##############eeee228282828282828120151:3:28:2829:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:13:52.102#####新经理1#+新经理经理1#+新经理1#+新经理1 1 1 1 1 20151 1 1 1 1 1 1 1 1 1 1 1 20153 20153 20153 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 20153 1 20153 1 1 1 1 20153法定人数2 1 1 20153 1 1 1 20153 1 1 1 1 20153法定人数21 1 1 1 1 1 1 [email protected] [email protected] 10.154 6379:X 1 10.154 6379:X2010年2月28日09:[email protected] [email protected] 10.10.9.154 6379:10.154 6379:X 10.154 637676767676767676764:X2月28日0909:13.365.6516161616167*开关-19-19.19.154161616161616161616161616161616161616161616161616161616161616161515151515151515151515151515151515151579。
每个Sentinel发现主节点已关闭,并具有+sdown事件,稍后将其升级到+odown,这意味着大多数Sentinel已经同意主节点不可访问。Sentinel开始投票让Sentinel启动,并尝试故障转移故障转移。此外,请注意,Redis Sentinel不是提供外部服务的地址,它只是管理Redis主备用交换的监视工具,因此外部客户端提供的地址仍然是Redis Server的地址(当然,包括Salve,也可以提供统一的地址)。访问类似负载平衡(SLB)或虚拟IP(虚拟IP,VIP)。
原文地址:https://www.cnblogs.com/h5qipaiyuanma/p/9780345.html