《redis集群sentinel主从复制》笔记

首先了解一下什么Sentinel:http://redisdoc.com/topic/sentinel.html#id2 ,耐着心看一遍,很受用。我也是看了好几遍,然后再结合实例操作验证,回头再看就觉得是那么回事了。

我的Demo案例下载地址:http://download.csdn.net/detail/caiwenfeng_for_23/8696295

下面我简单说一下配置,放在conf目录下:

从上图中可以看出,我配置了4个Sentinel、3个Master、7个Slave,他们之间的对应关系,我想你通过名字也可以猜到了吧。

关系如下:

1个Master分配1个slave,1个Master分配了2个Slave,1个Master分配了4个Slave;4个Sentinel监视3个Master

Master Slave
6379 7379
6380 7380、7381
6381 7382、7383、7384、7385

Sentinel分配的端口为:26379、26380、26381、26382

Master配置:

daemonize yes
pidfile /home/mayi/test/redis/data/redis-master1.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 50mb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

Slave配置文件:

#是否后台运行
daemonize yes
pidfile /home/mayi/test/redis/data/redis-slave1_1.pid
port 7379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slaveof  127.0.0.1 6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
 maxclients  10000
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

Sentinel配置文件:

#学习网址:http://redisdoc.com/topic/sentinel.html#id2
port 26379
daemonize yes
logfile "/home/mayi/test/redis/logs/sentinel.log"

#6379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

#6380
sentinel monitor master_6380 127.0.0.1 6380 4
sentinel down-after-milliseconds master_6380 10000
sentinel failover-timeout master_6380 180000
sentinel parallel-syncs master_6380 5

#6381
sentinel monitor master_6381 127.0.0.1 6381 4
sentinel down-after-milliseconds master_6381 10000
sentinel failover-timeout master_6381 180000
sentinel parallel-syncs master_6381 5

PS:具体可以下载demo案例查看conf目录下的配置文件

然后分别启动Master、Slave、Sentinel 即可。

启动后,可以用redis-cli 连接,输入info命令查看相应信息等。其他操作可以查看http://redisdoc.com/topic/sentinel.html#id2

下面是Jedis操作Sentinel,代码如下:

package com.sondon.mayi.redis.test;

/**
 * @Project : JRedisHello
 * @Package : com.sondon.mayi.redis
 * @Class : RedisClusterTest.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime:2015年5月6日 下午2:33:54
 * @Blog:http://blog.csdn.net/caiwenfeng_for_23
 * @Description : {}
 */

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

/**
 *
 * @Project : JRedisHello
 * @Package : com.sondon.mayi.redis.test
 * @Class : JedisSentinelPoolTest.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime:2015年5月13日 下午5:25:18
 * @Blog:http://blog.csdn.net/caiwenfeng_for_23
 * @Description : {}
 */
public class JedisSentinelPoolTest {

	public static void main(String[] args) {
		Set<String> sentinels = new HashSet<String>();
		sentinels.add(new HostAndPort("127.0.0.1", 26379).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26380).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26381).toString());
		sentinels.add(new HostAndPort("127.0.0.1", 26382).toString());

		JedisSentinelPool master1_sentinelPool = new JedisSentinelPool("mymaster",sentinels);
		JedisSentinelPool master2_sentinelPool=new JedisSentinelPool("master_6380", sentinels);
		JedisSentinelPool master3_sentinelPool=new JedisSentinelPool("master_6381", sentinels);

		System.out.println("Current master1: "+ master1_sentinelPool.getCurrentHostMaster().toString());
		System.out.println("Current master2: "+ master2_sentinelPool.getCurrentHostMaster().toString());
		System.out.println("Current master3: "+ master3_sentinelPool.getCurrentHostMaster().toString());

//		System.out.println("num_active :"+master1_sentinelPool.getNumActive());
//		System.out.println("num_active :"+master2_sentinelPool.getNumActive());
//		System.out.println("num_active :"+master3_sentinelPool.getNumActive());
		System.out.println("isClosed  :"+master1_sentinelPool.isClosed());

		//存
		Jedis master = master1_sentinelPool.getResource();
		master.set("username", "liangzhichao");
		//释放master
		master1_sentinelPool.returnResourceObject(master);

		//取
		Jedis master2 = master1_sentinelPool.getResource();
		String value = master2.get("username");
		System.out.println("username: " + value);
		master2.close();

		master1_sentinelPool.close();
		master2_sentinelPool.close();
		master3_sentinelPool.close();

		master1_sentinelPool.destroy();
		master2_sentinelPool.destroy();
		master3_sentinelPool.destroy();

	}
}

结果显示:

Current master1: 127.0.0.1:6379
Current master2: 127.0.0.1:6380
Current master3: 127.0.0.1:6381
isClosed  :false
username: liangzhichao

PS:先把demo跑起来,再慢慢研究里面的细枝末节。

时间: 2024-10-14 13:26:25

《redis集群sentinel主从复制》笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

《HeadFirst SQL》笔记

规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 事务 13 ACID 14 管理事务 15 常用语句 16 注意 17 规范化 约束 NOT NULL UNIQUE PRIMARY KEY DEFAULT FOREIGN KEY:引用父表的某个唯一值引用完整性:插入外键列的值必须已经存在于父表的来源列中 --创建外键 create table i

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

HeadFirst SQL 读书摘要

数据库都是用 圆柱形表示的. 数据库中包含表 表中包含行和列 行又叫记录record,  列又叫 字段field 创建数据库 create database mypipe_l; 选择数据库 use mypipe_l; 创建表 create table doughnut( name VARCHAR(10), type VARCHAR(6) ); 查看表 desc doughnut; 删除表 drop table doughnut; 插入数据 insert into doughnut (name,