前言:本文先分享下如何搭建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的主從模式就已經完成了
