redis的主從模式搭建及注意事項


前言:本文先分享下如何搭建redis的主從模式配置,以及主從模式配置的注意事項。后續會繼續分享如何實現一個高可用的redis服務,redis的Sentinel 哨兵模式及集群搭建。

安裝:
1,yum install gcc-c++

  • 安裝環境

2,wget http://download.redis.io/releases/redis-4.0.2.tar.gz

  • 獲取壓縮包
  • 我的安裝路徑:/usr/local/redis

3,tar -zxvf redis-4.0.2.tar.gz

  • 解壓

4,cd redis-4.0.2

  • 切換到對應目錄

5,make

自此,redis已經安裝成功

6,./src/redis-server redis.conf

  • 啟動redis,指定配置文件

服務啟動成功如下:

7,Ctrl+c

  • 退出當前服務
  • 由於不是以守護線程的方式去啟動,所以需要Ctrl+c停止服務

8,vi redis.conf

  • 修改配置文件
  • daemonize no 修改為 daemonize yes ,以守護線程啟動

9,./src/redis-server redis.conf

  • 再次啟動redis

10,ps -ef |grep redis

  • 查看redis服務

11,./src/redis-cli

  • 啟動客戶端鏈接
  • 鍵入info,查看當前redis信息
  • 鍵入shutdown 停止redis服務

單機redis就安裝和調試完了。

redis 主從模式配置

主從模式: redis的主從模式,使用異步復制,slave節點異步從master節點復制數據,master節點提供讀寫服務,slave節點只提供讀服務(這個是默認配置,可以通過修改配置文件 slave-read-only 控制)。master節點可以有多個從節點。配置一個slave節點只需要在redis.conf文件中指定 slaveof master-ip master-port 即可。

本示例:一個master節點有兩個slave節點

配置:
1,cd /usr/local/redis/redis-4.0.2

  • 切換到當前redis安裝路徑

2, mkdir config

  • 新建一個文件夾,存放redis的配置文件

3,在config下,新建三個配置文件,如下:

cd config

vi master-6739.conf

bind 0.0.0.0
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
daemonize yes
rdbcompression yes

vi slave-6380.conf

bind 0.0.0.0
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379

vi slave-6381.conf

bind 0.0.0.0
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379

master-6739.conf,為主節點配置文件,slave-6380.conf,slave-6381.conf為從節點配置文件
在從節點的配置文件中使用:slaveof 指定master節點

4,啟動三台reids服務

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf 
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6380.conf 
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6381.conf

查看一下redis服務

測試主從模式

a,先分別連上三台Redis服務,獲取key為name的值,通過-p 指定連接那個端口的redis服務

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> get name
(nil)
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get name
(nil)
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381
127.0.0.1:6381> get name
(nil)
#獲取的值都為空

b,給master節點set一個key

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> set name cmy
OK
127.0.0.1:6379> get name
"cmy"

c,slave節點直接讀取key為name的值

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get name
"cmy"
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381
127.0.0.1:6381> get name
"cmy"

d,slave節點只提供讀服務,不能進行寫入操作

127.0.0.1:6381> set age 23
(error) READONLY You can't write against a read only slave.

注意
使用主從模式時應注意matser節點的持久化操作,matser節點在未使用持久化的情況詳情下如果宕機,並自動重新拉起服務,從服務器會出現丟失數據的情況。

首先,禁止matser服務持久化

127.0.0.1:6379> CONFIG SET save ""
OK

在master節點set一個值

127.0.0.1:6379> set age 23
OK

slave節點可以get到age的值

127.0.0.1:6380> get age
"23"

關掉master節點服務

127.0.0.1:6379> shutdown
not connected> 

slave節點此時仍可以get到age的值

127.0.0.1:6380> get age
"23"

重啟master服務,此時獲取不到age的值

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf 
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> get age
(nil)

slave節點此時在獲取age的值為空,數據丟失

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get age
(nil)

數據丟失的原因:因為master服務掛了之后,重啟服務后,slave節點會與master節點進行一次完整的重同步操作,所以由於master節點沒有持久化,就導致slave節點上的數據也會丟失掉。所以在配置了Redis的主從模式的時候,應該打開主服務器的持久化功能。

到這,redis的主從模式就已經完成了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM