1. redis集羣的介紹
Redis 集羣是一個提供在多個Redis節點之間共享數據的程序集。
Redis 集羣並不支持同時處理多個鍵的 Redis 命令,因爲這需要在多個節點間移動數據,這樣會降低redis集羣的性能,在高負載的情況下可能會導致不可預料的錯誤。
Redis 集羣通過分區來提供一定程度的可用性,即使集羣中有一部分節點失效或者無法進行通訊, 集羣也可以繼續處理命令請求。
Redis 集羣的優勢:
-
緩存永不宕機:啓動集羣,永遠讓集羣的一部分起作用。主節點失效了子節點能迅速改變角色成爲主節點,整個集羣的部分節點失敗或者不可達的情況下能夠繼續處理命令;
-
迅速恢復數據:持久化數據,能在宕機後迅速解決數據丟失的問題;
-
Redis可以使用所有機器的內存,變相擴展性能;
-
使Redis的計算能力通過簡單地增加服務器得到成倍提升,Redis的網絡帶寬也會隨着計算機和網卡的增加而成倍增長;
-
Redis集羣沒有中心節點,不會因爲某個節點成爲整個集羣的性能瓶頸;
-
異步處理數據,實現快速讀寫。
2. 搭建redis集羣
2.1 下載redis安裝包並解壓
# 下載安裝包
cd /export/softwares
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
# 解壓
cd /export/softwares
tar -zxvf redis-3.2.8.tar.gz -C ../servers/
2.2 安裝C程序運行環境
yum -y install gcc-c++
2.3 安裝tcl
Tcl(tool command language)是一種簡單的腳本語言,主要使用於發佈命令給一 些互交程序如文本編輯器、調試器和shell。它有一個簡單的語法 和很強可擴充性,Tcl可以創建新的過程以增強其內建命令的能力。
其次,Tcl是一個庫包,可以被嵌入應用程序,Tcl的庫包含了一個分析器、用於執行內建命令的例程和可以使你擴充(定義新的 過程)的庫函數。應用程序可以產生Tcl命令並執行,命令可以由用戶產生,也可以從用戶接口的一個輸入中讀取(按鈕或菜單等)。但Tcl庫收到命令後將它分解並執行內建的命令,經常會產生遞歸的調用
yum -y install tcl
2.4 編譯redis
# 編譯
make MALLOC=libc 或 make
# 測試編譯是否完成
make test 或者 make install
2.5 創建redis不同實例的配置並修改
# 創建對應文件夾
cd /export/redis-3.2.8
mkdir -p /export/redis-3.2.8/clusters/7001
mkdir -p /export/redis-3.2.8/clusters/7002
mkdir -p /export/redis-3.2.8/clusters/7003
mkdir -p /export/redis-3.2.8/clusters/7004
mkdir -p /export/redis-3.2.8/clusters/7005
mkdir -p /export/redis-3.2.8/clusters/7006
mkdir -p /export/redis-3.2.8/logs
mkdir -p /export/redis-3.2.8/redisdata/7001
mkdir -p /export/redis-3.2.8/redisdata/7002
mkdir -p /export/redis-3.2.8/redisdata/7003
mkdir -p /export/redis-3.2.8/redisdata/7004
mkdir -p /export/redis-3.2.8/redisdata/7005
mkdir -p /export/redis-3.2.8/redisdata/7006
將配置文件複製到對應文件夾,然後修改配置
# 對應主機
bind hadoop1
# 端口,7001配置爲7001,7002配置爲7002,以此類推
port 7001
cluster-enabled yes
# 不同文件夾不同
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
# 同上,7001的地方都要對應不同文件夾進行修改
pidfile /var/run/redis_7001.pid
logfile "/export/redis-3.2.8/logs/7001.log"
dir /export/redis-3.2.8/redisdata/7001
2.6 啓動redis
cd /export/servers/redis-3.2.8
src/redis-server cluster/7001/redis.conf
src/redis-server cluster/7002/redis.conf
src/redis-server cluster/7003/redis.conf
src/redis-server cluster/7004/redis.conf
src/redis-server cluster/7005/redis.conf
src/redis-server cluster/7006/redis.conf
redis啓動沒有任何提醒,可以用ps -ef | grep redis
查看是否啓動
2.7 安裝ruby運行環境
redis集羣啓動需要藉助ruby環境
yum install ruby
yum install rubygems
gem install redis
如果出現ruby版本報錯,按照以下方法解決:
# 安裝rvm,rvm是ruby version Manager,ruby版本管理器
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -L https://get.rvm.io | bash -s stable
# 查找 rvm路徑
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
# 查看ruby版本
rvm list known
# 安裝高版本ruby
rvm install 2.3.3
# 使用高版本ruby
rvm use 2.3.3
# 將ruby設爲默認
rvm use 2.3.3 --default
# 卸載舊版本ruby
rvm remove 2.0.0
如果是curl報錯可以參考curl表https://www.cnblogs.com/xueyou/p/curl.html
curl命令可以參考http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
但是。。。。我的虛擬機一直訪問不了https://get.rvm.io,本地瀏覽器可以訪問,發現瀏覽器訪問https://get.rvm.io後跳轉到https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer。然鵝。。虛擬機還是訪問不了這個網站,我就徹底放棄使用curl -L https://get.rvm.io | bash -s stable
,而是選擇了一種古老的方法。。在虛擬機上創建一個.sh文件,然後將網頁上的內容複製。。再執行cat test.sh | bash -s stable
2.8 創建redis集羣
cd /export/redis-3.2.8
gem install redis
src/redis-trib.rb create --replicas 1 192.168.100.100:7001 192.168.100.100:7002 192.168.100.100:7003 192.168.100.100:7004 192.168.100.100:7005 192.168.100.100:7006
2.9 連接redis客戶端
src/redis-cli -h hadoop1 -c -p 7001