redis安裝教程和redis集羣搭建--主從複製(讀寫分離)、中間人模式(主僕兼具、去中心化)、反客爲主、哨兵模式,從實戰出發的保姆級別教程

1、redis安裝

1.1、下載reids.tar.gz

下載地址:http://download.redis.io/releases/,可以在這裏下載你所需要的linux系統下的redis版本,本次教程實用的是redis-5.0.0

1.2、上傳redis到linux服務器的/opt目錄下,並賦予相應權限並解壓。

文件授權命令:chmod 755 redis-5.0.0.tar.gz
授權是爲了可以讓文件解壓。
解壓命令:tar -zvxf redis-5.0.0.tar.gz
解壓之後可見文件 redis-5.0.0
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.3、安裝redis

進入解壓出來的redis文件夾
命令: cd /opt/redis-5.0.0
使用redis安裝命令
命令:make
make命令執行完,再執行一條安裝命令。
命令:make install
出現一推install,說明安裝成功。
在這裏插入圖片描述
在這裏插入圖片描述

1.4、在根目錄下創建文件夾myredis

此文件創建在哪都行,爲了方便就直接創建在根目錄下
命令:mkdir myredis
將reids-5.0.0下的redis.conf複製一份到myredis
命令:cp /opt/redis-5.0.0/redis.conf /myredis
在這裏插入圖片描述

1.5、修改myredis中的redis.conf配置文件

在myredis目錄下編輯reids.conf
命令: vi redis.conf
需將darmonize 的 no 改爲 yes
在這裏插入圖片描述

1.6、進入/usr/local/bin目錄下運行redis

進入/usr/local/bin可以看到許多redis安裝過的組件
命令:cd /usr/local/bin
利用自己的配置文件進行redis的啓動
執行啓動命令:redis-server /myredis/redis.conf
reids啓動後會佔據本次linux連接使用,從新開啓一個linux連接,可看到啓動後默認端口爲6379,可以記作(63=7*9)。
這裏主要是給大家看一下redis安裝之後會將自己的各個啓動組件都放在/usr/local/bin目錄下,在linux中該目錄下的程序是可以在任意目錄下使用的。
在這裏插入圖片描述
在這裏插入圖片描述

1.7、redis客戶端連接測試

先看服務器是否已啓動redis
命令:ps -ef|grep redis
在/usr/local/bin下使用客戶端連接命令
命令:redis-cli -h 127.0.0.1 -p 6379
連接成功,提示會變爲127.0.0.1:6379>
這時向redis發送 ping 就會得到 pong 迴應
設值test
命令:set k1 xxx
獲值test
命令: get k1
在這裏插入圖片描述
在這裏插入圖片描述完成以上步驟說明redis已經在你的服務器上跑起來了,下面就開衝。

2、模擬三臺redis服務器

2.1、在myredis文件夾下複製三個redis.conf

命令:
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
在這裏插入圖片描述

在這裏插入圖片描述

2.2、修改三個複製出來的reids配置文件(以redis6379.conf爲例)

2.2.1、daemonize修改

daemonize no -> daemonize yes
在這裏插入圖片描述

2.2.2、pid文件修改

pidfile /var/run/redis.pid -> pidfile /var/run/redis6379.pid
在這裏插入圖片描述

2.2.3、指定端口

port xxxx -> port 6379

在這裏插入圖片描述

2.2.4、log文件名字

logfile “” -> logfile “6379.log”
在這裏插入圖片描述

2.2.5、dump.rdb名字

dbfilename dump.rdb -> dbfilename dump6379.rdb
在這裏插入圖片描述
以上對配置的修改以redis6379.conf爲例,其中redis6380.conf、redis6381.conf的修改依照reids6379.conf的修改,只需將 “6379”->“6380"或"6381”。

2.3、啓動三臺reids服務器

本次是一臺服務器模仿的三臺服務器,所以實質上是三個redis進程在一臺linux上運行。
先查看後臺是否有關於redis的服務進程。
命令:ps -ef|grep redis
若是有關於reids的進程,先將其關閉
命令:kill 9 進程號(本次實驗中爲9763,所以使用 kill 9 9763 可以殺死該reids進程)

在這裏插入圖片描述

依次啓動三個redis服務器(任意目錄下輸入下面命令,即可啓動)
命令:
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf

redis-server /myredis/redis6381.conf
啓動後查看redis進程,可以看到後臺有三個redis進程。
在這裏插入圖片描述

3、主從複製

3.1、什麼是主從複製?

主從複製是Redis是redis自帶的功能特性,這個特性在其他數據庫也有,比如關係型數據庫mysql,主機是master,從機是slave,若是兩臺主機形成主從關係,則主機負責對客戶端請求寫操作,從機一直在監聽着主機的變化,將主機的數據同步到自己的數據庫上,若是客戶端請求讀,可以請求從機,不用去主機讀。

3.2、有什麼用?

實現主從的讀寫分離,提高了系統的併發性能。
提高容災性。

3.3、 怎麼實現主從複製呢?

總的來說可以有三種一主二僕、中間人模式、反客爲主

3.3.1、 一主二僕

在這裏插入圖片描述

3.3.1.1、首先啓動三臺linux服務器客戶端,目的是啓動三臺redis客戶端。

依次在三個redis客戶端打命令:
redis-cli -p 6379
redis-cli -p 6380
reids-cli -p 6381

在這裏插入圖片描述

3.3.1.2、建立連接後查看各自的身份

依次打命令:info replication
可以看到三臺redis都是獨立的,自己的身份都是master,連接master的slave都是 0

在這裏插入圖片描述

3.3.1.3、使其中兩臺reids服務器作爲一臺的從服務器

這裏我們選用6379端口作爲主服務,6380、6381端口作爲從服務器。
在6380、6381連接客戶端輸入連接reids-master命令:slaveof ip port
命令:slaveof 127.0.0.1 6379
這裏我使用ip地址爲迴環地址127.0.0.1,是因爲是一個linux服務器三個redis進程模擬三臺redis服務器。

之後再次查看三臺redis服務器的地址
可見6379端口號的redis服務器身份仍然爲master,但此時連接的slave爲2
6380、6381端口號的redis服務器身份爲slave,且連接master的套接字爲127.0.0.1:6379

在這裏插入圖片描述

3.3.1.4、讀寫分離與同步test

小結論:master可讀可寫,slave只能讀不能寫。
剛開始主從無值,master開始寫,slave機在默默的同步
之後slave嘗試寫,但失敗。
在這裏插入圖片描述

3.3.2、中間人模式

爲了防止master的資源被過多佔用,中間人模式出現了,將革命的精神薪火相傳,也就說,其中一臺slave直接同步別的slave的數據,不再同步master了。

在這裏插入圖片描述

3.3.2.1、設置中間人

這裏我們選擇6380端口號的slave作爲中間人,使6381端口號的slave直接同步6380端口的slave。
在6381端口號的reids客戶端輸入命令:slave 127.0.0.1 6380

身份分析:
之後再查看各個redis服務器的身份狀態。
可見6379身份仍然爲master,6380、6381身份仍然爲slave。
6379只剩下6380一個slave。
6380雖然爲slave,但是也有一個slave連接了它,而且就是6381。
6381連接的master是6380

在這裏插入圖片描述

3.3.2.1、中間人模式test

從測試結果來看,中間人模式中也是隻有master才能寫,slave只能讀;而且充當中間人的slave也不能寫,它會將自己同步到master的數據同步到連接到它的slave。
在這裏插入圖片描述

3.3.3、反客爲主

有這一個機制是爲防止master宕機,redis集羣處於不可使用狀態–只能讀舊值,不能寫入新值。
這樣就需要從新獨立出一個master。
(以下實驗前,將redis的集羣,配置成主從複製最初模式)

3.3.3.1、模擬master宕機了

在6379端口redis連接客戶端中使用 shutdown ,關閉當前redis服務端。
此次實驗中用6379端口是master,此時相當與redis的主從關係中,已經沒有master了。
這時,從機slave不做任何操作,我們將6379的master重新啓動會怎麼樣呢?
沒錯(??? 怎麼就沒錯了,你啥也沒說啊)!!! 這時我們在對master寫入,可以看到,slave仍然能同步master的最新信息。這也說明, 是slave在監視master,而不是master進行推送。

在這裏插入圖片描述

3.3.3.2、模擬slave宕機了

slave宕機之後,再令其重啓,再查看它的身份已經是master了,而且改重啓的reids服務器,不會再將它之前在master上同步得到的數據再次放回內存。
而且這時對6379這臺master進行設值,可以看到重啓的6380端口的redis是不會同步6379端口的redis的數據更新的。
小結論:slave重啓之後,默認變回master,自己玩去了,不在之前的圈子混了。
若想解決slave重啓仍然在redis分佈系統裏面,可以將配置寫在redis.conf裏面。

在這裏插入圖片描述

3.3.3.2、slave如何上位?

說到 slave上位,也就是一個命令。
在一個slave客戶端輸入命令:slaveof no one
當前環境爲一主二僕,master爲6379,slave爲6380和6381。
在這裏插入圖片描述
6380的slave使用命令:slaveof no one
最後再看大家的身份變化,可見6380成爲一個獨立的中心點了,也就是相當於它宕機後再回來了。
在這裏插入圖片描述

3.3.4、哨兵模式

是不是很多小夥伴直接跳到這裏,但還是要看下一主二僕配置,master爲6379,slave爲6380、6381的結構。

3.3.4.1、新建哨兵配置文件
  • 在/myredis文件夾下,直接命令: vi sentinel.conf
  • 進入編輯頁面,填入這一段文本:sentinel monitor master6379 127.0.0.1 6379 1
  • 保存並退出。

在這裏插入圖片描述

3.3.4.2、啓動哨兵

任意目錄下使用命令:redis-sentinel /myredis/sentinel.conf
這時哨兵已經在監控着6379這臺master和其所在的主從系統。
在這裏插入圖片描述

3.3.4.3、查看現在redis的主從系統。

在這裏插入圖片描述

3.3.4.4、模擬6379master宕機
  • 在6379的客戶端使用 shutdown ,表示當前6379這臺master宕機了。
  • 等一小會之後,在此查看主從系統中各個redis服務器的狀態,可見此時6381這臺slave變成了master;6380仍然是slave,但是它的master變成了6381。
  • 在6381這臺master賦值,再查看系統的所存值,可知,系統之前的值保留,新加的值同步了。
    在這裏插入圖片描述
    在這裏插入圖片描述
3.3.4.4、模擬之前6379master宕機之後重啓

總結一句:老領導過氣了。
重啓6379這臺redis服務器之後,查看其狀態,可以看到,它自動成了salve,而且它的master就是哨兵系統選出來的6381master。
在這裏插入圖片描述

3.3.4.4、哨兵模式總結

讓系統有了自動化,提高了系統的可用性和可靠性。

4、總結

  • redis安裝很簡單,使用也很簡單,但是實質的系統不會是單機的redis,肯定是集羣發佈的,所以我們需掌握其集羣搭建。
  • 主從複製的讀寫分離中,對於數據的同步:slave連接master時,第一次是全量複製master
    數據,往後就是增量複製master數據。
  • 現在一般使用的技術就是哨兵模式。
  • 若是跟着本文一步步走不能復現操作,歡迎大家一起交流解決問題哦!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章