使用三台雲服務器搭建真正的Redis集群

三台雲服務器搭建redis集群#

今天花了一天的時間弄集群redis;遇到了很多坑,從頭開始吧

環境講解:

兩台配置:1核2G,另一台:1核1G;
操作系統:Centos 7.6
Redis:3.2.12
Ruby:2.3.4

由於是雲服務器所以默認安裝了JDK1.8和yum以及gcc,如果不是雲服務器的用戶請試試雲服務器吧!還是很方便的

了解什麼是Redis集群(可跳過):

答:集群,即Redis Cluster,是Redis 3.0開始引入的分佈式存儲方案。
集群由多個節點(Node)組成,Redis的數據分佈在這些節點中。集群中的節點分為主節點和從節點:只有主節點負責讀寫請求和集群信息的維護;從節點只進行主節點數據和狀態信息的複製。
集群的作用,可以歸納為兩點:

  1. 數據分區:數據分區(或稱數據分片)是集群最核心的功能。
    集群將數據分散到多個節點,一方面突破了Redis單機內存大小的限制,存儲容量大大增加;另一方面每個主節點都可以對外提供讀服務和寫服務,大大提高了集群的響應能力。
    Redis單機內存大小受限問題,在介紹持久化和主從複製時都有提及;例如,如果單機內存太大,bgsave和bgrewriteaof的fork操作可能導致主進程阻塞,主從環境下主機切換時可能導致從節點長時間無法提供服務,全量複製階段主節點的複製緩衝區可能溢出……。

  2. 高可用:集群支持主從複製和主節點的自動故障轉移(與哨兵類似);當任一節點發生故障時,集群仍然可以對外提供服務。

值得一提的是這幾天的面試遇到一個很有意思的問題(本人親身經歷):

面試官:讓你設計一個搶票或者秒殺或者紅包系統你該如何實現?

我:首先應該加鎖,然後加redis的緩存和預熱。。。

面試官:沒了?

我:我只知道這麼多。

面試官:那如果是在多個集群下呢?

我:分佈式鎖!

面試官欣慰的點頭說:那你知道分佈式鎖的實現方式嗎?

我:zookeeper和redis的redisson。

面試官:redis的分佈式集群玩過嗎?

我:沒有。。。

面試官:有空去玩玩吧,既然你沒玩過那我也不必要和你啰嗦了。

到此我的奇怪的經歷又上漲了!於是今天買了兩個測試服務器來玩玩redis的集群;

這是我的使用場景,但是現實中和面試的例子差不多,都是有需求才去接觸,(可能我比較懶~haha)
當然今天並不是說面試,我們言歸正傳;

搭建,啟動redis集群#

1、安裝Redis(三台服務器都需要安裝)

方式一:

一台全新的服務器首先需要配置密碼和SSH登錄此處我跳過;
接着可以更新yum(服務器的yum都是安裝好的)

yum update

在雲服務器中的安裝則是很簡單的;

yum install redis

安裝需要提示輸入y直接輸入!

接着安裝完成后查看安裝情況:

redis-server -v

或者

redis-server --version

都可以查看當前安裝的redis版本

方式二:

直接從官網下載gz文件

redis舊版本下載地址

一般都是3.2.12版本。所以此處以3.2.12版本為例;

下載好後上傳到雲服務器,並且解壓后,make Install 安裝

redis安裝好后,有五個文件在linux文件系統的/usr/bin中

  • redis-benchmark
  • redis-check-aof
  • redis-check-rdb
  • redis-cli
  • redis-sentinel
  • redis-server

還有一個配置文件在/etc中:

  • redis.conf

現在我們在/usr/local下創建一個文件名叫redis

cd /usr/local
mkdir redis

接着創建兩個文件夾:

cd redis
mkdir redis-01
mkdir redis-02

接着將上述的文件分別複製到這兩個01和02文件內,
這是為了方便我們更好的在本機調用:

2、安裝Ruby(只需要一台安裝即可)

很多小夥伴會有疑問說為什麼需要ruby呢?

因為在redis/src中有一個文件叫做redis-trib.rb,這個文件就是作者用Ruby寫的,用來搭建redis集群(redis3.0版本時才開始支持集群),redis-trib.rb的後綴就是Ruby的簡寫,所以想要搭建redis集群需要有一個能執行.rb這種文件的運行環境,這個環境就是Ruby。

接着又會有小夥伴說:這個安裝簡單!直接 yum install ruby!
你要是這麼想的話,會浪費你將近5-10分鐘的時間(取決你的網速)因為你需要安裝后升級它!

升級的教程我直接用別人的了:[Ruby升級教程](https://www.cnblogs.com/qize/p/11394841.html](https://www.cnblogs.com/qize/p/11394841.html “Ruby升級教程”) 在此也感謝這個博主所寫的經驗教程

一般雲服務器如果安裝的redis是3.2.12,那麼你的ruby使用yum安裝的話一定是2.0版本的!
這個和我們使用的ruby操作redis集群不適應!
所以人生苦短:

wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.5.tar.gz

接着解壓下載好的ruby:

tar -xzvf ruby2.4.5

接着cd ruby2.4.5執行下面的命令

./configure –-prefix=/usr/local/ruby -prefix

是將ruby安裝到指定目錄,也可以自定義

make && make install

檢查Ruby安裝情況:

ruby -v

不出意外應該是可以显示版本的,之後安裝這個gem的依賴

yum install rubygems

接着我們需要繼續安裝Redis操作工具

gem install redis

3、檢查配置文件(三台服務器都需要)

上述說到我們有兩個文件:redis-01和redis-02,應該是這樣的

現在需要修改每一個配置文件:

daemonize yes
port 6379(每台機器的端口可以指定為兩個;比如6379和6380)
dbfilename dump-此處添加你的端口.rdb
pidfile /var/run/redis-此處添加你的端口.pid
requirepass 在此輸入你的密碼
masterauth 輸入和上述密碼一樣的
cluster-enabled yes 啟用集群
cluster-config-file nodes-此處添加你的端口.conf
cluster-node-timeout 15000(默認你過期時間15s)

此處網上有很多提示說你的bind屬性為什麼不加呢?
很多小夥伴加了bind屬性反而不能運行redis,剛開始我也犯了這樣的錯誤,後來我發現,雲服務器上的redis
其實不需要加bind屬性綁定端口也可以跑集群。

現在我一共是三台機器:每台上面有兩個redis實例,都分別綁定了6379和6380端口

至此我們的配置文件就結束了。

4、放行端口(三台服務器都需要)

根據不同雲服務器供應商需要進入不同的控制台管理界面;

但是每台服務器的安全組都需要開放對應的端口:

我的三台服務器我就需要為每台服務器開啟入口6379和6380端口;
但是千萬不要以為這就結束了!

redis集群還需要一個總線端口,這個總線端口是你redis實例佔用端口+10000;

比如我一台服務器開了兩個redis實例:6379和6380,那麼他的總線端口救為16379和16380;

需要在安全組同時開放這兩個端口。

啟動集群

回到我們剛剛安裝redis的那台服務器,現在我們來試試啟動redis集群

要啟動redis;需要找到你的 redis-trib.rb 這個文件

一般雲服務器的安裝redis是沒有這個文件的,但是如果你用解壓安裝的redis是有集群的文件

所以需要你自己從官網拷貝比如我的是3.2.12就需要從官網下載。

redis舊版本下載地址

具體安裝見方式二

之後再redis/src下找到 redis-trib.rb 這個文件

把他複製到/usr/local/redis裏面

接下來重中之重的是需要清空/var/lib/redis裏面的所有rdb和conf文件!

之後就可以啟動三個服務器上的redis了

啟動完成可以用 ps -ef|grep redis 查看實例啟動詳情

一般啟動成功是這個樣子

之後回到安裝了ruby的服務器:

cd /usr/local/redis

執行下面命令

./redis-trib.rb create --replicas 1 第一台服務器公網IP地址:6379 第一台服務器公網IP地址:6380 第二台服務器公網IP地址:6379  第二台服務器公網IP地址:6380 第三台服務器公網IP地址:6379 第三台服務器公網IP地址:6380

至此服務器應該是啟動成功了。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

您可能也會喜歡…