Redis從單機到集羣,一步步教你環境部署以及使用

Redis做爲緩存系統來講仍是頗有價值的,在大數據方向裏,也是須要有緩存系統的。通常能夠考慮tachyon或者redis,因爲redis安裝以及使用更簡單,因此仍是優先考慮了它。那麼在一些場景下爲了保證數據的可靠性,就須要採用集羣的模式部署,所以本篇文章就基於Redis Cluster的背景講解下部署以及後期的使用。html

大體會包括下面的內容:node

  • Redis單機版的安裝以及驗證
  • Redis集羣版的安裝以及驗證
  • 使用圖形化工具訪問Redis
  • 使用Jedis訪問Redis
  • 使用JedisCluster訪問Redis Cluster

以後會介紹一下,如何在Spark中使用redis,敬請期待。linux

Redis單機版安裝

1.1 下載

首先去官網下載想要的版本:
https://redis.io/downloadc++

我這裏選了一個版本沒那麼高的,省的變化太大,各類軟件兼容不了。因而挑個以前的穩定版本下載,下載redis-3.2.10.tar.gz拷貝到目標機器。git

1.2 安裝

把壓縮文件拷貝到指定的服務器上,執行解壓命令:github

tar -zxvf redis-3.2.10.tar.gz

安裝前須要先安裝必要的包,yum -y install gcc gcc-c++ tcl,這裏安裝的都是通常遇到的錯誤所須要安裝的庫。redis

安裝完後,進入redis-3.2.10目錄,執行編譯命令:make MALLOC=libc,這樣就安裝完了windows

1.3 測試

安裝完能夠直接啓動測試一下:api

  • 啓動服務器,執行下面的命令:./src/redis-server redis.conf
  • 啓動客戶端,執行下面的命令:./src/redis-cli

在控制檯中,輸入下面命令:緩存

set foo bar
get foo

看看是否正常

redis集羣安裝

按照上面的方式,在每臺機器上面都裝一下redis。因爲redis cluster集羣必需要三個master,若是作一個備份的話,就須要6個節點。因此我這裏在三臺機器上,安裝redis,而後每臺機器上啓動兩個redis便可。一會會說一下,如何在一臺機器上,啓動兩個redis。

2.1 安裝

首先安裝一下ruby,由於集羣的腳本是ruby版的

yum -y install ruby ruby-devel rubygems rpm-build

而後執行:

gem install redis

而後把redis-trip.rb拷貝到/usr/local/bin下,這樣就能夠在任何目錄執行redis-trip命令了。

cp src/redis-trip.rb /usr/local/bin

2.2 修改配置

接下來須要根據集羣的狀況,建立server啓動的配置了,先建立redis_cluster目錄,拷貝redis.conf

[root@localnode7 redis-3.2.10]# mkdir redis_cluster
[root@localnode7 redis-3.2.10]# cp redis.conf ./redis_cluster/redis.conf

而後修改redis.conf

[root@localnode7 redis-3.2.10]# vi ./redis_cluster/redis.conf

修改的內容有:

bind 0.0.0.0 //爲了別人能訪問,這裏暴力的監聽了全部的地址
port 6379
daemonize yes //redis後臺運行
cluster-enabled yes //開啓集羣  把註釋#去掉
cluster-config-file nodes_6379.conf //集羣的配置  配置文件首次啓動自動生成
cluster-node-timeout 15000 //請求超時  默認15秒,可自行設置
appendonly yes //這裏跟redis持久化的機制有關係,有興趣能夠多關注一下redis的日誌記錄機制

PS:由於redis.conf配置文件比較大,內容不少。所以你們在修改配置的時候可使用vi的快捷鍵/想要搜索的內容,而後按enter,能夠快速定位到想要修改的配置上,若是有多個,能夠再用n鍵跳轉到下一個匹配結果。

2.3 啓動服務器

接下來就能夠啓動redis服務器

[root@localnode7 redis-3.2.10]# ./src/redis-server redis_cluster/redis.conf
[root@localnode7 redis-3.2.10]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root     29361  0.0  0.0 130436  2452 ?        Ssl  13:21   0:00 ./src/redis-server 127.0.0.1:6379 [cluster]
root     29381  0.0  0.0 103464  1080 pts/0    R+   13:21   0:00 grep redis
[root@localnode7 redis-3.2.10]#

2.4 單個機器啓動多個server

若是想要在一臺機器上同時啓動多個redis,能夠直接再拷貝一份redis.conf,命名成redis2.conf,修改裏面的port參數和cluster-config-file參數便可。

好比上面的配置修改爲:

bind 0.0.0.0
port 6380  // <----只有這裏發生變化
daemonize yes
cluster-enabled yes
cluster-config-file nodes_6380.conf // <--只有這裏發生變化
cluster-node-timeout 15000
appendonly yes

而後啓動的時候,指定爲這個conf便可:

./src/redis-server redis_cluster/redis2.conf

再次查詢啓動進程:

[root@localnode4 redis-3.2.10]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      7452  0.0  0.0 131892  2984 ?        Ssl  15:59   0:08 ./src/redis-server 0.0.0.0:6379 [cluster]
root      9337  0.0  0.0 130564  2744 ?        Ssl  16:00   0:08 ./src/redis-server 0.0.0.0:6380 [cluster]
root     32298  0.0  0.0 103464  1084 pts/0    S+   19:27   0:00 grep redis
[root@localnode4 redis-3.2.10]#

2.5 建立集羣

注意:

  • 想要搭建集羣,至少6個節點,否則執行下面的命令會報錯的
  • 在建立集羣時,只能用ip地址,不能用主機名,否則會鏈接不上...不知道爲啥...

執行下面的命令啓動集羣建立:

[root@localnode6 redis-3.2.10]# redis-trib.rb  create  --replicas 1 10.10.10.104:6379 10.10.10.106:6379 10.10.10.107:6379 10.10.10.104:6380 10.
10.10.106:6380 10.10.10.107:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.10.10.107:6379
10.10.10.106:6379
10.10.10.104:6379
Adding replica 10.10.10.106:6380 to 10.10.10.107:6379
Adding replica 10.10.10.107:6380 to 10.10.10.106:6379
Adding replica 10.10.10.104:6380 to 10.10.10.104:6379
M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379
   slots:10923-16383 (5461 slots) master
M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379
   slots:5461-10922 (5462 slots) master
M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379
   slots:0-5460 (5461 slots) master
S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380
   replicates e59449112f33dcb2dfad7a1ec32920470f589c32
S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380
   replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef
S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380
   replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f
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 10.10.10.104:6379)
M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380
   slots: (0 slots) slave
   replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f
M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380
   slots: (0 slots) slave
   replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef
S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380
   slots: (0 slots) slave
   replicates e59449112f33dcb2dfad7a1ec32920470f589c32
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

中間須要咱們輸入一個yes肯定主從的分配。經過日誌就能夠看到master和slave的一個分配狀況,以及slot的分配。那個slots是跟存儲的時候hash有關的,即一個字符串先要通過哈希,知道他應該存儲到那個節點上,而後纔會存儲到對應的server中。當咱們用普通的api去查詢的時候,須要查那個真正存儲的機器,才能讀取到數據。固然使用cluster api就不會有這個問題了。

2.6 集羣環境驗證

下面咱們驗證下集羣的效果:

首先查看一下集羣的狀態,而後建立一個key,再換另外一個節點登陸,看看可否查詢到。

[root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.104 -c -p 6379
10.10.10.104:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:86
cluster_stats_messages_received:86
10.10.10.104:6379> get foo
(nil)
10.10.10.104:6379> set foo bar
OK
10.10.10.104:6379> get foo
"bar"
10.10.10.104:6379>
[root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.106 -c -p 6379
10.10.10.106:6379> get foo
-> Redirected to slot [12182] located at 10.10.10.104:6379
"bar"
10.10.10.104:6379>

這樣咱們的集羣環境就搭建完了。

萬里長征又多走了一步~

安裝監控軟件

若是用windows辦公,仍是有很多圖形化的工具,能夠鏈接redis的,好比redis desktop:

首先能夠去下面網址去下載對應的版本:
https://redisdesktop.com/download

而後就是無腦安裝了,安裝完登陸到對應的機器上便可。不過貌似是單節點登陸,即你看不到集羣的數據。多是我不會用 :-(

使用Jedis API訪問Redis Cluster

首先在pom.xml中引入Jedis的jar包:

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

而後測試一下:

public class JedisTest {
    public static void main(String[] args) {
        Jedis redis = new Jedis("10.10.10.104",6379);
        String foo = redis.get("foo");
        System.out.println(foo);
    }
}

使用JedisCluster訪問Redis Cluster

參考下這片文章就行,試驗過了可用的:
http://www.cnblogs.com/shihaiming/p/5953956.html

參考

1 安裝redis常常遇到的問題:http://www.cnblogs.com/HKUI/p/4439575.html 2 make的時候error: jemalloc/jemalloc.h報錯:http://openskill.cn/article/151 3 linux經常使用目錄介紹:http://www.linuxidc.com/Linux/2016-08/134701.htm 4 redis集羣環境搭建:http://www.cnblogs.com/wuxl360/p/5920330.html 5 redis安裝:http://www.runoob.com/redis/redis-install.html 6 redis官方文檔:https://redis.io/download 7 redis client官方文檔:https://github.com/uglide/RedisDesktopManager 8 redis desktop windows下載:https://redisdesktop.com/download

相關文章
相關標籤/搜索