docker部署redis快取記憶體

lhrbest發表於2020-04-07

docker部署redis快取記憶體


現在一般的專案都會用到redis做快取,也不免有老鐵沒用過,我就一起說下吧。原始碼:

docker部署redis快取記憶體

redis

  • 官網


Redis是一個開源(BSD許可)的記憶體資料結構儲存,用作資料庫、快取和訊息代理。它支援諸如字串、雜湊、列表、集合、帶有範圍查詢的排序集、點陣圖、日誌、帶有半徑查詢的地理空間索引和流之類的資料結構。Redis具有內建的複製、Lua指令碼、LRU驅逐、事務和不同級別的磁碟永續性,並透過Redis Sentinel和Redis Cluster自動分割槽提供高可用性。

docker部署redis快取記憶體
  • 歷史

2008年,義大利一家創業公司Merzia的創始人Salvatore Sanfilippo為了避免MySQL的低效能,親自定做一個資料庫,並於2009年開發完成,這個就是Redis。
短短几年,使用者資料量猛增。國內如新浪微博、街旁和知乎等,國外如GitHub、暴雪等,都是Redis的使用者。世界上最大規模的Redis快取,就是新浪微博團隊打造的。熱點新聞的時候。Redis可以達到最多每秒10萬的讀寫。

  • 快取記憶體介紹
  1. 快取記憶體利用記憶體保持資料,讀寫速度遠超過硬碟
  2. 快取記憶體可以減少IO操作,降低IO壓力

微信紅包就是很好的例子,在發紅包的時候,紅包資訊就儲存在快取中,搶的人也是從快取記憶體中取。春節當天幾個億的人來搶也保持系統的穩定。

  1. 一般的應用,都分為常用和個性化,個性化可能是從資料庫中獲取的。但是常用的可能就是從快取記憶體中獲取的。
  • Redis叢集介紹

Redis目前的叢集方案為以下幾種:

  1. RedisCluster:官方推薦,沒有中心點(主節點不是中心節點,而是儲存資料最多的,最新的,同步後主節點就消失了)。
  2. Codis:中介軟體,存在中心節點(中心節點掛了,徹底玩完)。
  3. Twemproxy:中介軟體產品,存在中心節點。
  • RedisCluster
  1. 無中心節點,客戶端與redis節點直連,不需要中間代理層(很類似PXC)
  2. 資料可以被分片儲存(每個節點儲存的內容是不一樣的)
  3. 管理方便,後續可自行增加或者摘除節點
  • 本次搭建的Redis節點的示意圖
docker部署redis快取記憶體
  • 主從同步

上邊說過,RedisCluster的資料是分片儲存的,如果redis掛了就會丟失一部分的資料。為了避免這個問題的產生,就必須引入主從同步的機制

  1. Redis叢集中的資料複製是透過主從同步來實現的。
  2. 主節點(Master)把資料分發給從節點(Slave)
  3. 主從同步的好處在於高可用,Rredis節點有冗餘設計
  • Redis叢集高可用
  1. Redis叢集中應該包含奇數個Master,至少應該是3個,如果其中一個掛的,剩餘奇數個可以進行選舉至少過半的情況。很容易選擇到master節點。
  2. Redis叢集中每個Master都應該有Slave
  • 為什麼Redis不搭建負載均衡

因為本身前後端分離專案,請求後端的時候,後端對請求已經做了負載均衡所以Redis不需要做負載均衡。

搭建叢集

應用 IP地址 服務 配置 安裝應用 安裝方式
docker-mysql 192.168.66.101 docker-redis-cluster 雙核 8g記憶體 docker-redis-cluster docker

(1). 虛擬機器vagrant講述安裝的步驟

vagrant up

(2).機器window/mac開通遠端登入root使用者下

su -
# 密碼
vagrant
#設定 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd
docker部署redis快取記憶體
  • 建立資料夾,配置
mkdir redis-cluster
cd redis-cluster
mkdir r1
cd r1
vi redis.conf
mkdir data
cd ~
docker部署redis快取記憶體
docker部署redis快取記憶體
  • redis.conf

配置了5個地方

  1. daemonize yes

以後臺程式執行

  1. cluster-enabled yes

開啟叢集

  1. cluster-config-file 150000

超時時間

  1. appendonly yes

開啟AOF模式,儲存檔案的形式

  1. requirepass idig8.com

認證密碼

  1. cluster-config-file nodes.conf

叢集配置檔案

直接看github我提交的原始碼吧

一共要建立6個redis叢集

  • 建立容器(r1)

想加上安全驗證,但是不生效,查了下daemonize yes,他的作用是是否開啟守護程式模式,在該模式下,redis會在後臺執行,並將程式pid號寫入至redis.conf選項pidfile設定的檔案中,此時redis將一直執行,除非手動kill該程式。所以進入這個容器內手動選擇載入配置檔案。

docker run -it -d \
-v /root/redis-cluster/r1/redis.conf:/etc/redis/redis.conf \
--name r1 -p 5001:6379 \
--net=net2 \
--ip 172.19.0.2 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r1 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體
  • 建立容器(r2)
docker run -it -d \
-v /root/redis-cluster/r2/redis.conf:/etc/redis/redis.conf \
--name r2 -p 5002:6379 \
--net=net2 \
--ip 172.19.0.3 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r2 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體
  • 建立容器(r3)
docker run -it -d \
-v /root/redis-cluster/r3/redis.conf:/etc/redis/redis.conf \
--name r3 -p 5003:6379 \
--net=net2 \
--ip 172.19.0.4 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r3 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體
  • 建立容器(r4)
docker run -it -d \
-v /root/redis-cluster/r4/redis.conf:/etc/redis/redis.conf \
--name r4 -p 5004:6379 \
--net=net2 \
--ip 172.19.0.5 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r4 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體
  • 建立容器(r5)
docker run -it -d \
-v /root/redis-cluster/r5/redis.conf:/etc/redis/redis.conf \
--name r5 -p 5005:6379 \
--net=net2 \
--ip 172.19.0.6 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r5 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體
  • 建立容器(r6)
docker run -it -d \
-v /root/redis-cluster/r6/redis.conf:/etc/redis/redis.conf \
--name r6 -p 5006:6379 \
--net=net2 \
--ip 172.19.0.7 \
zhugeaming1314/redis bash
  • 配置啟動
docker exec -it r6 bash
cd /usr/redis/src
./redis-server /etc/redis/redis.conf
docker部署redis快取記憶體

redis-trib.rb

redis內自帶叢集工具redis-trib.rb,操作redis-trib需要很多指令很麻煩。建議使用我提供的映象,裡面什麼都裝好了老鐵就根據我的命令操作就可以了 。

docker部署redis快取記憶體
  • 建立叢集命令
docker exec -it r1 bash
cd /usr/redis
mkdir cluster
cd src
cp redis-trib.rb ../cluster
cd ../cluster
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379
docker部署redis快取記憶體
image.png
  • 檢視叢集資訊
docker exec -it r1 bash
/usr/redis/src/redis-cli -c
cluster nodes

!/upload-images.jianshu.io/upload_images/11223715-0123418e8224c25c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  • 安裝叢集的時候報的錯誤

can't connect to node 172.19.* redis.conf檔案

  1. bind 127.0.0.1 註釋掉
  2. requirepass idig8.com 註釋掉

redis叢集密碼設定

  • 密碼設定(推薦)

方式一:修改所有Redis叢集中的redis.conf檔案加入:

masterauth idig8.com
requirepass idig8.com

說明:這種方式需要重新啟動各節點

方式二:進入各個例項進行設定:

./redis-cli -c -p 6379 config set masterauth idig8.com
config set requirepass idig8.com 
config rewrite

之後分別使用./redis-cli -c -p 6379,./redis-cli -c -p 6379…..命令給各節點設定上密碼。

注意:各個節點密碼都必須一致,否則Redirected就會失敗, 推薦這種方式,這種方式會把密碼寫入到redis.conf裡面去,且不用重啟。

用方式二修改密碼,./redis-trib.rb check 172.19.0.2:6379執行時可能會報[ERR] Sorry, can't connect to node 172.19.0.2:6379,因為6379的redis.conf沒找到密碼配置。

  • 設定密碼之後如果需要使用redis-trib.rb的各種命令

如:./redis-trib.rb check 127.0.0.1:6379,則會報錯ERR] Sorry, can’t connect to node 127.0.0.1:6379
解決辦法:vim /usr/local/rvm/gems/ruby-2.3.3/gems/redis-4.0.0/lib/redis/client.rb,然後修改passord

class Client
    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "idig8.com",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
    }

注意:client.rb路徑可以透過find命令查詢:find / -name 'client.rb'

帶密碼訪問叢集

./redis-cli -c -p 6379-a idig8.com

PS:整個redis叢集已經安裝完畢,3個master3個salve,如果1個master掛了對應的slave自動升級為master,掛的原來的master如果重新啟動就變成了slave。我嘗試用官方的docker映象redis來進行全流程的安裝,在docker run命令中加入配置檔案啟動,這種方式是有問題的,到建立叢集的時候還是會報錯的,還是建議用我的映象,這樣穩定些。並且裡面自帶redis-trib.rb。




About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2020-04-01 06:00 ~ 2020-04-30 24:00 在西安完成

● 最新修改時間:2020-04-01 06:00 ~ 2020-04-30 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2684760/,如需轉載,請註明出處,否則將追究法律責任。

相關文章