• 2.7. 哨兵模式
    • 2.7.1. 哨兵模式设置
      • dnsMonitoringInterval(DNS监控间隔,单位:毫秒)
      • masterName(主服务器的名称)
      • addSentinelAddress(添加哨兵节点地址)
      • readMode(读取操作的负载均衡模式)
      • subscriptionMode(订阅操作的负载均衡模式)
      • loadBalancer(负载均衡算法类的选择)
      • subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)
      • subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)
      • slaveConnectionMinimumIdleSize(从节点最小空闲连接数)
      • slaveConnectionPoolSize(从节点连接池大小)
      • masterConnectionMinimumIdleSize(主节点最小空闲连接数)
      • masterConnectionPoolSize(主节点连接池大小)
      • idleConnectionTimeout(连接空闲超时,单位:毫秒)
      • connectTimeout(连接超时,单位:毫秒)
      • timeout(命令等待超时,单位:毫秒)
      • retryAttempts(命令失败重试次数)
      • retryInterval(命令重试发送时间间隔,单位:毫秒)
      • reconnectionTimeout(重新连接时间间隔,单位:毫秒)
      • failedAttempts(执行失败最大次数)
      • database(数据库编号)
      • password(密码)
      • subscriptionsPerConnection(单个连接最大订阅数量)
      • clientName(客户端名称)
      • sslEnableEndpointIdentification(启用SSL终端识别)
      • sslProvider(SSL实现方式)
      • sslTruststore(SSL信任证书库路径)
      • sslTruststorePassword(SSL信任证书库密码)
      • sslKeystore(SSL钥匙库路径)
      • sslKeystorePassword(SSL钥匙库密码)
    • 2.7.2. 通过JSON、YAML和Spring XML文件配置哨兵模式

    2.7. 哨兵模式

    程序化配置哨兵模式的方法如下:

    1. Config config = new Config();
    2. config.useSentinelServers()
    3. .setMasterName("mymaster")
    4. //可以用"rediss://"来启用SSL连接
    5. .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379")
    6. .addSentinelAddress("127.0.0.1:26319");
    7. RedissonClient redisson = Redisson.create(config);

    2.7.1. 哨兵模式设置

    配置Redis哨兵服务的官方文档在这里。Redisson的哨兵模式的使用方法如下:SentinelServersConfig sentinelConfig = config.useSentinelServers();

    SentinelServersConfig 类的设置参数如下:

    dnsMonitoringInterval(DNS监控间隔,单位:毫秒)

    默认值:5000

    用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。

    masterName(主服务器的名称)

    主服务器的名称是哨兵进程中用来监测主从服务切换情况的。

    addSentinelAddress(添加哨兵节点地址)

    可以通过host:port的格式来指定哨兵节点的地址。多个节点可以一次性批量添加。

    readMode(读取操作的负载均衡模式)

    默认值: SLAVE(只在从服务节点里读取)

    注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。

    设置读取操作选择节点的模式。可用值为:SLAVE - 只在从服务节点里读取。MASTER - 只在主服务节点里读取。MASTER_SLAVE - 在主从服务节点里都可以读取。

    subscriptionMode(订阅操作的负载均衡模式)

    默认值:SLAVE(只在从服务节点里订阅)

    设置订阅操作选择节点的模式。可用值为:SLAVE - 只在从服务节点里订阅。MASTER - 只在主服务节点里订阅。

    loadBalancer(负载均衡算法类的选择)

    默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer

    在使用多个Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法

    subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)

    默认值:1

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)

    默认值:50

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    slaveConnectionMinimumIdleSize(从节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 从服务节点里用于普通操作( 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。

    slaveConnectionPoolSize(从节点连接池大小)

    默认值:64

    多从节点的环境里,每个 从服务节点里用于普通操作( 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    masterConnectionMinimumIdleSize(主节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    masterConnectionPoolSize(主节点连接池大小)

    默认值:64

    主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同任何节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    database(数据库编号)

    默认值:0

    尝试连接的数据库编号。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.7.2. 通过JSON、YAML和Spring XML文件配置哨兵模式

    配置哨兵模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与SentinelServersConfigConfig对象里的字段名称相符。

    1. {
    2. "sentinelServersConfig":{
    3. "idleConnectionTimeout":10000,
    4. "pingTimeout":1000,
    5. "connectTimeout":10000,
    6. "timeout":3000,
    7. "retryAttempts":3,
    8. "retryInterval":1500,
    9. "reconnectionTimeout":3000,
    10. "failedAttempts":3,
    11. "password":null,
    12. "subscriptionsPerConnection":5,
    13. "clientName":null,
    14. "loadBalancer":{
    15. "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
    16. },
    17. "slaveSubscriptionConnectionMinimumIdleSize":1,
    18. "slaveSubscriptionConnectionPoolSize":50,
    19. "slaveConnectionMinimumIdleSize":32,
    20. "slaveConnectionPoolSize":64,
    21. "masterConnectionMinimumIdleSize":32,
    22. "masterConnectionPoolSize":64,
    23. "readMode":"SLAVE",
    24. "sentinelAddresses":[
    25. "redis://127.0.0.1:26379",
    26. "redis://127.0.0.1:26389"
    27. ],
    28. "masterName":"mymaster",
    29. "database":0
    30. },
    31. "threads":0,
    32. "nettyThreads":0,
    33. "codec":{
    34. "class":"org.redisson.codec.JsonJacksonCodec"
    35. },
    36. "transportMode":"NIO"
    37. }

    配置哨兵模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与SentinelServersConfigConfig对象里的字段名称相符。

    1. ---
    2. sentinelServersConfig:
    3. idleConnectionTimeout: 10000
    4. pingTimeout: 1000
    5. connectTimeout: 10000
    6. timeout: 3000
    7. retryAttempts: 3
    8. retryInterval: 1500
    9. reconnectionTimeout: 3000
    10. failedAttempts: 3
    11. password: null
    12. subscriptionsPerConnection: 5
    13. clientName: null
    14. loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
    15. slaveSubscriptionConnectionMinimumIdleSize: 1
    16. slaveSubscriptionConnectionPoolSize: 50
    17. slaveConnectionMinimumIdleSize: 32
    18. slaveConnectionPoolSize: 64
    19. masterConnectionMinimumIdleSize: 32
    20. masterConnectionPoolSize: 64
    21. readMode: "SLAVE"
    22. sentinelAddresses:
    23. - "redis://127.0.0.1:26379"
    24. - "redis://127.0.0.1:26389"
    25. masterName: "mymaster"
    26. database: 0
    27. threads: 0
    28. nettyThreads: 0
    29. codec: !<org.redisson.codec.JsonJacksonCodec> {}
    30. "transportMode":"NIO"

    配置哨兵模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与SentinelServersConfigConfig对象里的字段名称相符。

    1. <redisson:client
    2. id="redisson"
    3. name="redisson1,redisson2"
    4. threads="0"
    5. netty-threads="0"
    6. codec-ref="myCodec"
    7. transport-mode="NIO"
    8. redisson-reference-enabled="true"
    9. codec-provider-ref="myCodecProvider"
    10. resolver-provider-ref="myResolverProvider"
    11. executor-ref="myExecutor"
    12. event-loop-group-ref="myEventLoopGroup"
    13. >
    14. <!--
    15. 这里的name属性和qualifier子元素不能同时使用。
    16. id和name的属性都可以被用来作为qualifier的备选值。
    17. -->
    18. <!--<qualifier value="redisson3"/>-->
    19. <redisson:sentinel-servers
    20. idle-connection-timeout="10000"
    21. ping-timeout="1000"
    22. connect-timeout="10000"
    23. timeout="3000"
    24. retry-attempts="3"
    25. retry-interval="1500"
    26. reconnection-timeout="3000"
    27. failed-attempts="3"
    28. password="do_not_use_if_it_is_not_set"
    29. subscriptions-per-connection="5"
    30. client-name="none"
    31. load-balancer-ref="myLoadBalancer"
    32. subscription-connection-minimum-idle-size="1"
    33. subscription-connection-pool-size="50"
    34. slave-connection-minimum-idle-size="10"
    35. slave-connection-pool-size="64"
    36. master-connection-minimum-idle-size="10"
    37. master-connection-pool-size="64"
    38. read-mode="SLAVE"
    39. subscription-mode="SLAVE"
    40. master-name="myMaster"
    41. database="0"
    42. >
    43. <redisson:sentinel-address value="redis://127.0.0.1:26379" />
    44. <redisson:sentinel-address value="redis://127.0.0.1:26380" />
    45. </redisson:sentinel-servers>
    46. </redisson:client>
    47. <!-- 最基本配置 -->
    48. <redisson:client>
    49. <redisson:sentinel-servers master-name="myMaster">
    50. <redisson:sentinel-address value="redis://127.0.0.1:26379" />
    51. <redisson:sentinel-address value="redis://127.0.0.1:26380" />
    52. ....
    53. </redisson:sentinel-servers>
    54. </redisson:client>