Skip to content

Commit ff846ef

Browse files
author
qufei
committed
redis 主从复制
1 parent 9ebd021 commit ff846ef

File tree

4 files changed

+180
-44
lines changed

4 files changed

+180
-44
lines changed

docs/database/img/redis_start.png

112 KB
Loading

docs/database/redis-master-slave.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# 主从复制
2+
3+
单机带来的问题:机器故障、容量限制、QPS瓶颈,主从复制提供了一种**一主多从**的模式提供了数据副本,解决了单机带来的机器故障问题,主从分离模式提高了 Redis 读的性能(读写分离)。也是高可用、分布式的基础。
4+
5+
## 什么是主从复制?
6+
7+
所谓主从复制就是一个 Redis 主节点拥有多个从节点,由主节点的数据单向的复制到从节点,在一些读多写少的业务场景是非常受用的。
8+
9+
## 实现方式
10+
11+
提供了两种模式命令和配置,采用配置模式,优势是便于管理但是每次更改之后需要重启,采用命令模式优势是无需重启伴随的缺点是不便于管理。两者也是可以结合使用的。
12+
13+
### 命令实现
14+
- slaveof ip port:开启一个主从复制,ip为主节点ip地址,port为主节点端口号,例如在6380机器上开启一个主从复制:```slaveof 127.0.0.1 6379```
15+
- slaveof no one:取消主从复制,取消之前的数据不会清除。如果取消之后在切换到新的主节点,新的主节点同步数据到从节点之前会把该从节点的**先前数据进行全部清楚**
16+
- **注意**在新的版本中 slaveof 命令改为 replicaof
17+
18+
### 配置实现
19+
20+
```shell
21+
slaveof ip port # 设置主节点的 ip
22+
slave-read-only yes # 设置为只读模式
23+
```
24+
25+
## 一主多从实践
26+
27+
在一台虚拟机上建立一个主节点和多个从节点进行实践,注意,这里只是做为一个简单的测试都放在一台机器上,在实际的工作中是不会都放在一台机器上的,假设当前机器出现故障会导致所有节点都不可用。
28+
29+
### 环境准备
30+
31+
机器 | 模式 | 节点 | 安装目录
32+
:----------------|:------|:-------|:---
33+
192.168.6.128 | Master | 6379 | /data/soft/redis-5.0.5
34+
192.168.6.128 | Slave1 | 6380 | /data/soft/redis-5.0.5
35+
192.168.6.128 | Slave2 | 6381 | /data/soft/redis-5.0.5
36+
37+
38+
### Redis安装
39+
40+
这里采用的为 Redis 最新版本 v5.0.5,下载安装于 /data/soft/ 目录下,关于如何安装参考另一篇文章 [Redis 安装]()
41+
42+
### 节点配置
43+
44+
**执行以下命令,先复制出 3 个节点的配置文件**
45+
46+
```bash
47+
$ cp redis.conf redis-6379.conf
48+
$ cp redis.conf redis-6380.conf
49+
$ cp redis.conf redis-6381.conf
50+
```
51+
52+
**修改 redis-6379.conf 配置**
53+
54+
```conf
55+
bind 192.168.6.128
56+
port 6379
57+
daemonize yes # 开启守护进程
58+
pidfile /var/run/redis_6379.pid
59+
logfile "6379.log"
60+
# save 900 1
61+
# save 300 10
62+
# save 60 10000
63+
dbfilename dump-6379.rdb
64+
dir /data/soft/redis-5.0.5/data/
65+
replica-read-only yes # 默认从节点仅是只读模式
66+
```
67+
68+
**修改 redis-6380.conf 配置**
69+
70+
不同于上面主节点的配置是需要设置 replicaof 属性
71+
72+
```conf
73+
bind 192.168.6.128
74+
port 6380
75+
daemonize yes # 开启守护进程
76+
pidfile /var/run/redis_6380.pid
77+
logfile "6380.log"
78+
# save 900 1
79+
# save 300 10
80+
# save 60 10000
81+
dbfilename dump-6380.rdb
82+
dir /data/soft/redis-5.0.5/data/
83+
replicaof 192.168.6.128 6379 # 之前版本为 slaveof 192.168.6.128 6379
84+
```
85+
86+
**修改 redis-6381.conf 配置**
87+
88+
在 edis-6381.conf 配置里并没有设置 replicaof 属性,在启动时会介绍如何通过命令启动
89+
90+
```conf
91+
bind 192.168.6.128
92+
port 6381
93+
daemonize yes # 开启守护进程
94+
pidfile /var/run/redis_6381.pid
95+
logfile "6381.log"
96+
# save 900 1
97+
# save 300 10
98+
# save 60 10000
99+
dbfilename dump-6381.rdb
100+
dir /data/soft/redis-5.0.5/data/
101+
replicaof <masterip> <masterport> # 暂不修改为从节点
102+
```
103+
104+
### 启动节点
105+
106+
**启动 Master**
107+
108+
```
109+
$ src/redis-server redis-6379.conf
110+
```
111+
112+
**启动 Slave1**
113+
114+
```
115+
$ src/redis-server redis-6380.conf
116+
```
117+
118+
**启动 Slave2**
119+
120+
与上面不同的是,采用命令的方式开启一个从节点
121+
122+
```bash
123+
$ src/redis-server redis-6380.conf
124+
$ src/redis-cli -h 192.168.6.128 -p 6381 replicaof 192.168.6.128 6379
125+
```
126+
127+
### 查看节点
128+
129+
```bash
130+
$ ps -ef | grep redis-server
131+
root 20122 1 0 01:50 ? 00:00:03 src/redis-server 192.168.6.128:6379
132+
root 20130 1 0 01:50 ? 00:00:02 src/redis-server 192.168.6.128:6380
133+
qufei 20172 1 0 02:02 ? 00:00:00 src/redis-server 192.168.6.128:6381
134+
qufei 20414 19405 0 02:27 pts/1 00:00:00 grep --color=auto redis-server
135+
```
136+
137+
### 查看主从节点
138+
139+
链接上主节点客户端之后通过 ```info replication``` 命令查看,如下所示:
140+
141+
* role: 角色(Master/Slave)
142+
* connected_slaves: 当前连接的从节点数量
143+
* slave0、slave1: 展示了从节点的信息
144+
145+
```
146+
$ redis-cli -h 192.168.6.128 -p 6379 info replication
147+
# Replication
148+
role:master
149+
connected_slaves:2
150+
slave0:ip=192.168.6.128,port=6380,state=online,offset=3150,lag=1
151+
slave1:ip=192.168.6.128,port=6381,state=online,offset=0,lag=2
152+
master_replid:6b11e8d93b219d1c612b3cbd26731d8da1c4a881
153+
master_replid2:0000000000000000000000000000000000000000
154+
master_repl_offset:3150
155+
second_repl_offset:-1
156+
repl_backlog_active:1
157+
repl_backlog_size:1048576
158+
repl_backlog_first_byte_offset:1
159+
repl_backlog_histlen:3150
160+
```

docs/database/redis.md

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- `[Type]` [列表](/docs/database/redis-base.md#列表)
88
- `[Type]` [集合](/docs/database/redis-base.md#集合)
99
- `[Type]` [有序集合](/docs/database/redis-base.md#有序集合)
10+
1011
- **Redis高级特性**
1112
- **数据持久化**
1213
- **主从复制**
@@ -242,19 +243,7 @@ AOF重写实现方式:
242243

243244
```// todo:```
244245

245-
## 主从复制
246246

247-
单机带来的问题:机器故障、容量限制、QPS瓶颈,主从复制提供了一种一主多从的模式解决了单机带来的机器故障问题。也是高可用、分布式的基础。
248-
249-
#### 实现方式
250-
251-
* 命令实现
252-
* slaveof ip port:开启一个主从复制,ip为主节点ip地址,port为主节点端口号,例如在6380机器上开启一个主从复制:```slaveof 127.0.0.1 6379```
253-
* slaveof no one:取消主从复制,取消之前的数据不会清除。
254-
255-
* 配置实现
256-
* ```slaveof ip port```
257-
* ```slave-read-only yes```:设置为只读模式
258247

259248
## 应用场景
260249
1. 缓存设计

docs/database/redis_install.md

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,32 @@
1-
# redis安装
1+
# Redis
22

3-
## 单机版
3+
## Redis安装
44

5-
## Redis集群
6-
7-
## Mac系统安装redis
8-
9-
### 下载
10-
11-
```r
12-
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
13-
```
14-
### 解压文件
5+
**下载和编译**
156

16-
```r
17-
tar xzf redis-4.0.8.tar.gz
7+
```bash
8+
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz # 下载
9+
$ tar xzf redis-5.0.5.tar.gz # 解压
10+
$ # ln -s redis-5.0.5 redis
11+
$ cd redis-5.0.5 # 执行了上面一步 此处 cd redis
12+
$ make
1813
```
1914

20-
### 进入文件目录 cd redis-4.0.8 执行make命令
21-
22-
```r
23-
cd redis-4.0.8
24-
make
25-
```
2615

27-
### 启动redis
16+
**启动redis**
2817

2918
安装好后,在当前目录下有个src目录,控制台输入redis-server,启动redis
3019

31-
```javascript
32-
src/redis-server
33-
34-
//指定端口号启动
35-
src/redis-server --port 6380
20+
```bash
21+
$ src/redis-server
22+
$ src/redis-server --port 6380 # 指定端口号启动
3623
```
3724

3825
看到以下界面,启动成功
3926

4027
![图片](img/redis_start.png)
4128

42-
### 打开redis客户端
29+
**打开redis客户端**
4330

4431
```javascript
4532
src/redis-cli -p 6380
@@ -48,11 +35,9 @@ src/redis-cli -p 6380
4835
src/redis-cli -h localhost -p 6380
4936
```
5037

51-
## Redis集群
52-
53-
38+
**配置**
5439

55-
### Redis常用配置
40+
查看所有配置 ```config get *```,以下列举一些常用配置信息:
5641

5742
```shell
5843
daemonize yes # 是否是守护进程(no|yes)
@@ -63,4 +48,6 @@ dbfilename "dump-7000.rdb" # rdb文件
6348
cluster-enabled yes # 集群模式
6449
cluster-config-file nodes-6380.conf # 集群本地配置文件
6550
cluster-require-full-coverange no # 整个集群节点全部在线才提供服务(进行关闭)
66-
```
51+
```
52+
53+
## Redis集群

0 commit comments

Comments
 (0)