從0到1在Linux上搭建Redis 6.0的Cluster集群教程


Redis集群模式分三種方式:

1、主從模式,這里通常指的是,主down后,需要手動升級從庫為主庫。主庫支持讀寫,從庫只讀。至少兩個redis實例

2、哨兵模式,是1模式的加強,由哨兵模式自動選舉從庫中的某一個為主庫。解決高可用問題。至少三個redis實例

3、Cluster集群模式,除了解決高可用問題外,還解決大量數據存儲問題,通過slot方式路由到不同的服務器組中。至少3台服務器,六個redis實例。

詳細的介紹請參閱:https://blog.csdn.net/miss1181248983/article/details/90056960

 

下面介紹如何搭建Cluster集群模式。

1、首選准備三台阿里雲機器,ip分別如下

s1:172.16.213.251

s2:172.16.213.250

s3:172.16.213.246

注意:建議盡量不要選擇Aliyun Linux操作系統,會遇到各種奇怪奇葩的問題,筆者用Aliyun linux花費大量時間,並未安裝成功,客服也僅僅只給建議,無奈換回主流的CenterOS,下面是三台服務器的版本情況

lsb_release -a

 

2、安裝Redis 6.0.10版本的,檢查服務器環境是否滿足

gcc -v #檢查gcc版本,需要是8.3+的

 

 

3、安裝tcl,否則編譯redis的時候不通過,這里安裝的時候直接使用rpm編譯好的包執行安裝即可。

小tips:國內有很多linux軟件鏡像,這里采用阿里雲的鏡像網站https://developer.aliyun.com/packageSearch?word=tcl,點開后直接搜索即可,注意使用自己需要的版本

rpm -ivh https://mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os/Packages/tcl-8.6.8-2.el8.x86_ 64.rpm?spm=a2c6h.13651111.0.0.70662f7099C6CD&file=tcl-8.6.8-2.el8.x86_64.rpm 
#使用上面命令進行安裝,注意安裝的時候要重新獲取一次rpm安裝包地址,輸入命令回車,一會之后再回車一次,即可以看到Done安裝完成!

4、下載Redis,我們默認放到/usr/local/redis-6.0.10文件夾

cd /usr/local

wget https://download.redis.io/releases/redis-6.0.10.tar.gz

tar -zvxf redis-6.0.10.tar.gz

cd redis-6.0.10/

make && make test && make install #也可以分步執行,看到下面截圖的命令基本代表已經安裝成功了。注意請確保gcc和tcl已經安裝了對應版本,否則make可能不通過。

5、下面要做6個redis實例,因為我們用了3台服務器,所以每台服務器會安裝兩個實例,具體如下:

172.16.213.251 7377端口 s1
172.16.213.251 7477端口 s1
172.16.213.250 7377端口 s2
172.16.213.250 7477端口 s2
172.16.213.246 7377端口 s3
172.16.213.246 7477端口 s3

 

 

 

 

 

 

 

注意:提前開啟阿里雲服務器對應端口號

6、下面以一台服務器為例,安裝實例

cp redis_init_script /etc/init.d #在/usr/local/redis-6.0.10目錄下,拷貝redis_init_script文件到/etc/init.d目錄下
mv redis_init_script redis_7477  #進入/etc/init.d目錄,並改名稱為redis_7477,修改redis_7477腳本的第6行的REDISPORT,設置為相同的端口號7477

#同時為了后續設置Redis開啟啟動,該文件頂部需要加上如下代碼段,整體的文件注意如下截圖
#!/bin/sh
# chkconfig: 2345 10 90
# description: Start and Stop redis

 

 

7、創建四個目錄

  • /etc/redis(存放redis的配置文件)
  • /var/redis/7477(存放redis的持久化文件)
mkdir -p /etc/redis
mkdir -p /var/redis/7477
mkdir -p /etc/redis-cluster #集群用
mkdir -p /var/log/redis #日志

8、修改redis實例的配置文件(默認在根目錄下/usr/local/redis-6.0.10,redis.conf),拷貝到/etc/redis目錄中,修改名稱為7477.conf

cp /usr/local/redis-6.0.10/redis.conf /etc/redis
mv redis.conf 7477.conf

9、修改redis.conf中的部分配置

    • port 7477
    • cluster-enabled yes
    • cluster-config-file /etc/redis-cluster/node-7477.conf
    • cluster-node-timeout 15000
    • daemonize yes
    • pidfile /var/run/redis_7477.pid
    • dir /var/redis/7477
    • logfile /var/log/redis/7477.log
    • bind 0.0.0.0(這里代表通過本機哪個網卡過來的請求是可以被響應的,此處設計非常巧妙,一般設置內網bind 127.0.0.1 內網ip 即可,但實際做了開機啟動后,會發現通過內網ip無法連接的情況,顧干脆設置0.0.0.0問題可解決。https://www.cnblogs.com/kingsonfu/p/10138647.html
    • appendonly yes
    • requirepass 設置密碼
    • masterauth  設置密碼,必須等同於requirepass,也可以密碼留空

 

 

 10、liunx常用命令提示

ls        #列出文件
ls -l     #列出文件詳情
chmod 777 文件名 #設置可執行文件
ps -ef|grep redis #列出包含redis字符的文件名字
cat 文件名字 #查看文件內容
vi  文件名字 #編輯文件內容,按住i,執行插入,esc退出,按/輸入字符,代表查找,查找情況下按n,代表查找下一個,shift z z代表保存並退出

11、上述執行完單redis實例的安裝,不出意外,環境的配置已經安裝好了。可以通過如下命令啟動下試試

cd /etc/init.d
chmod 777 redis_7477
./redis_7477 start
#檢查是否正常啟動
ps -ef|grep redis

12、參考文章

https://www.cnblogs.com/blueskyli/p/9045930.html

https://www.cnblogs.com/blueskyli/p/9084548.html

13、搭建集群,按照上述步驟,分別在3台服務器,設置6個實例

14、構建集群,注意6.0一起版本的redis要求安裝ruby環境,6.0之后不需要安裝 ,此處我們不用安裝,直接構建集群即可

[root@iZbp145wkv4vf3oba7qge2Z bin]# redis-cli -a 密碼 --cluster create 172.16.213.251:7377 172.16.213.251:7477 17
2.16.213.250:7377 172.16.213.250:7477 172.16.213.246:7377 172.16.213.246:7477 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.16.213.250:7477 to 172.16.213.251:7377
Adding replica 172.16.213.246:7477 to 172.16.213.250:7377
Adding replica 172.16.213.251:7477 to 172.16.213.246:7377
M: c83d02fcd82160d722be1fd6af92a2701c7f83d9 172.16.213.251:7377
slots:[0-5460] (5461 slots) master
S: 1ec9adecf00dfc19b4a1176fafc870256d651eae 172.16.213.251:7477
replicates 7a5690b1f833c2bae448bf978285c9c7e1238c93
M: 214a974eaf9ac38bcf6b46f85baa39a4db671eab 172.16.213.250:7377
slots:[5461-10922] (5462 slots) master
S: 39ead0048c4bbbdb0bc6b9516962070e286648af 172.16.213.250:7477
replicates c83d02fcd82160d722be1fd6af92a2701c7f83d9
M: 7a5690b1f833c2bae448bf978285c9c7e1238c93 172.16.213.246:7377
slots:[10923-16383] (5461 slots) master
S: c9516b62ebcd8fe888d4bc46a4190be412894fd4 172.16.213.246:7477
replicates 214a974eaf9ac38bcf6b46f85baa39a4db671eab
Can I set the above configuration? (type 'yes' to accept): yes ####這里要輸入yes,不能輸入y哦!!!
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 172.16.213.251:7377)
M: c83d02fcd82160d722be1fd6af92a2701c7f83d9 172.16.213.251:7377
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 214a974eaf9ac38bcf6b46f85baa39a4db671eab 172.16.213.250:7377
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 39ead0048c4bbbdb0bc6b9516962070e286648af 172.16.213.250:7477
slots: (0 slots) slave
replicates c83d02fcd82160d722be1fd6af92a2701c7f83d9
S: 1ec9adecf00dfc19b4a1176fafc870256d651eae 172.16.213.251:7477
slots: (0 slots) slave
replicates 7a5690b1f833c2bae448bf978285c9c7e1238c93
S: c9516b62ebcd8fe888d4bc46a4190be412894fd4 172.16.213.246:7477
slots: (0 slots) slave
replicates 214a974eaf9ac38bcf6b46f85baa39a4db671eab
M: 7a5690b1f833c2bae448bf978285c9c7e1238c93 172.16.213.246:7377
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@iZbp145wkv4vf3oba7qge2Z bin]#

 

 

 

 

15、至此,我們搭建完成了集群環境。一共6個redis實例,3主3從。其中對於命令

redis-cli -a 密碼 --cluster create 172.16.213.251:7377 172.16.213.251:7477 17
2.16.213.250:7377 172.16.213.250:7477 172.16.213.246:7377 172.16.213.246:7477 --cluster-replicas 1

-a 代表是加密鏈接,后面的ip組,排序不用關心,redis會按照主和從不在一台服務器上的原則,幫助構建主從情況,當然down機之后主從也會跟着去變換。--cluster-replicas 1代表主從的比例是1:1,有條件也可以設置1主多從,保證高可用。

實際生產環境如果資源夠用,建議至少6台服務器實現高可用。

16、通過上述構建出來的集群主從情況如下圖,redis非常聰明

 17、若需要連接集群,通過命令

redis-cli -c -h 任意集群ip -p 任意端口7377/7477 -a pwdxxxx
#-c 代表的是集群模式訪問

其他參考文章:https://blog.csdn.net/miss1181248983/article/details/90056960 可以去增加節點、刪除節點、停止服務器觀察節點主從變化等

18、集群的客戶端連接方式注意要羅列所有ip地址做連接初始化,同時鑒於上述集群會發現用阿里雲外網地址是無法連接的,會默認解析為內網ip,若要解決,需要修改配置文件,編組用外網ip編組,因為生產環境肯定要用內網連接,此步驟不做實驗了。

外網ip連接問題:https://blog.csdn.net/lingbomanbu_lyl/article/details/107999780

@Configuration
public class RedisClusterConfig {

	@Bean
	public RedisConnectionFactory redisConnectionFactory() {
		// 客戶端讀寫分離配置
		LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
						.readFrom(ReadFrom.REPLICA_PREFERRED)
						.build();
		RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(Arrays.asList(
						"122.51.151.130:6381",
						"122.51.151.130:6382",
						"122.51.151.130:6383",
						"122.51.151.130:6384",
						"122.51.151.130:6385",
						"122.51.151.130:6386"));
		return new LettuceConnectionFactory(redisClusterConfiguration, clientConfig);
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM