Redis主从复制+哨兵模式搭建部署(保姆级教程)

Redis主从复制+哨兵模式搭建部署

Redis主从复制将一个Redis(Master主节点)的数据复制到其他Slave从节点,以实现数据的高可用性和读写分离。数据的复制是单向的,只能由主节点到从节点。

redis哨兵:
Redis Sentinel 在不使用 Redis 集群时为 Redis 提供高可用性。
Redis Sentinel还提供其他附带任务,例如监控, 通知并充当客户端的配置提供程序。
这是宏观层面(即大局)的哨兵功能的完整列表:

1、监控。Sentinel 会不断检查您的主实例和副本实例是否按预期工作。
2、通知。Sentinel 可以通过 API 通知系统管理员或其他计算机程序,其中一个受监控的 Redis 实例出现问题。
3、自动故障转移。如果主节点未按预期工作,Sentinel 可以启动故障转移过程,其中副本将提升为主副本,将其他其他副本重新配置为使用新的主副本,并且使用 Redis 服务器的应用程序将被告知连接时要使用的新地址。
4、配置提供程序。Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinels,以请求负责给定服务的当前 Redis 主服务器的地址。如果发生故障转移,Sentinels将报告新地址。

Redis Sentinel是一个分布式系统

Sentinel 本身设计为在有多个 Sentinel 进程协同的配置中运行。让多个 Sentinel 流程协作的优势如下:
当多个哨兵同意给定主节点不再可用时,将执行故障检测。这降低了误报的可能性。
即使不是所有的 Sentinel 进程都在工作,Sentinel 也能正常工作,使系统能够抵御故障。毕竟,拥有一个本身就是单点故障的故障转移系统没有任何乐趣。
哨兵、Redis 实例(主实例和副本实例)和客户端的总和 连接到Sentinel和Redis,也是一个更大的分布式系统,具有 特定属性。在本文档中,概念将逐步介绍 从基本信息开始,了解基本信息 Sentinel 的属性,到更复杂的信息(可选)在 以了解哨兵究竟是如何工作的。

一、部署前准备

1、准备三台redis服务器
master 192.168.1.10
slave1 192.168.1.11
slave2 192.168.1.12

2、创建ssh/scp秘钥(方便安装、不用到三台服务器上做重复操作),创建后上传给其他两台服务器。三台服务器做同样的操作,把后面的IP改一下就行

[root@master ~]# cd .ssh
[root@master .ssh]# ssh-keygen	#一直回车就行
[root@master .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.11
[root@master .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.12

二、安装Redis

1、在三台服务器上安装redis
下载redis-5.0.5.tar.gz,服务器能访问互联网的话直接用wget下载,不能访问互联网就拷贝进去。

[root@master ~]# cd /opt/	#我这安装在opt下,可自行选择
[root@master opt]# wget http://download.redis.io/releases/redis-5.0.5.tar.gz

速度慢的话可以用迅雷下载

2、安装依赖和Redis

[root@master opt]# yum -y install gcc   #没有yum源的自行找gcc包
[root@master opt]# tar -zxvf redis-5.0.5.tar.gz
[root@master opt]# cd redis-5.0.5
[root@master opt]# make MALLOC=libc
[root@master opt]# make
[root@master opt]# cd src
[root@master opt]# make install PREFIX=/usr/local/redis #指定安装目录至/usr/local/redis
[root@master opt]# mkdir /usr/local/redis/etc/

3、修改Redis配置文件(三台服务器同样操作)
先把配置文件复制到我们指定的目录下

[root@master opt]# cp /opt/redis-5.0.5/redis.conf /usr/local/redis/etc/
[root@master opt]# cd /usr/local/redis/etc/
[root@master etc]# vim redis.conf

修改以下内容

daemonize no改为daemonize yes  #redis后台启动
requirepass foobared改为requirepass 123456	#设置redis密码
bind 127.0.0.1改为#bind 127.0.0.1	#注释掉此行
pidfile /usr/local/redis/run/redis_6379.pid 	
logfile "/usr/local/redis/logs/redis.log"
dir /usr/local/redis/dbcache/

:wq保存退出

4、把配置文件上传给其他两台服务器

[root@master etc]# scp -r /usr/local/redis/etc/redis.conf root@192.168.1.11:/usr/local/redis/etc/redis.conf
[root@master etc]# scp -r /usr/local/redis/etc/redis.conf root@192.168.1.12:/usr/local/redis/etc/redis.conf

5、创建配置文件中修改的pid、log、dbcache文件(三台服务器同样操作)

[root@master etc]# mkdir /usr/local/redis/run
[root@master etc]# touch /usr/local/redis/run/redis_6379.pid

[root@master etc]# mkdir /usr/local/redis/logs
[root@master etc]# touch /usr/local/redis/logs/redis.log

[root@master etc]# mkdir /usr/local/redis/dbcache

6、设置Redis实用systemctl方式启动(三台服务器做同样操作)

[root@master etc]# cd /lib/systemd/system
[root@master etc]# vim redis.service
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/opt/redis-5.0.5/src/redis-server /usr/local/redis/etc/redis.conf --daemonize no
ExecStop=/opt/redis-5.0.5/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target

保存退出
创建链接并刷新配置

[root@master system]# ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
[root@master system]# systemctl daemon-reload

7、关闭防火墙、selinux

[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
[root@master ~]# setenforce 0

三、启动Redis

因为做了systemctl模式,直接启动

[root@master ~]# systemctl start redis.service

进入redis界面

[root@master ~]# cd /opt/redis-5.0.5/src/
[root@master src]# ./redis-cli -h 127.0.0.1 -p 6379 -a “123456”
127.0.0.1:6379>

测试写入、读取数据

127.0.0.1:6379> set age 22
127.0.0.1:6379> get age
"22"

四、部署哨兵模式

1、先把包里的配置文件拷贝过来

[root@master ~]# cp /opt/redis-5.0.5/sentinel.conf /usr/local/redis/etc

2、修改配置文件

[root@master ~]# vim /usr/local/redis/etc/sentinel.conf

3、修改以下内容

daemonize的值从no设置为yes
pidfile /usr/local/redis/run/redis-sentinel.pid
logfile "/usr/local/redis/logs/redis-sentinel.log"
dir /usr/local/redis/tmp
sentinel monitor mymaster 192.168.1.10 6379 2	#设置redis主机IP地址,端口,选举次数
sentinel auth-pass mymaster 123456		#设置redis主机访问密码
sentinel down-after-milliseconds mymaster 8000	#心跳检测8000毫秒,如果主机8秒内没有相应,就会在从机开始选举
sentinel parallel-syncs mymaster 1	#执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

4、把配置文件上传给另外两台服务器(因为我配置了三台哨兵,可只配一台)

[root@master ~]# scp -r /usr/local/redis/etc/sentinel.conf root@192.168.1.11:/usr/local/redis/etc/sentinel.conf
[root@master ~]# scp -r /usr/local/redis/etc/sentinel.conf root@192.168.1.12:/usr/local/redis/etc/sentinel.conf

5、创建pid、log、tmp文件(三台服务器同样操作)

[root@master ~]# mkdir /usr/local/redis/run
[root@master ~]# touch /usr/local/redis/run/redis-sentinel.pid
[root@master ~]# touch /usr/local/redis/logs/redis-sentinel.log
[root@master ~]# mkdir /usr/local/redis/tmp

6、将哨兵服务用systemctl方式启动(三台服务器同样操作)

[root@master ~]# cd /lib/systemd/system
[root@master system]# vim redis-sentinel.service
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/opt/redis-5.0.5/src/redis-sentinel /usr/local/redis/etc/sentinel.conf --sentinel
ExecStop=/opt/redis-5.0.5/src/redis-cli -h 127.0.0.1 -p 26379 shutdown
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

创建链接并刷新配置

[root@master system]# ln -s /lib/systemd/system/redis-sentinel.service /etc/systemd/system/multi-user.target.wants/redis-sentinel.service
[root@master system]# systemctl daemon-reload

7、修改master主机的配置文件

[root@master ~]# vim /usr/local/redis/etc/redis.conf
masterauth 123456

8、重新启动redis服务

[root@master ~]#  systemctl stop redis.service
[root@master ~]#  systemctl start redis.service

9、启动哨兵服务(三台服务器同样操作)

[root@master ~]#  systemctl start redis.service

10、进入redis界面查看redis信息(三台服务器同样操作)

[root@master ~]#  /opt/redis-5.0.5/src/redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1> info replication
#Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.11,port=6379,state=online,offset=6004890,lag=0
slave1:ip=192.168.1.12,port=6379,state=online,offset=6004890,lag=1
...
...

11、测试选举策略
将master节点192.168.1.10主节点的redis服务关掉

[root@master ~]#  systemctl stop redis.service

等8秒后去slave节点192.168.1.11上查看master已经飘到slave1上

[root@slave1~]# /opt/redis-5.0.5/src/redis-cli -h 127.0.0.1 -p 6379 -a 123456
127.0.0.1> info replication
#Replication
role:master
connected_slaves:1
slave1:ip=192.168.1.12,port=6379,state=online,offset=6004890,lag=1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀儿*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值