SpringBoot整合redis-cluster集羣以及redis-cluster集羣詳細安裝

SpringBoot整合redis-cluster集羣以及redis-cluster集羣詳細安裝 環境要求需要六臺虛擬機

一.安裝redis
去官網下載tar包,上傳到/home/software下面

[root@huaxinfeng25 software]# tar -zxvf redis-5.0.5.tar.gz    #解壓縮
[root@huaxinfeng25 software]# yum install gcc-c++   #安裝c++環境
#進入到 redis-5.0.5 目錄,進行安裝:
[root@huaxinfeng25 redis-5.0.5]# make && make -j 4 install   #編譯

設置開機自啓動:
在/home/software/redis-5.0.5/utils目錄下

[root@huaxinfeng25 utils]# cp redis_init_script /etc/init.d/

在這裏插入圖片描述


創建/usr/local/redis用於存放配置文件
[root@huaxinfeng25 utils]# cd /usr/local/
[root@huaxinfeng25 local]# mkdir redis
[root@huaxinfeng25 redis]# cd /home/software/redis-5.0.5/
[root@huaxinfeng25 redis-5.0.5]# cp redis.conf /usr/local/redis/  #拷貝配置文件

修改redis.conf核心配置文件

136 改 daemonize no
136 爲 daemonize yes
 
263 改 dir ./
263 爲 dir /usr/local/redis/working


69 改 bind 127.0.0.1
69 爲 bind 0.0.0.0

修改密碼(你也可以不改,不改不利於後續操作還是改了把)
在這裏插入圖片描述

進入

[root@huaxinfeng25 redis]# cd /etc/init.d/
[root@huaxinfeng25 init.d]# vim redis_init_script
CONF="/usr/local/redis/redis.conf"





[root@huaxinfeng25 init.d]# chmod +766 redis_init_script  #給權限
[root@huaxinfeng25 init.d]# mkdir /usr/local/redis/working  #創建文件夾
[root@huaxinfeng25 init.d]# ./redis_init_script start   #啓動redis
[root@huaxinfeng25 init.d]# ps -aux | grep redis  #檢查redis進程是不是存在
[root@huaxinfeng25 init.d]# chkconfig redis_init_script on #設置開機自啓動

在這裏插入圖片描述

啓動成功的模樣
在這裏插入圖片描述

[root@huaxinfeng25 redis]# redis-cli 
127.0.0.1:6379> auth james
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
"18"

redis的主從複製和哨兵這裏我就不說了,網上文章有很多的。我們主要說的是cluster集羣

二.安裝cluster集羣

需要六臺虛擬機或者六臺真實的機器
爲什麼使用cluster集羣呢?
因爲即使在主從複製和哨兵模式下,當主機出現問題從機變換爲主機的也是需要時間的,可能是1秒,2秒,這個時間段會造成數據的丟失和不同步。再者同步也是有時間間隔的,如果時間間隔中主節點mster突然宕機也會影響數據的正確性,所以我們要使用cluster集羣,他能通過槽點這個工具保證數據的同步
單個master容量有限,數據達到一定程度會有瓶頸,這個時候可以通過水平擴展爲多master-slave成爲集羣。
我們學習redis-cluster:他不但可以支撐多個master-slave,支持海量數據,而且能實現高可用與高併發。

特點:

每個節點知道彼此之間的關係,也會知道自己的角色,當然他們也會知道自己存在與一個集羣環境中,他們彼此之間可以交互和通信,比如ping pong。那麼這些關係都會保存到某個配置文件中,每個節點都有,這個我們在搭建的時候會做配置的。
客戶端要和集羣建立連接的話,只需要和其中一個建立關係就行。
某個節點掛了,也是通過超過半數的節點來進行的檢測,客觀下線後主從切換,和我們之前在哨兵模式中提到的是一個道理。
Redis中存在很多的插槽,又可以稱之爲槽節點,用於存儲數據,這個先不管,後面再說。

注意
構建Redis集羣,需要至少3個節點作爲master,以此組成一個高可用的集羣,此外每個master都需要配備一個slave,所以整個集羣需要6個節點,這也是最經典的Redis集羣,也可以稱之爲三主三從,容錯性更佳。所以在搭建的時候需要有6臺虛擬機。使用單實例的Redis 去克隆即可 。
克隆
在這裏插入圖片描述

並修改mac地址(除了第一臺剩下的每一臺多需要修改呢)
在這裏插入圖片描述

全部打開
在這裏插入圖片描述

在這裏插入圖片描述

在redis.conf中這樣配置(六臺配置要一樣哦)

#開啓集羣模式
cluster-enabled yes
# 每一個節點需要有一個配置文件,需要6份。每個節點處於集羣的角色都需要告知其他所有節點,彼此知道,這個文件用於存儲集羣模式下的集羣狀態等信息,這個文件是由redis自己維護,我們不用管。如果你要重新創建集羣,那麼把這個文件刪了就行
cluster-config-file nodes-6379.conf
# 超時時間,超時則認爲master宕機,隨後主備切換
cluster-node-timeout 5000
# 開啓AOF
appendonly yes
#搭建集羣
[root@huaxinfeng25 working]# redis-cli -a james --cluster create 192.168.1.25:6379 192.168.1.11:6379 192.168.1.12:6379 192.168.1.13:6379  192.168.1.14:6379 192.168.1.15:6379 --cluster-replicas 1

在這裏插入圖片描述

檢查節點
[root@huaxinfeng25 working]# redis-cli -a james --cluster check 192.168.1.25:6379

在這裏插入圖片描述

集羣構建成功了

那麼我們來看這個slots 槽節點,平均分配的(主節點分配)
M: 745fc0ba2d17885921383831c3ca3c7d775adcbe 192.168.1.25:6379
slots:[0-5460] (5461 slots) master
M: cac668a5eff4b8bcbc8bf130b2ac9a87ad5575e6 192.168.1.11:6379
slots:[5461-10922] (5462 slots) master
M: 72d87b1e64b5af0ff3b096dd6da63c5dc08885de 192.168.1.12:6379
slots:[10923-16383] (5461 slots) master
S: 67ed008a3b79722791ed010e10fad28ebb085bbb 192.168.1.13:6379
replicates 72d87b1e64b5af0ff3b096dd6da63c5dc08885de
S: 7d643db2fcdfb9439284a1e1b066fd84df04fb99 192.168.1.14:6379
replicates 745fc0ba2d17885921383831c3ca3c7d775adcbe
S: 3188ac547890bd87de9c8f281127096cb48df9f8 192.168.1.15:6379
replicates cac668a5eff4b8bcbc8bf130b2ac9a87ad5575e6
槽slot怎麼存儲數據呢,比如我們set一個key,他會我們set的這個key進行一個hash算法,然後進行hash取模,來計算存到哪個槽節點上面

整合redis
首先你在pom.xml引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
這樣寫代碼
/*@Controller*/
@ApiIgnore
@RestController
@RequestMapping("redis")
public class RedisController {

   @Autowired
   private RedisTemplate redisTemplate;

   @Autowired
   private RedisOperator redisOperator;

    @GetMapping("/set")
    public Object set(String key,String value){
        System.out.println(key);
        System.out.println(value);
        redisOperator.set(key,value);
        return "hello world~";
    }

    @GetMapping("/get")
    public Object get(String key){

      return redisOperator.get(key);
    }

    @GetMapping("/delete")
    public Object delete(String key){


        redisOperator.del(key);
        return "ok";
    }

}

在配置文件中這樣寫

在這裏插入圖片描述

在這裏插入圖片描述

好啦可以拉
在這裏插入圖片描述

主意:key是存在不同機器上面的,你set到某一臺機器的話只是某一臺機器私有的當你要get的時候會自動跳動到這個機器上面的,會很方便
你可能會報錯
[ERR] Node 192.168.1.12:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
看ip哪個錯了就去刪除working下面的aof rdb等後綴文件然後重啓redis,還要是不行把working下面所有的全部給刪除了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章