zoukankan      html  css  js  c++  java
  • redis集群搭建及连接(阿里云)

    阿里云上面装redis集群基本被虐死,主要问题就是私有IP和公有IP。

    下面分享成功搭建的步骤:

    两台测试服务器,分别为:127.0.0.1,127.0.0.2.每分服务器有3个节点。

    1.127.0.0.1 创建节点

    在目录/opt/redis-4.0.2 mkdir cluster

    mkdir 6370 6371 6372

    2.修改redis.conf

    bind 0.0.0.0改为#bind 0.0.0.0

    dir ./ 改为dir /opt/redis-4.0.2/cluster/data

    daemonize yes //redis后台运行
    cluster-enabled yes //开启集群 把注释#去掉
    appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
    protected-mode no //(需要不同服务器的节点连通,这个就要设置为 no)

    #bind 127.0.0.1 此行一定要注释掉 不然用公有IP创建集群会失败

    做集群的时候以下两行一定要注释掉

    # unixsocket /tmp/redis.sock
    # unixsocketperm 700

    复制配置文件

    cp /opt/redis-4.0.2/redis.conf ./redis_cluster/6370/
    cp /opt/redis-4.0.2/redis.conf ./redis_cluster/6371/
    cp /opt/redis-4.0.2/redis.conf ./redis_cluster/6372/

    # 根据不同端口需要设置的地方
    port 6370
    logfile /opt/redis-4.0.2/logs/redis_6370.log
    dbfilename dump_6370.rdb
    appendfilename "appendonly_6370.aof"
    cluster-config-file nodes_6370.conf //集群的配置

    第二个就可以使用命令整体替换

    :%s/6370/6371/g

    3.启动

    ./redis-server /opt/redis-4.0.2/cluster/6370/redis.conf &
    ./redis-server /opt/redis-4.0.2/cluster/6371/redis.conf &
    ./redis-server /opt/redis-4.0.2/cluster/6372/redis.conf &

    4.127.0.0.2和127.0.0.1创建除端口之外都相同

     ps -ef | grep redis   #查看是否启动成功

     netstat -tnlp | grep redis #可以看到redis监听端口

    5.创建集群

    安装rubygems

    yum install rubygems
    
    [root@insure src]# gem install redis -v 3.3.3
    Fetching: redis-3.3.3.gem (100%)
    Successfully installed redis-3.3.3
    Parsing documentation for redis-3.3.3
    Installing ri documentation for redis-3.3.3
    1 gem installed

    ----------集群创建------------------

    创建集群 一定要用公有IP,或者jediscluster程序连接会报超时

    执行./redis-trib.rb  create  --replicas  1  *.16.120.*:6370 *.16.120.*:6371 *.16.120.*:6372 *.16.120.*:6373  *.16.120.*:6374  *.16.120.*:6375

    测试连接

    可以在*.*.*.189 连接看一下:

    ./redis-cli -h *.*.*.190 -p 6373

    关键点:

    redis.conf  中requirepass 设置密码

    find / -name client.rb 

    /usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.3/lib/redis 修改client.rb password改成设置的密码

    :host => "172.16.*.*",  #改成公有IP
    :port => 6373,
    :path => nil,
    :timeout => 5.0,
    :password => '******',

    主从如果连接不成功

    masterauth 设置你的密码

    集群
    cluster info :打印集群的信息
    cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。

    java代码

    1. 引用文件

    <!-- 添加jedis客户端 -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>

    2. 配置文件

    spring.redis.cluster.nodes=101.*.8.8:6370,101.*.8.8:6371,101.*.8.8:6372,101.*.8.8:6373,101.*.8.8:6374,101.*.8.8:6375
    spring.redis.cluster.max-redirects=8
    spring.redis.password=P11111111111
    spring.redis.connection_timeout=2000
    spring.redis.timeout=2000
    spring.redis.jedis.pool.max-total=300
    spring.redis.jedis.pool.max-wait=-1
    spring.redis.jedis.pool.max-idle=100
    spring.redis.jedis.pool.min-idle=30

    3.代码

    @Configuration
    @EnableCaching
    public class RedisClusterConfiguration extends CachingConfigurerSupport {
        private static Logger logger = LoggerFactory.getLogger(RedisClusterConfiguration.class);
    
        @Value("${spring.redis.cluster.nodes}")
        private String clusterNodes;
    
        @Value("${spring.redis.connection_timeout}")
        private int connectionTimeout;
    
        @Value("${spring.redis.timeout}")
        private int timeout;
    
        @Value("${spring.redis.jedis.pool.max-idle}")
        private int maxIdle;
    
        @Value("${spring.redis.jedis.pool.min-idle}")
        private int minIdle;
    
        @Value("${spring.redis.jedis.pool.max-wait}")
        private long maxWaitMillis;
    
        @Value("${spring.redis.password}")
        private String password;
    
        @Value("${spring.redis.jedis.pool.max-total}")
        private int maxTotal;
    
        @Value("${redis.max_attempts:10}")
        private int maxAttempts;
    
        @Bean
        public JedisCluster redisPoolFactory() {
            String [] serverArray = clusterNodes.split(",");
    
            Set<HostAndPort> nodes = new HashSet<HostAndPort>();
            for (String ipPort:serverArray){
                String [] ipPortPair=ipPort.split(":");
                nodes.add(new HostAndPort(ipPortPair[0].trim(),Integer.valueOf(ipPortPair[1].trim())));
    
            }
            //创建config
            GenericObjectPoolConfig pool = new GenericObjectPoolConfig();
            pool.setMaxTotal(maxTotal);
            pool.setMinIdle(minIdle);
            pool.setMaxIdle(maxIdle);
            pool.setMaxWaitMillis(maxWaitMillis);
            //通过config创建集群实例
            JedisCluster jedisCluster =
                    new JedisCluster(nodes, connectionTimeout, timeout, maxAttempts, password, pool);
            logger.info("JedisPool注入成功");
            jedisCluster.set("sys","testredis");
            String str = jedisCluster.get("sys");
            logger.info("获取redis里面的值:" + str);
            return jedisCluster;
        }
    }
  • 相关阅读:
    java,时间转时间戳的转换以及各种date格式的转化
    HTML 表单提交 的简单代码
    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
    获取json中字段,判断是否有想要的key
    mybatis复习
    Spring整合Struts2 注解版
    Spring整合Struts2 XML版
    struts2
    Struts2入门
    存储过程
  • 原文地址:https://www.cnblogs.com/mutong1228/p/10060482.html
Copyright © 2011-2022 走看看