Reids集群部署

Redis的安裝

下載redis

官網地址:http://redis.io/
下載地址:http://download.redis.io/releases/redis-4.0.11.tar.gz

準備C++環境

安裝redis需要c語言的編譯環境,如果沒有gcc需要在線安裝

[root@localhost ~]# yum -y install gcc-c++

如果有GCC環境,只需輸入命令:

[root@localhost ~]# gcc

出現 :gcc: no input files 表示安裝成功。

安裝步驟redis:

一、將redis的源碼包上傳到linux系統。
二、解壓縮redis到/usr/tool/redis/redis-4.0.11/
三、進行編譯。 cd到解壓后的目錄 輸入命令:make
四、進行安裝。 輸入命令:make install PREFIX=/usr/tool/redis/redis-4.0.11/
PREFIX 必須是大寫的。
五:檢查目錄是否存在。
在/usr/tool/redis/redis-4.0.11/ 下 有bin 說明安裝成功。

測試連接redis

進入到安裝redis的bin目錄下

[root@localhost /]# cd /usr/tool/redis/redis-4.0.11/bin

執行如下命令在前端啟動redis

[root@localhost bin]# ./redis-server

看到如下圖即表示啟動成功,按Ctrl+c就可退出

image.png

后臺啟動(主要啟動方式)

一、把redis-4.0.11目錄下的redis.conf 復制到//usr/tool/redis/redis-4.0.11/bin目錄下

[root@localhost redis-4.0.11]# cp redis.conf /usr/tool/redis/redis-4.0.11/bin

二、使用vim命令修改redis.conf配置文件 將daemonize no修改為daemonize yes

image.png

三、修改綁定端口,不然只有本機能訪問,注釋這一行

image.png

四:輸入啟動命令

[root@localhost bin]# ./redis-server redis.conf

五、客戶端Redis-cli連接redis
使用Redis-cli建立連接

[root@localhost redis-4.0.11]# cd /usr/tool/redis/redis-4.0.11/bin/
[root@localhost bin]# ./redis-cli


image.png

默認連接localhost運行在6379端口的redis服務。
完整寫法如下

[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379
-h:連接的服務器的地址
-p:服務的端口號

退出連接界面

第一種:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> quit

第二種:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> exit

第三種:CTR+C

[root@localhost bin]#

關閉Redis服務

一、通過連接上客戶端進行關閉,使用shutdown 命令。

image.png

或者:cd 到redis的bin 目錄 再執行以下:

[root@localhost bin]# ./redis-cli shutdown

第二種:使用 kill 命令。
找到對應的redis的進程id 然后使用命令:(pid為進程id)
kill -9 pid

Redis集群的搭建

Redis 3.0 之后便支持集群。Redis 集群中內置了 16384 個哈希槽。Redis 會根據節點數量大致均等的將哈希槽映射到不同的節點。
所有節點之間彼此互聯(PING-PONG機制),當超過半數的主機認為某臺主機掛了,則該主機就是真的掛掉了,整個集群就不可用了。
若給集群中的每臺主機分配多臺從機。主機掛了,從機上位,依然能正常工作。但是若集群中超過半數的主機掛了,無論是否有從機,該集群也是不可用的。

集群搭建環境

搭建ruby環境

[root@localhost~]# yum install ruby
[root@localhost~]# yum install rubygems
[root@localhost~]# gem install redis
[root@localhost~]# cd /usr/tool/redis/redis-4.0.11/src
[root@localhost src]# cp redis-trib.rb /usr/tool/redis-cluster/

第一步:安裝 ruby 環境
第二步:安裝 gem 軟件包(gem是用來擴展或修改Ruby應用程序的)。參考地址:https://rubygems.org/gems/redis/versions/
第三步:在redis解壓目錄中找到 redis-trib.rb 文件,將其拷貝到redis-cluster目錄下,方便管理。

可能存在的問題
1 redis requires Ruby version >= 2.2.2,Ruby版本過低解決方法如下
2 沒有/usr/local/rvm/scripts/rvm 這個目錄.可能是上一步執行失敗

[root@localhost~]# ruby --version
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
[root@localhost~]# yum install curl
[root@localhost~]# curl -L get.rvm.io | bash -s stable
[root@localhost~]# source /usr/local/rvm/scripts/rvm
[root@localhost~]# rvm list known
[root@localhost~]# rvm install 2.4.4
[root@localhost~]# rvm use 2.4.4
[root@localhost ~]# gem install redis

搭建步驟

需要6臺redis服務器。搭建偽分布式。
需要6個redis實例。
需要運行在不同的端口6001-6006

使用之前搭建好的redis實例 。
注意:搭建前 如果節點里有數據,需要刪除(rdb文件,aof文件)。

1、創建6個redis實例,每個實例運行在不同的端口。需要修改redis.conf配置文件。配置文件中還需要把cluster-enabled yes前的注釋去掉。

創建目錄:

[root@localhost tool]# mkdir redis-cluster
[root@localhost bin]# cd /usr/tool/redis

copy 之前搭建好的redis 并改名為redis01

[root@localhost redis]# cp redis-4.0.11/ /usr/tool/redis-cluster/redis07 -r

進入redis-cluster目錄中cd到redis01的bin目錄,刪除數據文件

[root@localhost local]# cd redis-cluster/redis01/bin
[root@localhost bin]# rm -rf *.rdb *.aof

修改redis.conf,取消注釋,如圖

[root@localhost bin]# vim redis.conf


image.png

進入redis-cluster目錄
copy六份并分別命名為redis02,redis03,redis04,redis05,redis06

[root@localhost redis-cluster]# cp redis01 redis02 -r
[root@localhost redis-cluster]# cp redis01 redis03 -r
[root@localhost redis-cluster]# cp redis01 redis04 -r
[root@localhost redis-cluster]# cp redis01 redis05 -r
[root@localhost redis-cluster]# cp redis01 redis06 -r

cd到每一個實例的bin目錄,修改每一個redis實例的端口分別改為6001-6006

[root@localhost bin]# vim redis.conf


tool

第二步:啟動每個redis實例。

vim redis-cluster-start-all.sh
添加如下文字到文件中:

cd /usr/tool/redis-cluster/redis01/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis02/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis03/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis04/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis05/bin
./redis-server redis.conf
cd /usr/tool/redis-cluster/redis06/bin
./redis-server redis.conf

修改文件:redis-cluster-start-all.sh 的權限,讓其可執行。

chmod u+x redis-cluster-start-all.sh

執行啟動

[root@localhost redis-cluster]# ./redis-cluster-start-all.sh
[root@localhost /]# cd /usr/tool/redis-cluster/
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.65.129:6001 192.168.65.129:6002 192.168.65.129:6003 192.168.65.129:6004 192.168.65.129:6005 192.168.65.129:6006

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.65.129:6001
192.168.65.129:6002
192.168.65.129:6003
Adding replica 192.168.65.129:6005 to 192.168.65.129:6001
Adding replica 192.168.65.129:6006 to 192.168.65.129:6002
Adding replica 192.168.65.129:6004 to 192.168.65.129:6003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
   slots:0-5460 (5461 slots) master
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
   slots:5461-10922 (5462 slots) master
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
   slots:10923-16383 (5461 slots) master
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
   replicates 59537b200756a98c46391a1f02060373aef58892
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
   replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
   replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
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.65.129:6001)
M: 59537b200756a98c46391a1f02060373aef58892 192.168.65.129:6001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 6aa8a4110c29ff5aab8d002a2c186e44ebacb062 192.168.65.129:6003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c7210a9323cd3e00d66fec21e46b9cb0c4a67906 192.168.65.129:6005
   slots: (0 slots) slave
   replicates 9350b506f4317564cba1213143ce7d58608dee5c
S: be597675bc4272c49260936b692b4a95dd0f7d1d 192.168.65.129:6006
   slots: (0 slots) slave
   replicates 6aa8a4110c29ff5aab8d002a2c186e44ebacb062
S: 994d234d6e1fb0a3a105f4cb2aa077e01b002d3a 192.168.65.129:6004
   slots: (0 slots) slave
   replicates 59537b200756a98c46391a1f02060373aef58892
M: 9350b506f4317564cba1213143ce7d58608dee5c 192.168.65.129:6002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]# 

看到如上信息,集群配置成功

創建關閉集群的腳本:(不是必須的)
首先使用:vim 命令創建一個文件 redis-cluster-stop-all.sh
編輯文件,添加如下:

cd /usr/tool/redis-cluster/redis01/bin
./redis-cli -p 6001 shutdown
cd /usr/tool/redis-cluster/redis02/bin
./redis-cli -p 6002 shutdown
cd /usr/tool/redis-cluster/redis03/bin
./redis-cli -p 6003 shutdown
cd /usr/tool/redis-cluster/redis04/bin
./redis-cli -p 6004 shutdown
cd /usr/tool/redis-cluster/redis05/bin
./redis-cli -p 6005 shutdown
cd /usr/tool/redis-cluster/redis06/bin
./redis-cli -p 6006 shutdown

修改文件:redis-cluster-stop-all.sh 的權限,讓其可執行。

chmod u+x redis-cluster-stop-all.sh

代碼使用集群

把jedis依賴的jar包添加到工程中。Maven工程中需要把jedis的坐標添加到依賴。

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

redis 4.0版本以后,jedis版本不能低于2.9,不然會報一下錯誤

java.lang.NumberFormatException: For input string: "6003@16003"

創建測試類

如果本機能訪問redis,代碼不能訪問,可能是防火墻問題
centOS7關閉防火墻命令

systemctl stop firewalld

public class TestRedis {
    public static void  main(String[] args){
        try{
            //testJedis();
            //testJedisPool();
            testJedisCluster();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public static void testJedis() throws Exception {
        // 第一步:創建一個Jedis對象。需要指定服務端的ip及端口。
        Jedis jedis = new Jedis("192.168.65.129", 6379);
        // 第二步:使用Jedis對象操作數據庫,每個redis命令對應一個方法。
        jedis.set("hello", "world");
        String result = jedis.get("hello");
        // 第三步:打印結果。
        System.out.println(result);
        // 第四步:關閉Jedis
        jedis.close();
    }

    public static void testJedisPool() throws Exception {
        // 第一步:創建一個JedisPool對象。需要指定服務端的ip及端口。
        JedisPool jedisPool = new JedisPool("192.168.65.129", 6379);
        // 第二步:從JedisPool中獲得Jedis對象。
        Jedis jedis = jedisPool.getResource();
        // 第三步:使用Jedis操作redis服務器。
        jedis.set("jedis", "test");
        String result = jedis.get("jedis");
        System.out.println(result);
        // 第四步:操作完畢后關閉jedis對象,連接池回收資源。
        jedis.close();
        // 第五步:關閉JedisPool對象。
        jedisPool.close();
    }

    public static void testJedisCluster() throws Exception {
        // 第一步:使用JedisCluster對象。需要一個Set<HostAndPort>參數。Redis節點的列表。
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("192.168.65.129", 6001));
        nodes.add(new HostAndPort("192.168.65.129", 6002));
        nodes.add(new HostAndPort("192.168.65.129", 6003));
        nodes.add(new HostAndPort("192.168.65.129", 6004));
        nodes.add(new HostAndPort("192.168.65.129", 6005));
        nodes.add(new HostAndPort("192.168.65.129", 6006));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        // 第二步:直接使用JedisCluster對象操作redis。在系統中單例存在。
        jedisCluster.set("hello", "100");
        String result = jedisCluster.get("hello");
        // 第三步:打印結果
        System.out.println(result);
        // 第四步:系統關閉前,關閉JedisCluster對象。
        jedisCluster.close();
    }
}

注意:添加緩存不能影響正常業務邏輯。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容