使用三台雲服務器搭建真正的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的數據分佈在這些節點中。集群中的節點分為主節點和從節點:只有主節點負責讀寫請求和集群信息的維護;從節點只進行主節點數據和狀態信息的複製。
集群的作用,可以歸納為兩點:
-
數據分區:數據分區(或稱數據分片)是集群最核心的功能。
集群將數據分散到多個節點,一方面突破了Redis單機內存大小的限制,存儲容量大大增加;另一方面每個主節點都可以對外提供讀服務和寫服務,大大提高了集群的響應能力。
Redis單機內存大小受限問題,在介紹持久化和主從複製時都有提及;例如,如果單機內存太大,bgsave和bgrewriteaof的fork操作可能導致主進程阻塞,主從環境下主機切換時可能導致從節點長時間無法提供服務,全量複製階段主節點的複製緩衝區可能溢出……。 -
高可用:集群支持主從複製和主節點的自動故障轉移(與哨兵類似);當任一節點發生故障時,集群仍然可以對外提供服務。
值得一提的是這幾天的面試遇到一個很有意思的問題(本人親身經歷):
面試官:讓你設計一個搶票或者秒殺或者紅包系統你該如何實現?
我:首先應該加鎖,然後加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
至此服務器應該是啟動成功了。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※南投搬家公司費用需注意的眉眉角角,別等搬了再說!
※教你寫出一流的銷售文案?