0
点赞
收藏
分享

微信扫一扫

macos 10.12配置redis3.2.10伪集群

静鸡鸡的JC 2021-09-28 阅读 29
  • redis的官方文档是有些问题的,它里面介绍的也是伪集群的方式,也就是一台机器上开6个redis实例构成集群。按照官方的说明,最少配置只需要下面这些,在真正的集群方案(一台机器一个redis实例)中是没问题的,但是如果是同一台机器,只配置这些,有些配置是冲突的。
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
  • 介绍一下我自己的目录结构,redis-3.2.10是源码包,single文件夹是平时使用的一个实例的相关文件的目录,cluster是这次新增的目录



  • 我的配置,和默认的redis.conf相比,需要改这些

#没什么说的,每个实例的服务端口肯定不同
port 6381 
# 后台运行,开启后台运行后会使用上面的pidfile文件
daemonize yes
# 每个实例要有自己的pid文件
pidfile /var/run/redis_6381.pid 
# 默认是"",这样的话当appendonly yes的时候,日志会打到/dev/null中
# 也就是日志被吞了,还是打印日志让人放心
logfile "/usr/local/redis/cluster/6381/redis6381.log" 
# 默认16个库,没什么意义,redis-cluster不支持换库
databases 1
# rdb文件名
dbfilename dump6381.rdb
# 存放rdb和aof的文件,默认是./
# 也就是在哪启动实例,就把rdb和aof文件放在哪,这太恶心了
dir /usr/local/redis/cluster/6381
# 开启aof,集群的话必须开启
appendonly yes
# aof文件名
appendfilename "appendonly6381.aof"
# 默认是被注释掉的
cluster-enabled yes
# 默认是被注释掉的,这个文件不需要自己操作,redis自动操作这个文件
cluster-config-file nodes-6381.conf
# 默认是被注释掉的
cluster-node-timeout 15000
  • 然后把6个实例都启动,执行redis-3.2.10/src/redis-trib.rb这个redis自带的ruby脚本。--replicas 1 代表每个master一个slave
    sudo redis-trib.rb create --replicas 1 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386
  • 启动后会给出一个方案,哪三个是master,哪三个是slave,接受的话输入yes集群就创建成功了
  • redis-3.2.10/utils/create-cluster/create-cluster的这个脚本可以用来参考,写一个自己的启动、关闭集群的脚本
  • redis-trib.rb这个脚本只负责创建维护集群,不负责启动和关闭集群的redis实例,所有每次创建集群都需要开启6个实例,每次关闭集群都要关闭6个实例,很麻烦

Tips

  • redis-cluster在spring中的配置
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <!--新版是maxTotal,旧版是maxActive,最大连接数-->
    <property name="maxTotal" value="30"/>
    <!-- 最大空闲连接数-->
    <property name="maxIdle" value="10"/>
    <!-- 每次释放链接的最大数目-->
    <property name="numTestsPerEvictionRun" value="1024"/>
    <!-- 释放链接的扫描间隔毫秒-->
    <property name="timeBetweenEvictionRunsMillis" value="30000"/>
    <!-- 连接最小空闲时间-->
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
    <!-- 连接空闲多久后释放,当空闲时间大于该值且空闲连接大于最大空闲连接数时释放-->
    <property name="softMinEvictableIdleTimeMillis" value="10000"/>
    <!-- 获取连接的最大等待毫秒,小于零:阻塞不确定的时间,默认-1-->
    <property name="maxWaitMillis" value="1500"/>
    <!-- 获取连接时检查有效性,默认false-->
    <property name="testOnBorrow" value="true"/>
    <!-- 空闲时检查有效性,默认false-->
    <property name="testWhileIdle" value="true"/>
    <!-- 连接耗尽时是否阻塞,false报异常,true阻塞直到超时,默认true-->
    <property name="blockWhenExhausted" value="false"/>
</bean>

<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster" destroy-method="close">
    <constructor-arg name="jedisClusterNode">
        <set>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6381"/>
            </bean>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6382"/>
            </bean>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6383"/>
            </bean>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6384"/>
            </bean>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6385"/>
            </bean>
            <bean class="redis.clients.jedis.HostAndPort">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6386"/>
            </bean>
        </set>
    </constructor-arg>
    <constructor-arg name="timeout" value="2000"/>
    <constructor-arg name="maxAttempts" value="100"/>
    <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>
  • redis3版本之前可以用jedis提供的分片客户端功能,spring配置
<bean id="sharedJedisPool" class="redis.clients.jedis.ShardedJedisPool" destroy-method="close">
    <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
    <constructor-arg name="shards">
        <list>
            <bean class="redis.clients.jedis.JedisShardInfo">
                <constructor-arg name="host" value="127.0.0.1"/>
                <constructor-arg name="port" value="6379"/>
            </bean>
        </list>
    </constructor-arg>
</bean>
  • 平时自己开发用,可以使用单实例redis的配置
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
        <constructor-arg name="host" value="localhost"/>
        <constructor-arg name="port" value="6379"/>
    </bean>
举报

相关推荐

0 条评论