[toc]

从今天开始开辟Redis相关方面的东西

上一节说了如何安装和配置redis

还有主从如何搭建

这节内容为哨兵的相关内容

关于哨兵大家可自行在网上搜索其用途和工作原理

系统为 Redhat 7.4

数据库为 Redis 5.0.8



### 1. redis规划




| IP地址| 主机名|端口| 配置及数据文件位置|角色|
| --------- | --------- |--------- |--------- |--------- |
| 172.18.95.83 | SYTEST1|6380|/home/redis|master|
| 172.18.95.84 |SYTEST2| 6380|/home/redis|slave|
| 172.18.95.85 |SYTEST3| 6380|/home/redis|slave|




### 2. 哨兵规划




| IP地址| 主机名|端口| 文件位置|
| --------- | --------- |--------- |--------- |
| 172.18.95.83 | SYTEST1|26380|/home/redis|
| 172.18.95.84 |SYTEST2| 26380|/home/redis|
| 172.18.95.85 |SYTEST3| 26380|/home/redis|


### 3. 搭建3套redis和主从

首先我们根据以前的内容搭建3套redis

并全部启动

之后配置同步关系,即SYTEST3和SYTEST2同步SYTEST1

### 4.哨兵配置文件

接下来我们分别在/home/redis目录下建立哨兵配置文件




**SYTEST1**

```
$ cat /home/redis/sentinel_26380.conf
 daemonize yes
 port 26380
 bind 172.18.95.83  127.0.0.1
 logfile "/home/redis/sentinel_26380.log"
 dir "/home/redis"
 sentinel monitor master_name 172.18.95.83 6380 2
 sentinel down-after-milliseconds master_name  30000
 sentinel parallel-syncs master_name  1
 sentinel failover-timeout master_name  180000
 sentinel auth-pass master_name  123456
```

**SYTEST2**

```
$ cat /home/redis/sentinel_26380.conf
 daemonize yes
 port 26380
 bind 172.18.95.84  127.0.0.1
 logfile "/home/redis/sentinel_26380.log"
 dir "/home/redis"
 sentinel monitor master_name 172.18.95.83 6380 2
 sentinel down-after-milliseconds master_name 30000
 sentinel parallel-syncs master_name 1
 sentinel failover-timeout master_name 180000
 sentinel auth-pass master_name  123456
```

**SYTEST3**

```
$ cat /home/redis/sentinel_26380.conf
 daemonize yes
 port 26380
 bind 172.18.95.85  127.0.0.1
 logfile "/home/redis/sentinel_26380.log"
 dir "/home/redis"
 sentinel monitor master_name 172.18.95.83 6380 2
 sentinel down-after-milliseconds master_name 30000
 sentinel parallel-syncs master_name 1
 sentinel failover-timeout master_name 180000
 sentinel auth-pass master_name 123456
```

- daemonize 后台运行
- port 哨兵的监听端口,这里是26380,同样的一台机器可以启多个哨兵进程,但端口必须不一致
- bind 哨兵绑定的IP地址,这里填写本地IP
- logfile 哨兵的日志文件
- dir 哨兵的工作目录
- sentinel monitor 后第一个参数指定哨兵监控的master的名称,可根据应用名称来命令,之后跟的是redis主库的IP地址 ,后面是redis的端口,最后是哨兵进程的仲裁数,这里3台哨兵设为2,代表当掉一个哨兵进程不影响功能
-  sentinel down-after-milliseconds 代表哨兵判断主库主观下线需要的时间,为30s
-  parallel-syncs 代表failover时同时可以多少备库同步主库,这里是一台
-  failover-timeout  代表故障转移的超时时间为180s
-  auth-pass代表连接redis进程判断其存活时的密码


如无特殊要求,哨兵的配置文件只需更改如下内容

- port 监听的端口 -- 第二行
- bind绑定的地址  -- 第三行
- master_name的值,根据应用来定,便于区分业务常见 -- 第四行
- 主库的地址 -- 第四行
- 哨兵仲裁节点的数量 -- 第四行
- 一个哨兵可监控多套主从环境,只需在此加入最后五行内容,注意修改相关内容

### 5.启动主从和哨兵

按照如下顺序来启动哨兵

- 启动主redis
- 启动备redis
- 启动所有哨兵(不分顺序)


**启动redis**

```
su - redis
redis-server /home/redis/redis_6380.conf
```

**启动哨兵**

```
su - redis
redis-sentinel /home/redis/sentinel_26380.conf
```


[image:936 size:orig]



这里我们看到启动哨兵后自动在配置文件加入了一些内容

可以很容易的看到

- 哨兵根据我们提供的主库找到另外两个从库

- 同样也找到了另外两个哨兵进程

- epoch为纪元,可以理解为切换一次+1,当前为0

### 6. 关闭主从和哨兵

- 关闭所有哨兵(不分顺序)
- 关闭从库
- 关闭主库


### 7.连接哨兵

我们采取和连接redis一样的方式连接哨兵,只不过需要更改端口

```
su - redis
redis-cli -p 26380  -a 123456
```

同样我们可以使用info命令来查看哨兵状态


[image:937 size:orig]



- status 为ok
- address为主redis的地址和端口
- slaves代表主库的从库数量
- sentinels代表有三个哨兵进程,注意非存活的数量,我们关闭一台哨兵这里仍显示3