1. 程式人生 > >redis搭建三主三從架構

redis搭建三主三從架構

最近有在學redis,這次就模仿著搭建了一個。本來網上也有很多版本,不過按照百度出來的內容進行搭建總是有各種問題,磕磕碰碰總算搭建成功,在此記錄一下,供大家瞭解,防止以後自己忘記。

一、系統環境

VMware中安裝了三個centOS7系統,redis的版本是redis-3.2.1。

二、架構說明

三臺虛擬機器充當三臺伺服器,共六個例項,形成三主三從,其中儲存相同資料的主從節點不能落在同一臺機器上,目的是防止部署的Redis的虛擬機器宕機從而造成主從節點全部失效。實驗機器的地址與埠如下:

192.168.200.131 7000
192.168.200.131 7001
192.168.200.132 7000
192.168.200.132 7001
192.168.200.133 7000

192.168.200.133 7001

三、安裝

mkdir /root/software
cd /root/software

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzf tcl8.6.1-src.tar.gz -C /usr/local
cd /usr/local/tcl8.6.1/unix/
./configure                             //檢測安裝平臺的目標特徵的。比如它會檢測該平臺是不是有CC或GCC。
make                                      //進行編譯,它從Makefile中讀取指令,然後編譯。

make install                           //進行安裝,它也從Makefile中讀取指令,安裝到指定的位置。

wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar –xzf redis-3.2.1.tar.gz
mv redis-3.2.1 /usr/local/redis
cd /usr/local/redis
make
make install

mkdir /usr/local/cluster
cd /usr/local/cluster
mkdir 7000 7001
cp /usr/local/redis/redis.conf /usr/local/cluster/7000

cp /usr/local/redis/redis.conf /usr/local/cluster/7001

vim /usr/local/cluster/7000/redis.conf
vim /usr/local/cluster/7001/redis.conf
修改redis.conf配置檔案中下面選項(7001重複下面7000的情況),如:
port 7000                      //指定當前Redis服務的埠,預設為6379 ,7001的修改成port 7001
daemonize yes              //配置redis作為守護程序執行
cluster-enabled yes      //叢集啟用,開啟叢集功能
bind 192.168.200.131   //繫結IP,即繫結本地迴環地址。開啟這個配置時,redis 只接收來自於該 IP 地址列表的請求,如果不                                          進行設定,那麼將處理所有請求。
appendonly yes            //配置資料持久化, 開啟aof日誌。有需要就開啟,它會每次寫操作都記錄一條日誌
protected-mode no      //關閉protected-mode模式,這樣便可以通過指定配置檔案啟動,如下方命令啟動redis服務

                                         /usr/local/redis/src/redis-server /usr/local/cluster/7000/redis.conf

在防火牆中對埠7000、7001開放:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent

firewall-cmd –reload

7000與7001的redis.conf配置檔案修改完後,開啟主從redis服務:
/usr/local/redis/src/redis-server /usr/local/cluster/7000/redis.conf

/usr/local/redis/src/redis-server /usr/local/cluster/7001/redis.conf

上述內容在三個伺服器上全部執行過後,檢視redis服務是否全部啟起來了,若是,則準備建叢集。

四、建叢集

為了使用主從節點不落在同一臺機器上,使用如下命令:每臺IP +埠交叉

/usr/local/redis/src/redis-trib.rb create --replicas 1 192.168.200.131:7000 192.168.200.133:7001 192.168.200.132:7000 192.168.200.131:7001 192.168.200.133:7000 192.168.200.132:7001


如果沒有報錯,那就證明你叢集建立成功,下面的內容即可忽略,下面的內容是我建立叢集過程中遇到的幾個問題。

1、注意:如果建立叢集可能出現的報錯應該是會提示你沒有ruby,這時你需要安裝ruby。我第一次通過yum install ruby安裝的ruby版本是2.0.0的,這是因為在centos7中預設ruby是2.0.0版本,而低於redis4.0.6最低的最低要求的2.2版本,就好比我的報錯是提醒我ruby版本要大於等於2.2.2版本,所以需要進行升級或者直接安裝高版本的ruby。

wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
tar –xzf ruby-2.5.0.tar.gz –C /usr/local
cd /usr/local/ruby-2.5.0
./configure
make
make install

如果ruby安裝正常,輸入ruby –v命令將會輸出ruby的版本號。

2、當你安裝好ruby後,去建叢集,可能會遇到如下報錯,
 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
這是因為沒裝redis的第三方介面!既然ruby程式要訪問redis資料庫,總得有個連線介面。輸入命令 " gem install redis " 就能進行第三方介面安裝。
不過安裝第三方介面時也可能會報錯
ERROR:  Loading command: install (LoadError) no such file to load – zlib               //原因是gem執行缺少zlib庫支援
ERROR:  Loading command: install (LoadError) no such file to load – openssl        //原因是gem執行缺少openssl庫支援

對於這兩種報錯,安裝zlib庫和openssl庫就好了方法如下:

2.1、安裝zlib庫
yum install zlib-devel
cd /usr/local/ruby-2.5.0/ext/zlib          //進入到ruby安裝目錄下的ext/zlib位置

ruby extconf.rb                                   //在操作下一步之前需要在Makefile檔案中給路徑變數top_srcdir賦值,這個值就是ruby的安裝路徑,如下圖,如果不賦值,進行下一步make時會報錯


make && make install

2.2、 安裝openssl庫(與安裝zlib庫類似)
yum install openssl-devel
cd /usr/local/ruby-2.5.0/ext/openssl     //進入到ruby安裝目錄下的ext/openssl位置
ruby extconf.rb          //同樣在操作下一步之前需要在Makefile檔案中給路徑變數top_srcdir賦值,這個值就是ruby的安裝路徑,如下圖,如果不賦值,進行下一步make時會報錯
 

make && make install

zlib庫和openssl庫安裝好後,再進行安裝redis第三方介面的操作,如下:

gem install redis

最後確認一下三臺伺服器上有無防火牆開啟,若開啟,則需要新增防火牆白名單或者關閉防火牆。因為時間有限,我這邊是先關閉防火牆,之後有時間再新增白名單方式。(從生產環境的角度肯定是要開啟防火牆的,另外,centOS7的預設防火牆是firewall)

最終結果就如第四步驟一開始所示,顯示redis三主三從叢集建立成功,圖片再貼一次


以上是我搭建過程中的整體情況,如果有問題,還望各位指出,謝謝。