1. 程式人生 > >公司內網、離線安裝redis叢集

公司內網、離線安裝redis叢集

環境準備:

  • Ruby環境(叢集搭建需要用ruby建立, ruby環境在2.2以上。)
  • rubygems-2.7.4.tgz 和 redis-3.2.2.gem (後面的是redis叢集需要的ruby外掛,rubygems是ruby的一個包管理工具,通過rubygems安裝redis-3.2.2.gem。)
  • centos7,注意安裝系統的基礎環境,包括zlib和openssl。

安裝步驟

1、解壓安裝redis

cd /usr/local/
mkdir redis
將redis放到redis目錄下
tar -vxf redis-4.0.7.tar.gz
make

報錯

æ¥é

說明系統沒有安裝gcc的環境,無法進行編譯。

1.1、安裝gcc

包括:

ppl-0.10.2-11.el6.x86_64.rpm 

cloog-ppl-0.15.7-1.2.el6.x86_64.rpm 

mpfr-2.4.1-6.el6.x86_64.rpm

cpp-4.4.6-4.el6.x86_64.rpm

kernel-headers-2.6.32-279.el6.x86_64.rpm

glibc-headers-2.12-1.80.el6.x86_64.rpm

glibc-devel-2.12-1.80.el6.x86_64.rpm

libstdc++-devel-4.4.6-4.el6.x86_64.rpm

gcc-4.4.6-4.el6.x86_64.rpm

gcc-c++-4.4.6-4.el6.x86_64.rpm

百度雲連結:

http://pan.baidu.com/s/1kVA1pqv

安裝

rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm  rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm  rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm  rpm -ivh cpp-4.4.7-4.el6.x86_64.rpm  rpm -ivh kernel-headers-2.6.32-431.el6.x86_64.rpm  rpm -ivh glibc-headers-2.12-1.132.el6.x86_64.rpm  rpm -ivh glibc-devel-2.12-1.132.el6.x86_64.rpm  rpm -ivh gcc-4.4.7-4.el6.x86_64.rpm  rpm -ivh libstdc++-devel-4.4.7-4.el6.x86_64.rpm  rpm -ivh gcc-c++-4.4.7-4.el6.x86_64.rpm 

å®è£ä¾èµ

一定要按順序進行安裝

部分安裝提示already installed,沒關係,

執行完,gcc就安裝成功了

1.2、重新make

如果報錯:

makeæ¥é

解決辦法:make 後面帶引數

make MALLOC=libc
make install 
cd src
./redis-server

å¼å¯æå

看到這個介面redis單機版啟動成功,驗證: 另外開啟一個連線,到根目錄下執行

./redis-cli
ping

如果有響應,則redis單機版本安裝成功。

ååº

2、配置叢集環境(三臺機器,6個節點,至少需要6個節點。每臺機器部兩個節點)

根據上述步驟在每臺機器兩個目錄下配置兩個redis

例,樓主在 /usr/local/redis-cluster/

下新建了7000和7001兩個資料夾,分別配置兩個redis並配置不同的埠號,具體步驟如下:

2.1、建立叢集目錄

在/usr/local/目錄下執行建立redis_cluster目錄:

mkdir redis_cluster
cd redis_cluster/
mkdir 7000
mkdir 7001

2.2、配置redis.conf

將redis.conf拷貝到這兩個目錄中去:(redis.conf在安裝目錄下)

cp redis.conf ./redis_cluster/7000
cp redis.conf ./redis_cluster/7001

修改每個redis.conf的配置,需要修改的內容如下:

port 7000    //配置叢集的埠,分別是7000、7001
bind 本機的IP 127.0.0.1    // 這裡的預設配置是127.0.0.1前面加上內網ip。
daemonsize yes   //允許redis在後臺執行
pidfile  /var/run/redis_7000.pid  //改成和埠一致
cluster-enabled  yes   // 開啟叢集 把註釋去掉
cluster-config-file node_7000.conf  //叢集的配置,和埠一致
cluster-node-timeout  15000  // 請求超時,預設為15秒
appendonly  yes // aof日誌開啟,有需要就開啟,每一次寫操作都會記錄一條日誌。

修改完成之後啟動服務:

cd src/
./redis-server ../redis_cluster/7000/redis.conf

依次啟動所有節點:

檢視啟動情況:

2.3、另外兩臺機器執行相同的操作

另兩臺機器的redis埠同樣分配為:7000、7001,然後修改對應的主機ip 和 127.0.0.1,例如bind 192.168.88.88 127.0.0.1。

3、安裝ruby環境

3.1、下載、安裝ruby

mkdir /usr/local/ruby
cd ruby/
把包放到改目錄下
tar -vxf ruby-2.5.0.tar.gz
cd ruby-2.5.0/
./configure
make && make install

驗證: ruby -v

éªè¯rubyç¯å¢

3.2、下載安裝rubygems

cd /usr/local
mkdir rubygems
把檔案放到該目錄下
tar -vzxf rubygems-2.7.4.tgz
cd rubygems-2.7.4/
ruby setup.rb

報錯:

æ¥é

解決辦法:缺少了zlib包,需要下載並安裝zlib

3.2.1、下載安裝zlib

cd /usr/local
mkdir zlib
tar -vxf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=/usr/local/zlib
make
make install

3.2.2、編譯 ruby 中的zlib

cd /usr/local/ruby-2.5.0/ext/zlib/
ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib
make

又報錯:

æ¥é

解決辦法:執行完extconf.rb之後會生成一個Makefile vim Makefile解決方案

把$(top_srcdir) 換成 ../../ 然後再make make make install

錯誤都解決之後,回到安裝rubygems的步驟。 進入rubygems的安裝目錄,執行ruby setup.rb

cd /usr/local/rubygems/rubygems-2.7.4
ruby setup.rb

安裝成功:安裝成功

4、安裝ruby-redis外掛

4.1.1、下載redis-3.2.2.gem

剛剛安裝rubygems就是為了安裝這個外掛。 把檔案放到 /usr/local/redis 目錄下。

gem install redis-3.2.2.gem

又報錯:報錯

解決辦法:缺少OpenSSL,下載安裝。

4.1.2、下載安裝OpenSSL

這個問題和zlib的解決方案類似,可類比解決。

cd /usr/local
mkdir openssl
tar -xvf openssl-1.0.2n.tar.gz 
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install

安裝成功:安裝成功

4.1.3、編譯ruby中的openssl

cd /usr/local/ruby/ruby-2.5.0/ext/openssl/
ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
make

報錯:報錯

解決辦法:vim Makefile 把所有的 $(top_srcdir) 換成 ../.. 注意替換所有解決辦法

make && make install

安裝成功:安裝成功

然後回到安裝 redis-3.2.2.gem ,在redis目錄下安裝。

gem install redis-3.2.2.gem

安裝成功:安裝成功

叢集的操作

可以使用視覺化工具檢視和管理redis叢集。

1、建立一個叢集

執行以下命令:

./redis-trib.rb create --replicas 1 192.168.43.96:7000 192.168.43.97:7001 192.168.43.97:7001 192.168.43.98:7000 192.168.43.98:7001 192.168.43.96:7001

建立集群后,命令提示

can i set the above configuration?(type ‘yes’ to accept) 

這裡輸入yes,回車。

頁面會顯示

redis cluster Waiting for the cluster to join............................................................

顯示個不停,樓主以為自己沒有配置好,其他叢集連不上了,後來通過查詢相關資料發現:

redis叢集不僅需要開通redis客戶端連線的埠,而且需要開通叢集匯流排埠

叢集匯流排埠為redis客戶端連線的埠 + 10000

如redis埠為6379

則叢集匯流排埠為16379

故,所有伺服器的點需要開通redis的客戶端連線埠和叢集匯流排埠

注意:iptables 放開,如果有安全組,也要放開這兩個埠

摘csdn自——海拉姆

上面一段話,說白了就是每個redis節點以及每個redis叢集匯流排的埠被防火牆阻塞了,需要開放相應端口才能連通:

檢視防火牆狀態:

# /etc/init.d/iptables status

如果得到一系列的資訊,說明防火牆處於開啟狀態。

MySQL預設埠3306,Linux防火牆預設是阻止的。

檢視3306埠是否開放:

# lsof -i:3306

如果有顯示說明已經開放了.如果沒有顯示說明沒有開放 【Linux公社 http://www.linuxidc.com 】

要訪問3306可以用兩種方式,一個是關閉防火牆,另一個就是讓防火牆開放3306埠。

一、開放3306埠:

方法一:

# iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT # iptables  -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT

對應阻止3306埠的命令為:

# iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP # iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP

然後儲存 # /etc/rc.d/init.d/iptables save

方法二:

1、修改/etc/sysconfig/iptables檔案,增加如下一行:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

然後重啟防火牆:

# service iptables restart

二、關閉防火牆:

兩種方式:

1)重啟後生效:

# chkconfig iptables off        ( 對應的開啟防火牆命令為: # chkconfig iptables on )

2)即時生效,但重啟後防火牆會再次啟動:

# service iptables stop        ( 對應的開啟防火牆命令為: # service iptables start )

執行以上紅色字型部分命令,開放三臺機器7000、7001、17000、17001共4*3=12個節點的埠,並重啟防火牆。

接下來,需要關閉六個節點的redis服務,並刪除appendonly.7000.aof、appendonly.7001.aof及對應nodes.conf,重啟redis服務,並重新執行:

./redis-trib.rb create --replicas 1 192.168.43.96:7000 192.168.43.97:7001 192.168.43.97:7001 192.168.43.98:7000 192.168.43.98:7001 192.168.43.96:7001

同樣敲入yes,則可以看到以下介面:

2、連線叢集

cd /usr/local/redis/redis-4.0.7/src
./redis-cli -p 7000 -c -h 192.168.43.97

 引數說明: -p port 埠 -h host 主機 -c cluster 叢集

連線進叢集之後 輸入ping , 如果響應了pong 表示連線叢集成功:

響應

連線進叢集之後可以檢視當前叢集的資訊和節點的資訊 CLUSTER INFO 列出當前節點的資訊列出當前節點

CLUSTER NODES 列出當前叢集中的節點資訊當前節點資訊

前面一段很長的字串就是節點的id。從這個命令可以知道哪些節點還活著,哪些節點已經掛了。埠後面帶著fail的都是掛掉的節點。

3、關閉一個節點

退出叢集連線才能關閉某一個節點:

./redis-cli -c -h 192.168.43.98 -p 7000 shutdown

這條命令的意思是關閉98機器上埠為7000的redis節點。 關閉之後可以連線叢集去執行 CLUSTER NODES ,這個節點的狀態已經是fail。

4、節點加入、移出叢集

新增一個節點之前務必保證該節點已經啟動了,如果該節點之前在建立叢集時已經在叢集裡面了,關閉該節點然後再重新啟動,該節點會自動加入叢集。

 ./redis-server ../redis_cluster/7000/redis.conf 

然後連線進叢集,如果該節點之前不在叢集中,連線叢集輸入cluster meet 命令就可以指定某個節點加入叢集。

CLUSTER MEET 192.168.43.98:7000
CLUSTER forget fd72b78b1eaa430ca309bc5226d90fe67199a576 

這個一長段字串是節點的id,forget之後可以再去看節點的資訊。節點資訊

forget之後,如果一分鐘不進行任何操作,該節點會自動加入叢集。