1. 程式人生 > 實用技巧 >構建redis叢集

構建redis叢集

參考官方文件,搭建一個簡單的redis叢集

前提:有個redis的編譯版本

1. 建立目錄

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

2. 在7000-7005每一個目錄中,建立redis.conf檔案,7000的檔案內容如下,其他目錄的修改對應埠號

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

3. 將編譯的redis-server檔案挪到cluster-test目錄中

4. 啟動每一個例項,7000如下

cd 7000
../redis-server ./redis.conf

5. 將編譯後的redis-cli挪到cluster-test目錄,如果是低版本的redis(3或者4),則使用redis-trib.rb

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

6. 會有一次配置的確認,輸入yes,當看到如下資訊,則表示建立成功

[OK] All 16384 slots covered

建立好之後,嘗試用java程式碼進行操作

1. 引入maven依賴

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

2. 增加個工具類

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet; import java.util.Set; /** * @author page * @since 2021/1/20 16:01 */ public class RedisClusterUtil { private static JedisCluster jedisCluster = null; private static final String HOST = "192.168.92.130"; static { HostAndPort hostAndPort = new HostAndPort(HOST, 7000); HostAndPort hostAndPort1 = new HostAndPort(HOST, 7001); HostAndPort hostAndPort2 = new HostAndPort(HOST, 7002); Set<HostAndPort> hostAndPortSet = new HashSet<>(); hostAndPortSet.add(hostAndPort); hostAndPortSet.add(hostAndPort1); hostAndPortSet.add(hostAndPort2); HostAndPort hostAndPort3 = new HostAndPort(HOST, 7003); HostAndPort hostAndPort4 = new HostAndPort(HOST, 7004); HostAndPort hostAndPort5 = new HostAndPort(HOST, 7005); hostAndPortSet.add(hostAndPort3); hostAndPortSet.add(hostAndPort4); hostAndPortSet.add(hostAndPort5); jedisCluster = new JedisCluster(hostAndPortSet); } /** * 獲取指定 key 的值 * * @param key * @return */ public static String getString(String key) { return jedisCluster.get(key); } /** * 設定指定 key 的值 * * @param key * @param value */ public static void setString(String key, String value) { jedisCluster.set(key, value); } }

3. 呼叫工具類測試,發現連不上。之後修改多個檔案後解決

  3.1 刪除每個資料夾中的appendonly.aof,dump.rdb,nodes.conf

  3.2 修改redis.conf,增加如下內容

bind 192.168.92.130
protected-mode no

  3.3 檢視7000-7005埠是否放開

firewall-cmd --query-port=7000/tcp

  3.4 如果3.3中結果為no,則放開對應埠

firewall-cmd --add-port=7000/tcp

  3.5 程式碼裡連線的host也改為虛擬機器的ip,本文中為:192.168.92.130

  3.6 重啟叢集,解決