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;
    }
}
原文地址:https://www.cnblogs.com/mutong1228/p/10060482.html