Redis 集群,官方方案需要6個(gè)節(jié)點(diǎn),3個(gè)主3個(gè)從。
- 安裝依賴軟件
安裝:ruby
yum -y install ruby
安裝:rubygems-2.7.4.tgz
https://rubygems.org/rubygems/rubygems-2.7.4.tgz
tar -xzvf rubygems-2.7.4.tgz
cd rubygems-2.7.4
ruby setup.rb
安裝:redis-4.0.1.gem
https://rubygems.org/downloads/redis-4.0.1.gem
gem install -l ./redis-4.0.1.gem
- 安裝redis
安裝:redis
http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -xzvf redis-4.0.6.tar.gz
cd redis-4.0.6
make
- 集群配置
cd redis-4.0.6
mkdir -p clus/6401 clus/6402 clus/6403 clus/6404 clus/6405 clus/6406
cp redis.conf clus/6401 其它目錄個(gè)一份配置文件
vi clus/6401/redis.conf
daemonize yes
port 6401
bind 127.0.0.1
cluster-enabled yes
cluster-config-file /opt/redis-4.0.6/clus/6401/nodes-6401.conf
cluster-node-timeout 5000
slave-serve-stale-data yes
dir /opt/redis-4.0.6/clus/6401/
dbfilename dump.rdb
appendonly yes
appendfilename "appendonly.aof"
其它幾個(gè)端口的配置文件,參照以上替換6401為6402...6406的端口即可
- 創(chuàng)建集群
啟動(dòng)節(jié)點(diǎn):節(jié)點(diǎn)需要加入進(jìn)去,必須先啟動(dòng)
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6401/redis.conf
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6402/redis.conf
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6403/redis.conf
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6404/redis.conf
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6405/redis.conf
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/clus/6406/redis.conf
創(chuàng)建集群:集群只需創(chuàng)建一次,以后只需啟動(dòng)節(jié)點(diǎn)即可。正常情況,執(zhí)行以下命令后,會(huì)提示集群創(chuàng)建的結(jié)果,其中包含三個(gè)master和三個(gè)slave節(jié)點(diǎn)。
/opt/redis-4.0.6/src/redis-trib.rb create --replicas 1 127.0.0.1:6401 127.0.0.1:6402 127.0.0.1:6403 127.0.0.1:6404 127.0.0.1:6405 127.0.0.1:6406
- 集群測(cè)試
連接其中一臺(tái)redis,要帶 -c 參數(shù),進(jìn)行設(shè)置值,再連接另外任意節(jié)點(diǎn)進(jìn)行查看,測(cè)試成功,連接命令:
/opt/redis-4.0.6/src/redis-cli -c -p 6401
- JAVA連接集群
maven配置依賴:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
客戶端代碼:
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100000);
config.setMaxIdle(5);
config.setMaxWaitMillis(1000 * 100);
config.setTestOnBorrow(true);
// 定義集群信息
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo("127.0.0.1", 6401));
shards.add(new JedisShardInfo("127.0.0.1", 6402));
shards.add(new JedisShardInfo("127.0.0.1", 6403));
shards.add(new JedisShardInfo("127.0.0.1", 6404));
shards.add(new JedisShardInfo("127.0.0.1", 6405));
shards.add(new JedisShardInfo("127.0.0.1", 6406));
// 定義集群連接接池
ShardedJedisPool shardedJedisPool = new ShardedJedisPool(config,shards);
// 連接池中獲取連接
ShardedJedis redis = pool.getResource();
redis.set("name", "finish");
String val = redis.get("name");
redis.close();
System.out.println(val);