最近發現redis的內存空間不夠實用了,發現是服務器太舊了導致亂七八糟的都佔了不少存儲和內存。而且服務器的性能也比較差。但是服務器還是蠻多的(5臺左右),如果說換新的又可惜。所以找了一種redis集羣的搭建方式來部署redis高可用集羣環境。以下就是搭建的過程。給自己做一個總結和筆記。
準備環境
1.redis-6.0.5
2.三臺服務器 10.172.246.231、10.172.246.232、10.172.246.233 (231、232、233)
一、下載redis到服務器
可以自行去官網下載redis然後上傳的服務器中,如果服務器可以連接外網則可以直接使用官方提供的鏈接來下載
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
本人使用的是redis的最新版本 6.0.5
並解壓到指定目錄
tar xzf redis-6.0.5.tar.gz
二、在各個服務器上安裝解壓後的redis
官網上說明的是直接在壓縮後的文件夾中使用make
$ wget http://download.redis.io/releases/redis-6.0.5.tar.gz
$ tar xzf redis-6.0.5.tar.gz
$ cd redis-6.0.5
$ make
但是我本地並沒有安裝gcc和tcl所以先進行安裝後再make
使gcc 9 作爲長久運行版本
$ yum install tcl
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
$ cd redis-6.0.5
$ make
$ make install
三、在每臺服務器上拷貝兩個實例,然後修改配置文件
服務器 | 主備關係 | 端口 |
---|---|---|
231 | 主 | 33331 |
232 | 主 | 33332 |
233 | 主 | 33333 |
231 | 備 --> 232.33332 | 33334 |
232 | 備 --> 233.33333 | 33335 |
233 | 備 --> 231.33331 | 33336 |
Redis 集羣有16384個哈希槽,每個key通過CRC16校驗後對16384取模來決定放置哪個槽.集羣的每個節點負責一部分hash槽
所以通常的redis集羣在某一個節點掛掉後都會導致集羣不可用。而這樣三臺服務器做集羣時就可以保證在任意一臺服務器掛了的情況下redis集羣都可以正常運行(因爲備節點和主節點不在同一臺服務器上)。
1.新建對應文件夾,放入redis-server和redis.conf文件
$ mkdir reids01 redis04
$ cp redis-6.0.5/src/redis-server /redis01
$ cp redis-6.0.5/src/redis-server /redis04
$ cp redis-6.0.5/redis.conf /redis01
$ cp redis-6.0.5/redis.conf /redis04
2.修改各自的配置文件(只展示需要修改的部分)
$ vim redis01/redis.conf
#是否開啓保護模式,默認開啓。要是配置裏沒有指定bind和密碼。開啓該參數後,redis只會本地進行訪問,拒絕外部訪問。
protected-mode no
#redis監聽的端口號
port 33331
#是否在後臺執行,yes:後臺運行;no:不是後臺運行
daemonize yes
#redis的進程文件
pidfile /var/run/redis_33331.pid
# 指定了記錄日誌的文件。空字符串的話,日誌會打印到標準輸出設備。後臺運行的redis標準輸出是/dev/null
logfile /usr/local/redis/redis01/redis33331.log
# 指定本地數據庫文件名,一般採用默認的 dump.rdb
dbfilename dump33331.rdb
# 數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
dir ./
# 集羣
cluster-enabled yes
# 生成的node文件,不過不指定名稱則直接爲nodes.conf。在同一臺服務器上啓動第二個實列的時候就會報錯。因爲nodes.conf文件發生衝突
cluster-config-file nodes33331.conf
修改的配置名稱需要自行靈活修改 如:端口爲33332則上文中33331的地方均需要改爲33332
也可以根據自己的需要來進行修改但是需要注意的是
同一臺服務器上的cluster-config-file、dbfilename 名稱不能一致、IP端口也不能一致
再修改完後啓動各個服務器上的實列
四、創建集羣
根據網上說的使用Ruby
創建集羣時 在6.0.5裏面會給你提示,讓你使用redis-cli
創建集羣,並會提示給你使用的語句使其和redis-trib.rb
達到一致的效果(可以不用再單獨的安裝Ruby)
原本使用redis-trib.rb
的語句
$ ./redis-trib.rb create --replicas 1 10.172.246.231:33331 \
10.172.246.232:33332 \
10.172.246.233:33333 \
10.172.246.232:33335 \
10.172.246.233:33336 \
10.172.246.231:33334
提示使用的redis-cli
語句(最好自己打 ,因爲我是自己打的。到時候少空格或符號別bb ~~)
$ ./redis-cli --cluster create 10.172.246.231:33331 \
10.172.246.232:33332 \
10.172.246.233:33333 \
10.172.246.232:33335 \
10.172.246.233:33336 \
10.172.246.231:33334 \
--cluster-replicas 1
可以看出兩個語句都差不多,而且語句意思也差不多
--cluster-replicas
表示主備的比例關係 1 表示一個主節點對應一個備節點
前三個 ip:port 默認表示主節點,後面的依次爲前三個主節點的備份節點
(敲黑板)(敲黑板)(敲黑板)注意 :
我這裏第4個節點寫的時232:33335而不是231:33334因爲 第四個節點是第一個節點的備節點,爲了保證高可用(在任意一臺服務器掛了的情況下都不影響redis集羣的使用)所以主備節點不可以在同一臺服務器上(如果主備節點在同一臺服務器上則備節點也沒有太大的意義了)。所以要錯開對應。
如:在231服務器掛了的情況下 231:33331的備節點爲233:33336。這時備節點充當主節點繼續工作。可以使redis集羣正常運行。
它會羅列出集羣的對應關係來讓你確定。輸入 yes完成集羣創建。
五、測試
可以看到放入的哈希槽爲 [12182]也屬於233:33333所管控的節點,所以就直接跳轉到233:33333來獲取剛纔放入的數據