1. 程式人生 > >redis安裝、測試&叢集的搭建&踩過的坑

redis安裝、測試&叢集的搭建&踩過的坑

1 redis的安裝

1.1   安裝redis

  版本說明

   本教程使用redis3.0版本。3.0版本主要增加了redis叢集功能。

安裝的前提條件:

需要安裝gcc:yum install gcc-c++

1、下載redis的原始碼包。

2、把原始碼包上傳到linux伺服器

3、解壓原始碼包

tar -zxvf redis-3.0.0.tar.gz

4、Make

5、Make install

[[email protected] redis-3.0.0]# make install PREFIX=/usr/local/redis

1.2   啟動redis

1、前端啟動模式

/usr/local/redis/bin/redis-server

預設是前端啟動模式,埠是6379

2、後端啟動

1)從redis的原始碼目錄中複製redis.conf到redis的安裝目錄。

2)修改配置檔案

3)[[email protected] bin]# ./redis-server redis.conf

1.3   Redis常用命令

./redis-cli 

127.0.0.1:6379> set a 10

OK

127.0.0.1:6379> get a

"10"

1.4   Java程式碼測試redis,需使用jedis.jar

import java.util.HashSet;

import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
/**
 * 測試jedis,redis的客戶端,想連線到虛擬機器中的redis-server需要關閉iptables
 * 執行:service iptables stop
 * 
@author HELLXZ * @date 建立時間:2017年8月17日 上午8:41:05 */ public class testJedis { @Test //單機測試 public void testJedis(){ Jedis jedis = new Jedis("192.168.25.133", 6379); jedis.set("haha", "helloworld!"); String string = jedis.get("haha"); System.out.println(string); jedis.close(); } @Test //池測試 public void testJedisPool(){ JedisPool jedisPool = new JedisPool("192.168.25.133", 6379); Jedis resource = jedisPool.getResource(); resource.set("hei", "ha"); String string = resource.get("hei"); System.out.println(string); resource.close(); //關閉連線池 jedisPool.close(); } }

1.4.1   此處的坑

程式碼測試顯示失敗,連線失敗,想了一陣,以為是bind的ip地址不對,修改redis.conf的bind的ip,測試沒有用。

然後百度發現問題在於虛擬機器使用的cent6.4的防火牆還開著,關閉後測試通過。

cent7以下用到的防火牆是iptables,關閉防火牆程式碼如下

關閉防火牆命令: 
service iptables stop 
永久關閉防火牆:
chkconfig iptables off

cent7以上關閉命令:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動

1.5   常用資料型別

1) String

2) Hash

3) List

4) Set

5) SortedSet

其中1)2)最常用

2   Redis叢集的搭建

2.1   Redis叢集相關概念

2.1.1   redis-cluster架構圖

叢集基礎知識:

redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value

Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點

Key:a

計算a的hash值,例如值為100,100這個槽在server1上,所以a應該放到server1.

Key:hello

Hash值:10032,此槽在server2上。Hell可以應該存在server2.

2.1.2   redis-cluster投票:容錯

(1)領著投票過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超過(cluster-node-timeout),認為當前master節點掛掉.

(2):什麼時候整個叢集不可用(cluster_state:fail)? 

    a:如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成叢集的slot對映[0-16383]不完成時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage引數,預設關閉,開啟叢集相容部分失敗.

    b:如果叢集超過半數以上master掛掉,無論是否有slave叢集進入fail狀態.

  ps:當叢集不可用時,所有對叢集的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

2.2   我們的叢集結構

叢集中有三個節點的叢集,每個節點有一主一備。需要6臺虛擬機器。

搭建一個偽分散式的叢集,使用6個redis例項來模擬。

2.3   搭建叢集需要的環境

搭建叢集需要使用到官方提供的ruby指令碼。

需要安裝ruby的環境。

安裝ruby

yum install ruby

yum install rubygems

redis叢集管理工具redis-trib.rb

[[email protected] ~]# cd redis-3.0.0

[[email protected] redis-3.0.0]# cd src

[[email protected] src]# ll *.rb

-rwxrwxr-x. 1 root root 48141 Apr  1 07:01 redis-trib.rb

[[email protected] src]#

指令碼需要的ruby包

需要上傳到linux服務。

安裝ruby的包

gem install redis-3.0.0.gem

顯示情況如下:

[[email protected] ~]# gem install redis-3.0.0.gem

Successfully installed redis-3.0.0

1 gem installed

Installing ri documentation for redis-3.0.0...

Installing RDoc documentation for redis-3.0.0...

2.4   叢集的搭建

第一步:建立6個redis例項,埠號從7001~7006

建立例項舉例第一個,後邊相同,複製改名資料夾,配置檔案改埠號即可:

cd /usr/local/redis #進入redis安裝路徑

cd bin

rm -rf dump.db  #刪除快取的資料庫

cd ..

cp bin ../redis-cluster/redis01 #複製bin並重命名到redis-cluster目錄下

#此時redis_cluster 中已經有一個redis01的例項檔案夾了,
#此時可以先修改一下配置檔案,比如:修改埠號,開啟cluster-enabled yes
#然後 各種複製這個資料夾,建立6個例項
cp redis01 redis02
cp redis01 redis03
cp redis01 redis04
cp redis01 redis05
cp redis01 redis06
#之後參考第二步把沒有修改的埠號改正確即可

第二步:修改redis.conf(這些都在redis01~06中,都需要修改!)

  1) 修改埠號

  2) 開啟cluster-enable前面的註釋。

第三步:把建立叢集的ruby指令碼(redis-trib.rb)從redis安裝路徑下的src路徑,複製到redis-cluster目錄下。

cd /usr/local/redis/src

cp *.rb /usr/local/redis-cluster

第四步:啟動6個redis例項,刪除dump.db檔案,開啟redis.conf更改埠號,開啟cluster-enabled yes

建立指令碼  vim startall.sh 輸入如下並儲存

 1 cd redis01
 2 ./redis-server redis.conf
 3 cd ..
 4 cd redis02
 5 ./redis-server redis.conf
 6 cd ..
 7 cd redis03
 8 ./redis-server redis.conf
 9 cd ..
10 cd redis04
11 ./redis-server redis.conf
12 cd ..
13 cd redis05
14 ./redis-server redis.conf
15 cd ..
16 cd redis06
17 ./redis-server redis.conf

此處儲存完畢,chmod +x startall.sh授權,一定要 ./startall.sh 執行,然後再繼續操作!

檢視狀態   ps aux|grep redis

 

第五步:建立叢集。具體ip為虛擬機器設定的ip,請注意

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

接下來會彈一堆程式碼。看看就好,後邊需要輸入請求yes繼續執行

[[email protected] redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.133:7001 192.168.25.133:7002 192.168.25.133:7003 192.168.25.133:7004 192.168.25.133:7005  192.168.25.133:7006
>>> Creating cluster
Connecting to node 192.168.25.133:7001: OK
Connecting to node 192.168.25.133:7002: OK
Connecting to node 192.168.25.133:7003: OK
Connecting to node 192.168.25.133:7004: OK
Connecting to node 192.168.25.133:7005: OK
Connecting to node 192.168.25.133:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.133:7001
192.168.25.133:7002
192.168.25.133:7003
Adding replica 192.168.25.133:7004 to 192.168.25.133:7001
Adding replica 192.168.25.133:7005 to 192.168.25.133:7002
Adding replica 192.168.25.133:7006 to 192.168.25.133:7003
M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.25.133:7001
   slots:0-5460 (5461 slots) master
M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.25.133:7002
   slots:5461-10922 (5462 slots) master
M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.25.133:7003
   slots:10923-16383 (5461 slots) master
S: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.25.133:7004
   replicates 5a8523db7e12ca600dc82901ced06741b3010076
S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.25.133:7005
   replicates bf6f0929044db485dea9b565bb51e0c917d20a53
S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.25.133:7006
   replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
Can I set the above configuration? (type 'yes' to accept): yes

輸入yes之後繼續,接下來的程式碼到join...需要耐心等待,如果出現一兩行的省略號,那麼很遺憾,可能前邊你的./startall.sh沒有啟動!!!ctrl+c關閉當前,刪除各個資料夾中生成的dump.db,然後啟動指令碼./startall.sh,重複上述操作即可成功!

>>> 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.25.133:7001)
M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.25.133:7001
   slots:0-5460 (5461 slots) master
M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.25.133:7002
   slots:5461-10922 (5462 slots) master
M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.25.133:7003
   slots:10923-16383 (5461 slots) master
M: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.25.133:7004
   slots: (0 slots) master
   replicates 5a8523db7e12ca600dc82901ced06741b3010076
M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.25.133:7005
   slots: (0 slots) master
   replicates bf6f0929044db485dea9b565bb51e0c917d20a53
M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.25.133:7006
   slots: (0 slots) master
   replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[[email protected] redis-cluster]# 

至此,redis叢集搭建完成

每個redis叢集的節點都是會互相ping pong 的,接下來我們測試一下 

#結尾的-c一定要寫!不然會出現move失敗的錯誤!
[[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002 -c #結尾的-c一定要寫!不然會出現move失敗的錯誤!


[[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002
192.168.25.133:7002> set a 100
(error) MOVED 15495 192.168.25.133:7003
192.168.25.133:7002> 
[[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002 -c
192.168.25.133:7002> set a 100
-> Redirected to slot [15495] located at 192.168.25.133:7003
OK
192.168.25.133:7003> 

2.5 java程式碼測試叢集

 1 @Test
 2     public void testJedisCluster() {
 3         HashSet<HostAndPort> nodes = new HashSet<>();
 4         nodes.add(new HostAndPort("192.168.25.133", 7001));
 5         nodes.add(new HostAndPort("192.168.25.133", 7002));
 6         nodes.add(new HostAndPort("192.168.25.133", 7003));
 7         nodes.add(new HostAndPort("192.168.25.133", 7004));
 8         nodes.add(new HostAndPort("192.168.25.133", 7005));
 9         nodes.add(new HostAndPort("192.168.25.133", 7006));
10         
11         JedisCluster cluster = new JedisCluster(nodes);
12         
13         cluster.set("key1", "1000");
14         String string = cluster.get("key1");
15         System.out.println(string);
16         
17         cluster.close();
18     }

2.6   關閉redis叢集(節點)

有開啟自然有關閉,比較麻煩,一般的教程裡沒寫,先cd到redis-cluster/,也可以把以下程式碼裝進指令碼如:vim shutdownall.sh,儲存後chmod +x shutdownall.sh ,執行的時候./shutdownall.sh即可

redis01/redis-cli -p 7001 shutdown

redis02/redis-cli -p 7002 shutdown

redis03/redis-cli -p 7003 shutdown

redis04/redis-cli -p 7004 shutdown

redis05/redis-cli -p 7005 shutdown

redis06/redis-cli -p 7006 shutdown

2.7   重啟redis叢集(節點)

回憶我們建立redis叢集的時候是create的cluster,那麼重啟呢?其實重啟更簡單!完全無需我們在create一個新的cluster!百度一會了,發現幾乎沒有解決方案,或者有解決方案的沒有技術分享,不多說,直接說結論:

我們建立了叢集之後,叢集已經存在了,無需建立,僅僅重啟各個節點就可以運行了!本文上邊有提到startall.sh指令碼的建立,只需執行那個指令碼就啟動了叢集了!

./startall.sh

 -------本文理論部分來自傳智黑馬授課筆記,僅作記錄,實際操作的部分以及筆記中不全的步驟在這裡得以補全,新增自認為會坑的細節。不喜勿噴。

無法連線的bug解決引用自: 

http://blog.csdn.net/skymouse2002/article/details/52279553

相關推薦

redis安裝測試&叢集搭建&

1 redis的安裝 1.1   安裝redis   版本說明    本教程使用redis3.0版本。3.0版本主要增加了redis叢集功能。 安裝的前提條件: 需要安裝gcc:yum install gcc-c++ 1、下載redis的原始碼包。 2、把原始碼包上傳到linux伺服器 3

Hadoop及spark叢集搭建

本叢集總共有三臺主機,一臺master,兩臺slave Hadoop有一個節點無法啟動 在按照教程子雨大資料之Spark入門教程(Python版)搭建Hadoop叢集時,執行jps命令,發現master和其中一個slave能正常工作,執行./bin/yarn node -lis

redis-5.0.0基於Redis官方工具的叢集搭建(排指南,從安裝Redis開始)

一、前言 搭建Redis叢集的教程很多,介紹的也很全面,但是大多數 還是使用Ruby指令碼的版本,安裝Ruby本身也不是一件簡單的事情,redis-5.0.0之後已經將 redis-trib.rb 指令碼的功能全部整合到 redis-cli之中了,本章基於redis-cli 的&nbs

redis之二 主從複製sentinel叢集搭建

redis中文官網: replication sentinel 一、主從複製 通過redis的持久化功能,redis可以保證伺服器重啟也不會損失(或少量損失)資料。但資料儲存在單臺redis伺服器上,如果這臺伺服器出現硬碟故障,則會導致資料丟失。 為了避免單點故障,可以將資

LNMP環境搭建:Nginx安裝測試與域名配置

Nginx作為一款優秀的Web Server軟體同時也是一款優秀的負載均衡或前端反向代理、快取服務軟體   2.編譯安裝Nginx   (1)安裝Nginx依賴函式庫pcre     pcre為“perl相容正則表示式”perl compatible regu

分散式快取技術redis學習系列(四)——redis高階應用(叢集搭建叢集分割槽原理叢集操作)

Redis叢集簡介 Redis 叢集是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 叢集可謂是讓很多人久等了。 Redis 叢集是一組能進行資料共享的Redis 例項(

Redis(一)簡介及安裝測試

一、Redis簡介:   關於關係型資料庫和nosql資料庫   關係型資料庫是基於關係表的資料庫,最終會將資料持久化到磁碟上,而nosql資料 庫是基於特殊的結構,並將資料儲存到記憶體的資料庫。從效能上而言,nosql資料庫 要優於關係型資料庫,從安全性上而言關係型資料庫要優於nosql資料庫,所以在實

redis安裝及cluster叢集環境搭建

===========================redis安裝=========================== 1.下載redis包redis-3.2.1.tar.gz 2.將redis-3.2.1.tar.gz包拷貝到/usr/local下,並解壓 3.修改資

分散式快取技術redis系列(四)——redis高階應用(叢集搭建叢集分割槽原理叢集操作)

[[email protected] redis-cluster]# mkdir /usr/local/redis-cluster/7037 && cp /usr/local/redis-cluster/7031/redis.conf /usr/local/redis-cluster

Python搭建NumpySciPyMatPlotLib環境(下載安裝測試

前言 Numpy是Python開發環境中一個獨立的函式庫; SciPy是以NumPy為基礎,一個應用更加廣泛的科學計算工具庫; MatPlotLib是一個在使用Numpy、SciPy時經常用到的一個強大的繪圖函式庫。 在安裝這三個package之前,需要

阿里雲學生機搭建sparkhadoop叢集之路)

伺服器:三臺阿里雲學生機(三個賬號,都在華南1c)系統:ubuntu一、通過外網ip登入伺服器需要修改安全組,出入方向都一樣,都加入這兩條。為何加這兩條後續慢慢說明。第一條安全組功能之一就是為了能夠本地ssh到伺服器。(網上第一條几乎所有的埠配置都是22/22,後續解釋為何改

Redis 叢集

建立完成redis例項後,使用redis-trib.tb來新建叢集 redis-trib.rb create --replicas 1 127.0.0.1:7379 127.0.0.1:7380 127.0.0.1:7381 127.0.0.1:7382 127.0.0.

前端開發工具Brackets介紹,安裝安裝Emme插件時

module 文件 不想 現在 div 當前 user 沒有 -s   對於前端開發的園友來說有可能IDE工具有很多,層次不窮,還有每個人的喜好及習慣也不一樣,因為我是一名後端開發的.Net程序員,但是大家都知道,現在都提倡什麽全棧工程師,所以也得會點前端開發,所以我對於

Redis 安裝卸載啟動

text 服務器端 開始 font serve 技術 通過 執行 根目錄 window 解壓redis 安裝包 文件信息 redis-benchmark.exe #基準測試 redis-check-aof.exe # aof redisch

Mosquitto安裝測試

下載安裝 blog config 安裝完成 line download align ins 圖片 1、官網下載安裝包,並上傳到服務器 下載地址:http://mosquitto.org/download/ 上傳服務器,並解壓: 2、進入解壓完的目錄: 3、安裝依

Redis安裝配置

技術 pac don 文件中 shu reads run rip mem 一、Redis安裝 Linux安裝 下載tar包,移至Linux目錄下 解壓:tar -zxvf redis-4.0.1.tar.gz          安裝gcc:yum install

ELK搭建

https mas reads name bin all 分析 www. hosts ELK搭建踩過的坑學習博客:http://blog.51cto.com/zero01/2082794 日誌多而雜,搜索慢--->集中式管理分布式系統--->快速定位服務器和模塊

PHP redis安裝測試——Windows

  Redis安裝 Windows下的Redis安裝: 下載地址:https://github.com/MSOpenTech/redis/releases   根據自己情況下載32位或是64位,下載完解壓到磁碟根目錄(我安裝在G盤)。資料夾重新命名為:redi

Linux下redis安裝以及遠端訪問 搭建過程綜合整理

虛擬機器以及linux安裝 VMware安裝,我安裝的版本是14.1.1.28517 虛擬機器以及linux安裝過程傳送門:點選開啟連結,虛擬機器簡簡單單的典型安裝就行 虛擬機器安裝後需要啟用,啟用碼傳送門:點選開啟連結 linux系統用的是centos7 linux系統安裝時候需要注