<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • 【Redis 系列】redis 學習十,Redis 集群搭建和主從復制

    主從復制的理論

    先來說說什么是主從復制

    主從復制,就是將一臺 redis 服務器的數據,復制到其他的 redis 服務器上, 前者為主節點 master,后者為從節點 slave

    數據的復制是單向的,只能是主機復制到從機,master 以寫為主,slave 以讀為主

    默認的情況下,每臺 redis 服務器都是主節點,并且一個主節點都會有多個從節點或者沒有從節點,但是反過來,一個從節點,只能有一個主節點

    主從復制的作用:

    • 數據冗余

    主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式

    • 故障恢復

    當主節點出現異常問題時,從節點可以頂替上去提供服務,實現快速的故障恢復,實際上是一種服務的冗余

    • 負載均衡

    主從復制的基礎上,加上讀寫分離,可以由主節點提供服務,由從節點提供服務(也就是 寫的時候連接 redis 的主服務器,讀數據的時候連接 redis 的從服務器),這就可以分擔服務器的壓力

    特別是在讀多寫少的情況下,通過多個從節點分擔負載,可以大大的提供 redis 服務器的并發量

    • 是高可用的基礎

    主從復制是哨兵模式和集群能夠實施的基礎,so 主從復制是 redis 高可用的基石

    在我們實際工作項目中,絕對不可能在生產環境中只有一臺 redis 服務器,必須是集群模式的,最次也是 一主二從

    • 從結構來說,單個 reids 服務器會發生單點故障,且一臺 redis 服務器承擔所有讀和寫的壓力,他太難了
    • 從 redis 服務器自身容量來看,單個 redis 服務器自身的容量是有限的,一般來說,單臺的 redis 服務器最大使用內存不應該超過 20 GB

    例如電商平臺,進本上都是多讀少寫的方式,就會用到上述圖示的架構,主從復制,讀寫分離,大部分情況都是在做讀操作,很少一部分情況是在做寫操作,這樣可以減輕服務器的壓力,架構中經常使用一主二從

    環境配置

    咱們在一臺服務器上開啟 3 個 redis-server 來模擬 reids 的集群,這是一個偽集群

    查看 redis master 節點的信息,

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:87d84e1268d878bd3b1e7d5ea7f5060d4f71471e
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    

    將原有的 redis.conf 文件復制 3 份,分別是 6379.conf , 6380.conf ,6381.conf

    root@iZuf66y3tuzn4wp3h02t7pZ:/usr/local/redis/redis-6.2.5# cp redis.conf 6379.conf
    root@iZuf66y3tuzn4wp3h02t7pZ:/usr/local/redis/redis-6.2.5# cp redis.conf 6380.conf
    root@iZuf66y3tuzn4wp3h02t7pZ:/usr/local/redis/redis-6.2.5# cp redis.conf 6381.conf
    

    分別修改上述 3 個文件的如下 4 個位置:

    • redis server 的端口號 port 6379
    • 后臺運行的 redis server pid 的名字,pidfile /var/run/redis_6379.pid
    • 日志文件,logfile "6379.log"
    • rdb 持久化文件,dbfilename dump6379.rdb

    三個文件分別修改完畢后,分別啟動三個 redis-server

    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-server /usr/local/redis/redis-6.2.5/6379.conf
    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-server /usr/local/redis/redis-6.2.5/6380.conf
    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-server /usr/local/redis/redis-6.2.5/6381.conf
    

    redis-server 后臺啟動后,我們查看一下是否啟動成功

    ps aux | grep reids

    root@iZuf66y3tuzn4wp3h02t7pZ:~# ps aux |grep redis
    root      4345  0.0  0.1  62776  3864 ?        Ssl  08:50   0:00 redis-server 0.0.0.0:6379
    root      4351  0.0  0.1  62776  3860 ?        Ssl  08:50   0:00 redis-server 0.0.0.0:6380
    root      4359  0.1  0.1  62776  3856 ?        Ssl  08:50   0:00 redis-server 0.0.0.0:6381
    root      4369  0.0  0.0  14436  1016 pts/0    S+   08:50   0:00 grep --color=auto redis
    

    使用 redis-cli 連接每一個不同端口的 redis-server,查看主從信息,發現每一個 redis-server 都是主機,如下:

    127.0.0.1:6379> info replication
    # Replication
    role:master					# 主機
    connected_slaves:0			# 從機
    master_failover_state:no-failover
    master_replid:38cbcdac7d7f6b1c154643f94d6742111826cccb
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    

    開始設置主從(一主二從)

    默認情況下,redis 服務器默認都是主節點,我們只需要配置從節點即可

    我們設置 6379 為主,6380 為從,6381 為從

    6380 和 6381 都設置好是 6379 的從節點,現在可以查看 6379 的配置信息如下,自己是 master ,有 2 個 slave

    這就是設置好了redis 集群,一主二從,這是通過命令的方式臨時設置,若其中一個 redis 服務器重啟后,自己也會變成 master,因此我們要持久的設置,可以去配置文件中設置

    測試在主機上面讀寫 key,在從機上面讀寫 key

    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli -p 6379
    127.0.0.1:6379>
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> set k2 v2
    OK
    127.0.0.1:6379> set k3 v3
    OK
    127.0.0.1:6379>
    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli -p 6380
    127.0.0.1:6380> get k2
    "v2"
    127.0.0.1:6380> set k4 v4
    (error) READONLY You can't write against a read only replica.
    127.0.0.1:6380>
    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli -p 6381
    127.0.0.1:6381> get k3
    "v3"
    127.0.0.1:6381> set k5 v5
    (error) READONLY You can't write against a read only replica.
    

    主機上,可以讀,可以寫

    從機上,只能讀,不能寫

    測試斷掉主機

    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli -p 6379
    127.0.0.1:6379> shutdown
    not connected>
    

    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli -p 6381
    127.0.0.1:6381> keys *
    1) "k3"
    2) "k2"
    3) "k1"
    

    主機掛掉,從機仍然可以讀取數據,只是還是不能寫,主機起來后,主機仍然可以讀和寫,寫操作又回來了,我們的快樂又回來了

    復制的原理

    Slave 啟動成功連接到 master 后會發送一個 sync 命令

    master 收到命令后,啟動后臺存盤進程,同時收集所有接收到用于修改數據庫集命令,在后臺進程執行完畢后,master 進程將傳送整個數據文件給到 slave ,并完成一次同步

    全量復制

    slave 服務接收到 master 傳過來的數據后,將其存盤并加載到內存

    增量復制

    master 將新的收集到的所有修改的命令依次傳遞給 slave ,并完成同步

    一旦重新連接 master 節點,一次完全的全量同步就會被執行

    參考資料:

    redis_doc

    歡迎點贊,關注,收藏

    朋友們,你的支持和鼓勵,是我堅持分享,提高質量的動力

    好了,本次就到這里

    技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

    我是小魔童哪吒,歡迎點贊關注收藏,下次見~

    posted @ 2022-03-30 21:20  小魔童哪吒  閱讀(14)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看