搭建一主二从三哨兵模式
(一)安装redis
- 在Linux中执行以下命令进行redis的下载:
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
- 解压文件到/user/local/redis文件夹下:
mv redis-5.0.0.tar.gz /usr/local/
cd /usr/local
tar -xzvf redis-5.0.0.tar.gz
mv redis-5.0.0/ redis
- 进入redis目录执行编译指令:
cd redis
make&&make install
(二)搭建主从节点
- 在 redis目录下分别建bin和config两个目录,bin目录存放redis的启动文件,工作区,以及日志信息,config目录专门存放各种配置文件;
mkdir bin
mkdir config
- 复制启动文件和配置文件,Redis文件夹中的src中的文件非常多,我们将常用的几个分别复制到新建的bin和config中:
cd src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin
cp redis.conf /usr/local/redis/config
cp sentinel.conf /usr/local/redis/config
- 配置conf文件
我们一共需要有一个主节点和两个从节点,因此我们需要三个redis.conf文件
首先配置主节点: 进入config文件夹,打开redis.conf文件进行修改
cd config
vim redis.config
改动的几个地方:
在bind前面加'#'将它注释掉 大概在69行
# 绑定的主机地址(填redis安装服务器的业务私网地址)
# bind:127.0.0.1
将88行protected-mode 改为 no
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode no
92行 这个端口号为主节点的端口号,可以自己更改,我的为默认的6379
# redis进程的端口号
port:6379
136行 改为yes
# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes
158行 可以适当改一下名字
# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6479.pid
171行,可以改为自定义的文件名
# log文件输出位置
logfile "/redis6379.log"
253行 可以自行更改 不改也不影响
# 指定本地数据库文件名
dbfilename dump.rdb
263行 可以自行更改 不改也不影响
# 指定本地数据库存放目录(默认当前redis安装目录)
dir ./
218行
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)
在上述文件修改完成之后,按ESC–>输入 :wq 保存退出
- 防火墙设置:
先开启防火墙,开放指定端口6379:
systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent
重启防火墙(修改配置后要重启防火墙):
firewall-cmd --reload
- 启动主节点redis服务:
进入bin目录启动服务:
cd ../bin
./redis-server /usr/local/redis/config/redis.conf
查看正在运行的节点:
ps -ef | grep redis
查看节点的具体信息:
./redis-cli -p 6379
info replication
exit退出
- 配置两个从结点:
复制两份redis.conf文件,再分别修改他们:
cd ../config
cp redis.conf /usr/local/redis/config/redis1.conf
cp redis.conf /usr/local/redis/config/redis2.conf
vim redis1.conf
vim redis2.conf
redis1.conf文件修改的地方:
# bind 127.0.0.1
protected-mode no
port 6380
daemonize yes
pidfile "/var/run/redis_6380.pid"
logfile "/redis6380.log"
dbfilename "dump1.rdb"
dir "/usr/local/redis/bin"
redis2.conf文件修改的地方:
# bind 127.0.0.1
protected-mode no
port 6381
daemonize yes
pidfile "/var/run/redis_6381.pid"
logfile "/redis6381.log"
dbfilename "dump2.rdb"
dir "/usr/local/redis/bin"
配置防火墙:
firewall-cmd --zone=public --add-port=6380/tcp --permanent
firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --reload
启动两个节点的服务:
cd ../bin
./redis-server /usr/local/redis/config/redis1.conf
./redis-server /usr/local/redis/config/redis2.conf
主从关系建立:
在两个从结点处分别执行:
./redis-cli -p 6380
SLAVEOF 127.0.0.1 6379
info replication
设置完成后两个从节点的role显示自己是一个从结点,从属于主节点6379 (我这个更改过了,它从属的是6380. 6380是主节点)
至此,一主二从三个结点建立成功,可以通过ps -ef | grep redis
查看正在运行的节点.
- 主从数据同步验证
接下来我们在主机(master)添加几条数据,看从机(slave)是否可以获取到,如果能获取,说明数据已经同步到了从机,主机添加数据,如下:
(我这里已经更换过主节点,我的主节点是6380)
从结点不能写数据,只能读数据,如果向从结点写数据会报错:
(error) READONLY You can't write against a read only replica.
(三)配置三个哨兵
- 复制三个sentinel.conf文件,并修改他们:
cd ../config
cp sentinel.conf /usr/local/redis/config/sentinel1.conf
cp sentinel.conf /usr/local/redis/config/sentinel2.conf
cp sentinel.conf /usr/local/redis/config/sentinel3.conf
vim sentinel1.conf
vim sentinel2.conf
vim sentinel3.conf
文件中改动的地方:
port 26379
#设置为后台启动
daemonize yes
pidfile "/var/run/redis-sentinel1.pid"
#日志文件
logfile "/sentinel1.log"
#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
#这一项三个哨兵都是一样的
sentinel monitor mymaster 127.0.0.1 6380 2
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
#这一项三个哨兵都是一样的
sentinel parallel-syncs mymaster 1
其他两个哨兵也是更改这几个位置,但是最后两项每个哨兵都要保持一致。端口号port,日志文件名字和pidfile设定为不一样的。
- 防火墙配置:
firewall-cmd --add-port=26379/tcp --permanent --zone=public
firewall-cmd --add-port=26380/tcp --permanent --zone=public
firewall-cmd --add-port=26381/tcp --permanent --zone=public
firewall-cmd --reload
- 启动三个哨兵:
cd ../bin
./redis-sentinel /usr/local/redis/config/sentinel1.conf
./redis-sentinel /usr/local/redis/config/sentinel2.conf
./redis-sentinel /usr/local/redis/config/sentinel3.conf
- 查看三个哨兵节点信息
./redis-cli -p 26379
info sentinel
可以看到一个master主节点,两个salve节点状态,三个哨兵节点都正常。
5.容灾切换验证
先模拟主机宕机,将主机 redis 服务关闭,进入6379节点redis客户端:
./redis-cli -p 6379 shutdown
待6379关掉之后,等待一分钟左右,再次查看其他的两个节点,这个时候会发现其中一个节点已经成为了主节点,再次启动6379节点,可以查看到它的状态已经变成了从节点(slave)
我这里主节点变成了6380.
再次启动6379节点,发现6379变成了6380的从节点:
(四)配置完成
查看此时所有的服务:
关闭服务的顺序为:先关闭哨兵服务,再关闭节点服务
开启顺序为:先开启节点服务,再开启哨兵服务
命令为:
./redis-cli -p 6379 shutdown