構建redis叢集
阿新 • • 發佈:2021-01-21
參考官方文件,搭建一個簡單的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 重啟叢集,解決