1.集群环境
1.Linux服务器列表 使用4台CentOS Linux服务器搭建环境,其IP地址如下: 192.168.110.100 192.168.110.101 192.168.110.102 192.168.110.1032.Redis服务部署环境 192.168.110.100 启动多个Redis sentinel服务,构成Redis sentinel集群 192.168.110.101 启动Redis服务,设置成主节点 192.168.110.102 启动Redis服务,设置成192.168.110.101的从节点 192.168.110.103 启动Redis服务,设置成192.168.110.101的从节点 回到顶部
注意:两台从节点都要改。 2.启动Redis主从集群 先启动192.168.110.101主节点,使用默认配置,脚本: [lizhiwei@localhost bin]$ ./redis-server
再启动192.168.110.102和192.168.110.103从节点,使用刚才的配置,脚本: ./redis-server redis.conf
3.查看集群 192.168.110.101主节点Replication信息 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication # Replication role:master connected_slaves:2 slave0:ip=192.168.110.102,port=6379,state=online,offset=659,lag=1 slave1:ip=192.168.110.103,port=6379,state=online,offset=659,lag=0 master_repl_offset:659 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:658
192.168.110.102从节点Replication信息 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replication role:slave master_host:192.168.110.101 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:701 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
192.168.110.103从节点Replication信息 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication # Replication role:slave master_host:192.168.110.101 master_port:6379 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:715 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
此时,存储到192.168.110.101主节点的数据,在从节点中都可以查询到。从节点会备份主节点的数据。
配置文件说明: 1. port :当前Sentinel服务运行的端口 2. dir : Sentinel服务运行时使用的临时文件夹 3.sentinel monitor master001 192.168.110.101 6379 2:Sentinel去监视一个名为master001的主redis实例,这个主实例的IP地址为本机地址 192.168.110.101,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行 4.sentinel down-after-milliseconds master001 30000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行 5.sentinel parallel-syncs master001 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长 6.sentinel failover-timeout master001 180000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败 7.sentinel notification-script <master-name> <script-path>:指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用 2.启动sentinel集群 创建3个sentinel.conf配置文件:sentinel001.conf、sentinel002.conf、sentinel003.conf并修改端口号分别为:26379、36379、46379,并启动服务: ./redis-sentinel sentinel001.conf ./redis-sentinel sentinel002.conf ./redis-sentinel sentinel003.conf
启动三个sentinel服务后会在其控制台看到如下信息: ./redis-sentinel sentinel001.conf,端口:26379 [7743] 01 Oct 06:20:38.162 # Sentinel runid is ba6c42e1accc31290e11d5876275e1562564295d [7743] 01 Oct 06:20:38.162 # +monitor master master001 192.168.110.101 6379 quorum 2 [7743] 01 Oct 06:20:39.110 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379 [7743] 01 Oct 06:20:39.111 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379 [7743] 01 Oct 06:25:07.595 * +sentinel sentinel 192.168.110.100:36379 192.168.110.100 36379 @ master001 192.168.110.101 6379 [7743] 01 Oct 06:26:11.170 * +sentinel sentinel 192.168.110.100:46379 192.168.110.100 46379 @ master001 192.168.110.101 6379
./redis-sentinel sentinel002.conf,端口:36379 [7795] 01 Oct 06:25:05.538 # Sentinel runid is 52c14768b15837fb601b26328acf150c6bd30682 [7795] 01 Oct 06:25:05.538 # +monitor master master001 192.168.110.101 6379 quorum 2 [7795] 01 Oct 06:25:06.505 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379 [7795] 01 Oct 06:25:06.515 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379 [7795] 01 Oct 06:25:07.557 * +sentinel sentinel 192.168.110.100:26379 192.168.110.100 26379 @ master001 192.168.110.101 6379 [7795] 01 Oct 06:26:11.168 * +sentinel sentinel 192.168.110.100:46379 192.168.110.100 46379 @ master001 192.168.110.101 6379
./redis-sentinel sentinel003.conf,端口:46379 [7828] 01 Oct 06:26:09.076 # Sentinel runid is c8509594be4a36660b2122b3b81f4f74060c9b04 [7828] 01 Oct 06:26:09.076 # +monitor master master001 192.168.110.101 6379 quorum 2 [7828] 01 Oct 06:26:10.063 * +slave slave 192.168.110.102:6379 192.168.110.102 6379 @ master001 192.168.110.101 6379 [7828] 01 Oct 06:26:10.071 * +slave slave 192.168.110.103:6379 192.168.110.103 6379 @ master001 192.168.110.101 6379 [7828] 01 Oct 06:26:11.516 * +sentinel sentinel 192.168.110.100:26379 192.168.110.100 26379 @ master001 192.168.110.101 6379 [7828] 01 Oct 06:26:11.674 * +sentinel sentinel 192.168.110.100:36379 192.168.110.100 36379 @ master001 192.168.110.101 6379
每个sentinel服务能知道其他所有的服务!
发现192.168.110.101Redis主节点已经不能连接, 192.168.110.103成了主节点! 2.再启动192.168.110.101主节点 再启动192.168.110.101Redis主节点后,在查看Replication信息如下: ### 启动脚本,仍然使用默认配置 [lizhiwei@localhost bin]$ ./redis-server [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication # Replication role:slave master_host:192.168.110.103 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:57657 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replication role:slave master_host:192.168.110.103 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:60751 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication # Replication role:master connected_slaves:2 slave0:ip=192.168.110.102,port=6379,state=online,offset=63247,lag=1 slave1:ip=192.168.110.101,port=6379,state=online,offset=63247,lag=1 master_repl_offset:63393 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:63392 [lizhiwei@localhost bin]$
发现 192.168.110.101节点启动后还再集群中,只不过成了从节点,192.168.110.103仍然是主节点,但是现在又有两个从节点了! 3.只留下一个sentinel服务,再停止192.168.110.103主节点,查看Redis集群是否出现新的主节点 停止sentinel服务,只留下一个sentinel服务,再停止Redis主节点,查看Replication信息如下: [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.101 info Replication # Replication role:slave master_host:192.168.110.103 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:184231 master_link_down_since_seconds:43 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication # Replication role:slave master_host:192.168.110.103 master_port:6379 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_repl_offset:184231 master_link_down_since_seconds:52 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 [lizhiwei@localhost bin]$ ./redis-cli -h 192.168.110.103 info Replication Could not connect to Redis at 192.168.110.103:6379: Connection refused
发现 192.168.110.103主节点已经不能连接了,也不存在Redis主节点,集群中无主节点了!!!分析原因是:sentinel.conf配置的sentinel monitor master001 192.168.110.101 6379 2最后一个参数是2导致,若是但节点此配置的最后一个参数要使用是1。(此原因我已证实) 注意:在生产环境下建议sentinel节点的数量能在3个以上,并且最好不要在同一台机器上(使用同一网卡)。 ------------------------------------------------------------------------------------------------------------------------------- 转自:http://www.cnblogs.com/LiZhiW/p/4851631.html
转载于:https://www.cnblogs.com/kms1989/p/6019176.html