基於docker/dockerfile實現redis主從複製

今天我們來搭建基於docker實現redis主從複製集羣

爲什麼要使用redis集羣模式?

Redis可以說是內存數據庫,mysql的數據庫是真實存儲在硬盤裏的,因此,redis的讀取速度要比mysql快得多,同時,redis也是最好的cache工具,一般情況下,數據存儲量大小不能超過主機的內存,我們說的高併發場景很容易造成,數據溢出乃至性能瓶頸,顯然單機無法滿足我們的業務需求了,就需要做集羣,如果你的網站每天PV兩也就幾百,幾千,幾萬的話, 那就沒必要了!

什麼是Redis主從複製集羣?

簡單理解就是講Redis主服務器的數據同步到其他的redis服務器上,前者成爲主節點(master),後者稱之爲從節點(Slave),數據的複製都是單向的,因爲都是主節點複製到從節點,默認情況下,每臺服務器都是主節點,且每個主節點可以有多個從節點,但是每個從節點只能有一個主節點(master)

 

那麼說到redis主從複製有什麼作用呢?

  • 數據冗餘:主從複製實現了redis的數據的熱備份,是持久化之外的數據冗餘方式
  • 故障恢復:當主節點故障時,可以由從節點提供服務,快速的故障轉移
  • 負載均衡:可以在主從複製的基礎上,配合讀寫分離,由主節點負責寫,從節點負責讀取數據,從而分擔服務器的負載壓力,大大提高redis的併發量

# docker pull docker.io/centos

[root@ff ~]# mkdir -p /usr/dockerfile
[root@ff ~]# vim /usr/dockerfile/dockerfile

FROM docker.io/centos
MAINTAINER BIXIAOYU
RUN groupadd -r redis &&useradd -r -g redis redis
RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools
EXPOSE 6379

[root@ff ~]# cd /usr/dockerfile/
[root@ff dockerfile]# ls
dockerfile
[root@ff dockerfile]# docker build -t redis .

# docker network create --subnet=172.60.0.0/16 mynetwork   #在這裏爲了方便實驗,單獨創建一個bridge網橋,分配172.60.0網段

[root@ff dockerfile]# docker run -itd --name redis-master --net=mynetwork -p 6382:6379 --ip 172.60.0.2 redis
abbbf2630b4afe45ad589d5ee8f2e772e3b356e4a05c592e33a8471a3ef35c02
[root@ff dockerfile]# docker run -itd --name redis-slave1 --net=mynetwork -p 6383:6379 --ip 172.60.0.3 redis
bc5e76dade1e0b4adffce7b8f73d2e0468d8b103ad21e83e7156975a4de6ee40
[root@ff dockerfile]# docker run -itd --name redis-slave2 --net=mynetwork -p 6384:6379 --ip 172.60.0.4 redis
7e67d48f87e39653c590228e4081073a22417708e3a9447d7bd58f8c69a88409

 

【開始配置主從並啓用】

172.60.0.2  redis主節點配置

[root@abbbf2630b4a /]# vim /etc/redis.conf

bind 0.0.0.0    #允許所有IP能訪問
protected-mode no   #redis保護模式,redis登錄密碼設置爲空,無驗證,這裏爲了方便測試

 [root@abbbf2630b4a /]# redis-server /etc/redis.conf &

[root@abbbf2630b4a /]# ps -ef | grep redis
root 297 97 0 13:11 ? 00:00:02 redis-server 0.0.0.0:6379
root 334 97 0 13:45 ? 00:00:00 grep --color=auto redis

172.60.0.3以及172.60.0.4兩個redis從節點配置

# vim /etc/redis.conf

bind 0.0.0.0
protected-mode no

slaveof 172.60.0.2 6379  #指定爲redis主節點的IP和對應端口

分別啓動redis

# redis-server /etc/redis.conf &

簡單測試master主節點的redis數據是否同步到兩臺slave從節點,很明顯已經同步成功了~

END!

上述實驗比較簡單,因爲大家的技術能力和基礎都不一樣,也是分享一些小技術博客,希望能夠幫助到大家~後續還會持續更新,謝謝支持!

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