「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

原創(chuàng)文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝!
原文鏈接地址:「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站設計、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的木壘哈薩克網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

現(xiàn)在一般的項目都會用到redis做緩存,也不免有老鐵沒用過,我就一起說下吧。源碼:https://github.com/limingios/netFuture/tree/master/redis-cluster

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

####redis

  • 官網

    https://redis.io/
    Redis是一個開源(BSD許可)的內存數(shù)據結構存儲,用作數(shù)據庫、緩存和消息代理。它支持諸如字符串、散列、列表、集合、帶有范圍查詢的排序集、位圖、日志、帶有半徑查詢的地理空間索引和流之類的數(shù)據結構。Redis具有內置的復制、Lua腳本、LRU驅逐、事務和不同級別的磁盤持久性,并通過Redis Sentinel和Redis Cluster自動分區(qū)提供高可用性。

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 歷史

    2008年,意大利一家創(chuàng)業(yè)公司Merzia的創(chuàng)始人Salvatore Sanfilippo為了避免MySQL的低性能,親自定做一個數(shù)據庫,并于2009年開發(fā)完成,這個就是Redis。
    短短幾年,用戶數(shù)據量猛增。國內如新浪微博、街旁和知乎等,國外如GitHub、暴雪等,都是Redis的用戶。世界上最大規(guī)模的Redis緩存,就是新浪微博團隊打造的。熱點新聞的時候。Redis可以達到最多每秒10萬的讀寫。

  • 高速緩存介紹

    1. 高速緩存利用內存保持數(shù)據,讀寫速度遠超過硬盤
    2. 高速緩存可以減少IO操作,降低IO壓力

      微信紅包就是很好的例子,在發(fā)紅包的時候,紅包信息就保存在緩存中,搶的人也是從高速緩存中取。春節(jié)當天幾個億的人來搶也保持系統(tǒng)的穩(wěn)定。

    3. 一般的應用,都分為常用和個性化,個性化可能是從數(shù)據庫中獲取的。但是常用的可能就是從高速緩存中獲取的。
  • Redis集群介紹

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

    1. RedisCluster:官方推薦,沒有中心點(主節(jié)點不是中心節(jié)點,而是保存數(shù)據最多的,最新的,同步后主節(jié)點就消失了)。
    2. Codis:中間件,存在中心節(jié)點(中心節(jié)點掛了,徹底玩完)。
    3. Twemproxy:中間件產品,存在中心節(jié)點。
  • RedisCluster

    1. 無中心節(jié)點,客戶端與redis節(jié)點直連,不需要中間代理層(很類似PXC)
    2. 數(shù)據可以被分片存儲(每個節(jié)點存儲的內容是不一樣的)
    3. 管理方便,后續(xù)可自行增加或者摘除節(jié)點
  • 本次搭建的Redis節(jié)點的示意圖

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 主從同步

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

  1. Redis集群中的數(shù)據復制是通過主從同步來實現(xiàn)的。
  2. 主節(jié)點(Master)把數(shù)據分發(fā)給從節(jié)點(Slave)
  3. 主從同步的好處在于高可用,Rredis節(jié)點有冗余設計
  • Redis集群高可用

    1. Redis集群中應該包含奇數(shù)個Master,至少應該是3個,如果其中一個掛的,剩余奇數(shù)個可以進行選舉至少過半的情況。很容易選擇到master節(jié)點。
    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

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建文件夾,配置
    mkdir redis-cluster
    cd redis-cluster
    mkdir r1
    cd r1
    vi redis.conf
    mkdir data
    cd ~

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • redis.conf

    配置了5個地方

    1. daemonize yes
      以后臺進程運行
    2. cluster-enabled yes
      開啟集群
    3. cluster-config-file 150000
      超時時間
    4. appendonly yes
      開啟AOF模式,保存文件的形式
    5. requirepass idig8.com
      認證密碼
    6. cluster-config-file nodes.conf
      集群配置文件
直接看github我提交的源碼吧
一共要創(chuàng)建6個redis集群
  • 創(chuàng)建容器(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 

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建容器(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 

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建容器(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 

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建容器(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 

    「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建容器(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 

    「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建容器(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 

    「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

redis-trib.rb

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

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 創(chuàng)建集群命令
    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          

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

  • 查看集群信息
    docker exec -it r1 bash
    /usr/redis/src/redis-cli -c
    cluster nodes

!/upload-images.jianshu.io/upload_images/11223715-0123418e8224c25c.png%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

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

方式二:進入各個實例進行設置:

./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…..命令給各節(jié)點設置上密碼。

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

用方式二修改密碼,./redis-trib.rb check 172.19.0.2:6379執(zhí)行時可能會報[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命令中加入配置文件啟動,這種方式是有問題的,到創(chuàng)建集群的時候還是會報錯的,還是建議用我的鏡像,這樣穩(wěn)定些。并且里面自帶redis-trib.rb。

「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)

網站欄目:「實戰(zhàn)篇」開源項目docker化運維部署-redis高速緩存(六)
地址分享:http://www.muchs.cn/article18/jiohdp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供商城網站、營銷型網站建設、企業(yè)建站、全網營銷推廣品牌網站設計、品牌網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管