redis 集羣服務搭建及配置

1.首先配置單機版的redis這個比較簡單直接將redis的壓縮包解壓 進入redis目錄 make && make install prefix=/usr/local/redis即可

在usr下創建redis目錄,將redis.tar.gz 複製到該目錄並解壓如下圖----輸入make 及make install PREFIX=/usr/local/redis    prefix後爲執行安裝的目錄

進入 /usr/local/redis/bin 目錄啓動redis服務

方法一:前端啓動  ./redis-server 如圖啓動成功

重新開啓一個命令行窗口進入redis安裝bin目錄,開啓redis客戶端 ./redis-cli 試試 成功!

啓動方法二 後端啓動:將redis源碼包中的redis.conf複製到/usr/local/redis/bin/目錄下更改redis.conf配置如下圖

啓動redis 執行 ./redis-server redis.conf  開啓客戶端 ./redis-cli

 

2.配置redis集羣

首先redis集羣需要ruby rubygems等環境

安裝ruby之前需要安裝 openssl zlib等若linux沒有安裝gcc需要先安裝gcc

2.1安裝openssl ---下載openssl-1.0.1j.tar.gz,解壓到/usr/openssl/目錄下進入解壓目錄 執行./config -fPIC 如下圖

執行 make 和 make install命令 ok(注意 openssl的安裝可以參考一些教程 如果openssl 沒用被正確安裝 ruby的安裝也會失敗)

2.2 安裝zlib ---同樣下載zlib.tar.gz 解壓到/usr/zlib/目錄進入解壓目錄 執行 ./configure 命令如下圖

執行 make 和make install 命令 ok!

2.3安裝ruby 下載ruby-2.25.tar.gz解壓到/usr/ruby/目錄下 執行 ./configure  --with-openssl-dir=/local/usr/ssl命令 如下圖

執行 make 和make install 命令完成後 進入ext/openssl目錄執行 ruby ./extconf.rb如下圖

執行make---報錯 No rule to make target  '/include/ruby.h'

 

修改Makefile 文件 添加 top_srcdir = ../..如下圖

再次執行make命令

執行make install 命令

成功

進入ruby 解壓目錄/ext/zlib 目錄 執行 ruby ./extconf.rb 命令‘如下圖

執行make和 make install 命令

成功

2.4安裝rubygems---下載rubygems-2.6.7tgz文件 解壓到/usr/rubygems/目錄進入該解壓目錄執行 ruby ./setup.ruby命令如下圖

2.5安裝 redis-3.0.0.gem 如下圖   /home/wl/Desktop/redis-3.0.0.gem 爲我的 redis-3.0.0.gem 文件目錄

至此 環境就搭建好了

這裏我用同一臺服務器不同的端口表示不同的redis服務器

在/usr/local下創建redis-cluster目錄,其下創建redis01 redis02 redis03 redis04.....redis06總共6個redis服務 其中3個主節點 3個從節點,如下

將redis安裝目錄bin文件夾拷貝到每個redis01 redis02 ...redis06目錄內,同時將redis源碼目錄src下的redis-trib.rb拷貝到redis-cluster目錄下 ---注意將bin目錄下的dump.rdb 和 .aof後綴的文件刪除

 

修改每個redis01 redis02....目錄下的redis.conf配置文件: 

port XXXX

cluster-enabled yes 

啓動每一個redis服務 ./redis-server redis.conf

在這裏創建一個startup.sh腳本

添加可執行權限 chmod +x startup.sh

執行./startup.sh -----查看是否啓動 ps aux | grep redis

執行redis-trib.rb,此腳本是ruby腳本,它依賴ruby環境。

./redis-trib.rb create --replicas 1 192.168.10.194:7001 192.168.10.194:7002 192.168.10.194:7003 192.168.10.194:7004 192.168.10.194:7005  192.168.10.194:7006

 

>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.10.194:7001
192.168.10.194:7002
192.168.10.194:7003
Adding replica 192.168.10.194:7004 to 192.168.10.194:7001
Adding replica 192.168.10.194:7005 to 192.168.10.194:7002
Adding replica 192.168.10.194:7006 to 192.168.10.194:7003
M: 262e96dce35a01710966df9921eabf54915254b4 192.168.10.194:7001
   slots:0-5460 (5461 slots) master
M: 42febf223bb0b2f0904acabb82941ef99b97b50d 192.168.10.194:7002
   slots:5461-10922 (5462 slots) master
M: 5dbbbd1a6acf0485ac664b3ac75abd8bbe6c7b82 192.168.10.194:7003
   slots:10923-16383 (5461 slots) master
S: 8b648839330800f30598c68064296a16a5f6e74c 192.168.10.194:7004
   replicates 262e96dce35a01710966df9921eabf54915254b4
S: e1c5b278e4933376f73409368837f409945d449f 192.168.10.194:7005
   replicates 42febf223bb0b2f0904acabb82941ef99b97b50d
S: ffd0be0f461a3f530538ea71db5007de36413613 192.168.10.194:7006
   replicates 5dbbbd1a6acf0485ac664b3ac75abd8bbe6c7b82
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 192.168.10.194:7001)
M: 262e96dce35a01710966df9921eabf54915254b4 192.168.10.194:7001
   slots:0-5460 (5461 slots) master
M: 42febf223bb0b2f0904acabb82941ef99b97b50d 192.168.10.194:7002
   slots:5461-10922 (5462 slots) master
M: 5dbbbd1a6acf0485ac664b3ac75abd8bbe6c7b82 192.168.10.194:7003
   slots:10923-16383 (5461 slots) master
M: 8b648839330800f30598c68064296a16a5f6e74c 192.168.10.194:7004
   slots: (0 slots) master
   replicates 262e96dce35a01710966df9921eabf54915254b4
M: e1c5b278e4933376f73409368837f409945d449f 192.168.10.194:7005
   slots: (0 slots) master
   replicates 42febf223bb0b2f0904acabb82941ef99b97b50d
M: ffd0be0f461a3f530538ea71db5007de36413613 192.168.10.194:7006
   slots: (0 slots) master
   replicates 5dbbbd1a6acf0485ac664b3ac75abd8bbe6c7b82
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
成功

 

注意:

如果執行時報如下錯誤:

[ERR]Node XXXXXX is not empty. Either the node already knows other nodes (check withCLUSTER NODES) or contains some key in database 0

解決方法是刪除生成的配置文件nodes.conf,如果不行則說明現在創建的結點包括了舊集羣的結點信息,需要刪除redis的持久化文件後再重啓redis,比如:appendonly.aof、dump.rdb

客戶端以集羣方式登陸:

 

java代碼測試,首先導入redis.jar包

 

@Test
public void testRedisCluster() {
JedisPoolConfig config = new JedisPoolConfig();
// 最大連接數
config.setMaxTotal(30);
// 最大連接空閒數
config.setMaxIdle(2);


// 集羣結點
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7001));
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7002));
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7003));
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7004));
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7005));
jedisClusterNode.add(new HostAndPort("192.168.10.194", 7006));
JedisCluster jc = new JedisCluster(jedisClusterNode, config);


// JedisCluster jcd = new JedisCluster(jedisClusterNode);
jc.set("name", "zhangsan");
String value = jc.get("name");
System.out.println(value);


}

通過客戶端查看一下

成功redis 集羣搭建完畢 關於 redis集羣主節點 從節點 的增加 和刪除會在另外一篇文章中說明

ruby-2.25.tar.gz 官網下載地址          ruby-2.2.5.tar.gz 下載地址

openssl-1.0.2b.tar.gz 官網下載地址           openssl-1.0.2j.tar.gz 下載地址

zlib-1.2.8.tar.gz 官網下載地址               zlib-1.2.8.tar.gz 下載地址

rubygems-2.6.7.tgz 官網下載地址        rubygems-2.6.7.tgz下載地址

redis-3.0.7.tar.gz 官網下載地址            redis-3.0.7.tar.gz 下載地址

redis-3.0.0.gem 下載地址

發佈了35 篇原創文章 · 獲贊 19 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章