目录


mac-cache - 配置

监控中心的配置

  缓存的监控中心负责向所有缓存客户端提供缓存配置信息,所有缓存客户端在启动时需要调用它提供的cacheCatalog服务:conf/provide.xml <service group="cache" name="cacheCatalog" ref="cacheMonitor" interface="com.boarsoft.cache.config.CacheCatalog" version="1.0.0"> </service>   缓存的监控中心负责监控缓存DB的缓存分片中的各缓存节点,当某个缓存节点不可用时,及时通知所有相关客户端进行进行主备切换。因此它需要引用缓存客户端提供cacheClient服务来协调各缓存客户端分片进行主备切换。conf/consume.xml <reference id="cacheClient" group="cache" name="cacheClient" interface="com.boarsoft.cache.CacheClient" version="1.0.0" timeout="300000"> <method name="switch2" type="SB" timeout="1200"> <arg index="0" type="java.lang.String" /> <arg index="1" type="int" /> <arg index="2" type="com.boarsoft.cache.config.CacheNode" /> <arg index="3" type="com.boarsoft.cache.config.CacheNode" /> </method> <method name="getDbMap" type="SB" timeout="1200"> </method> </reference>   在缓存监控中心的 caches.xml 配置所有缓存DB及其下分片和节点的信息:caches.xml <!-- Redis缓存节点 --> <bean id="redis1n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6379" /> </bean> <bean id="redis2n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6380" /> </bean> <bean id="redis3n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6381" /> </bean> <bean id="redis4n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6382" /> </bean> <!-- 客户端所需的缓存连接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="minIdle" value="50" /> <property name="maxIdle" value="100" /> <property name="maxTotal" value="500" /> </bean> <!-- 缓存监控需要通过Agent来执行Shell以操控Redis缓存节点 --> <bean id="redisNodeAgent" class="com.boarsoft.boar.redis.RedisNodeAgentImpl"> <property name="path" value="/home/app/shells/redis" /> </bean> <bean id="cacheMonitor" class="com.boarsoft.cache.monitor.CacheMonitorImpl"> <property name="threadPool" ref="threadPool" /> <!-- 配置缓存各客户端与缓存DB的关系,以便当缓存DB宕机时,通知相应的客户端 --> <property name="cacheClientMap"> <map> <entry key="userDb"> <set> <ref bean="cacheClient" /> </set> </entry> </map> </property> <!-- 所有的缓存DB配置,缓存客户端依赖在启动时会通过RPC远程获取它需要的缓存DB配置 --> <property name="dbMap"> <map> <entry key="userDb"> <bean class="com.boarsoft.cache.redis.MyJedisDb"> <property name="shards"> <list> <bean class="com.boarsoft.cache.redis.MyJedisShard"> <!-- 0: COLD, 1: WARM, 2: SLAVE --> <property name="standby" value="2" /> <property name="master"> <bean class="com.boarsoft.cache.redis.MyJedisNode" init-method="open"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_0_0" /> <property name="jedisShardInfo" ref="redis1n" /> </bean> </property> <property name="backups"> <list> <bean class="com.boarsoft.cache.redis.MyJedisNode"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_0_1" /> <property name="jedisShardInfo" ref="redis3n" /> </bean> </list> </property> </bean> <bean class="com.boarsoft.cache.redis.MyJedisShard"> <!-- 0: COLD, 1: WARM, 2: SLAVE --> <property name="standby" value="2" /> <property name="master"> <bean class="com.boarsoft.cache.redis.MyJedisNode" init-method="open"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_1_0" /> <property name="jedisShardInfo" ref="redis2n" /> </bean> </property> <property name="backups"> <list> <bean class="com.boarsoft.cache.redis.MyJedisNode"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_1_1" /> <property name="jedisShardInfo" ref="redis4n" /> </bean> </list> </property> </bean> </list> </property> </bean> </entry> </map> </property> </bean>

hash分片

  当一个缓存DB下有不止一个分片时,将按缓存key计算hash值,以确定要读写哪一个分片。

主备或主从配置

  一个分片只能有一个主节点,0~N个备用节点(backups列表),备用节点与主节点之间的关系由分片配置中的standby属性决定。
  1. STANDBY_COLD,备用节点未启动
  2. STANDBY_WARM,备用节点运行中,但未装载数据
  3. STANDBY_SLAVE,备用节点以从节点方式运行并同步着数据

客户端配置

  客户端通过配置dbMap属性来配置要引用的缓存DB   客户端的 caches.xml <bean id="redisClient" class="com.boarsoft.cache.redis.SimpleRedisClientImpl"> <property name="mapping"> <bean init-method="init" class="com.boarsoft.cache.config.CacheMapping"> <property name="defaultDbName" value="userDb" /> <!-- 创建并映射分组到缓存DB --> <property name="groupMap"> <map> <entry key="default" value="userDb" /> <!-- <entry key="conf" value="confDb" /> --> </map> </property> </bean> </property> <!-- 配置要引用的缓存DB --> <property name="dbMap"> <map> <entry key="userDb"> <bean class="com.boarsoft.cache.redis.MyJedisDb"> </bean> </entry> </map> </property> </bean> <bean id="redisCache" class="com.boarsoft.cache.redis.SimpleRedisCacheImpl"> <property name="redisClient" ref="redisClient" /> </bean>   客户端需要引用缓存监控提供的cacheCatalog服务以获到缓存配置: consume.xml <reference id="cacheCatalog" group="cache" name="cacheCatalog" interface="com.boarsoft.cache.config.CacheCatalog" version="1.0.0" timeout="3000"> </reference>   客户端还需要暴露cacheClient服务,以便缓存监控调用: provide.xml <service group="cache" name="cacheClient" ref="redisClient" interface="com.boarsoft.cache.CacheClient" version="1.0.0"> </service>

按group分库

  客户端通过配置mapping属性可以建立缓存分组与缓存DB之间的映射关系。

agent配置

  缓存监控依赖AgentX提供的服务来操控缓存节点:consume.xml <reference id="agentService" group="agent" name="agentX" interface="com.boarsoft.agent.AgentService" version="1.0.0" timeout="6000"> </reference>