Redis主从复制和高可用集群的部署

redis的简介

redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 key/value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 appendonly file(aof)里面(这称为“全持久化模式”)。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

 

redis的安装

1.安装依赖gcc依赖,否则加压的包可能会有问题

[root@redis1 ~]# yum install gcc -y

2.获取安装包,并解压

[root@redis1 ~]# tar zxf redis-5.0.3.tar.gz
[root@redis1 ~]# ls
redis-5.0.3  redis-5.0.3.tar.gz

3.进行编译安装

[root@redis1 ~]# cd redis-5.0.3
[root@redis1 redis-5.0.3]# make
[root@redis1 redis-5.0.3]# make install

4.配置并启动服务

[root@red[root@redis1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
is1 redis-5.0.3]# cd utils/


5.查看端口占用情况
redis占用端口6379

 

 

6.redis2、rediss3和redis1做相同的操作
配置并启动服务

 

 

redis的主从配置

1.编辑配置文件
redis1(master):

[root@redis1 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0      # 绑定的主机地址,可以绑定单一接口,如果没有绑定,所有接口都会监听到来的连接

[root@redis1 ~]# /etc/init.d/redis_6379  restart
Stopping ...
Redis stopped
Starting Redis server...

redis2(slave):

[root@redis2 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0
slaveof 172.25.60.1 6379    #配置master主机IP和端口

[root@redis2 ~]# /etc/init.d/redis_6379  restart
Stopping ...
Redis stopped
Starting Redis server...

配置文件详解


2.测试
master写入:

[root@redis1 ~]# redis-cli
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
"18"

slave查看:

[root@redis2 utils]# redis-cli
127.0.0.1:6379> get age
"18"

常用命令

1. redis-cli命令

Redis 命令用于在 redis 服务上执行操作,要在 redis 服务上执行命令需要一个 redis 客户端

Redis 客户端的基本语法为:

$ redis-cli

如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

$ redis-cli -h host -p port -a password

2. slaveof 命令

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

 

 


redis的故障切换

1.部署第二台slave
redid3(slave):

[root@redis3 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0
slaveof 172.25.60.1 6379


2.编辑监控sentinel的配置文件

[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf  sentinel.conf

[root@server1 redis]# vim sentinel.conf

protected-mode no    
#关闭保护模式,允许访问
sentinel monitor mymaster 172.25.60.1 6379 2
#配置指示 Sentinel 去监视一个名为 mymaster 的主服务器,这个主服务器的IP为172.25.60.1,端口为6379,而将这个主服务器判断为失效至少需要2个Sentinel同意(只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行),这里的2是指 quorum=2

sentinel down-after-milliseconds mymaster 10000
#表示 Sentinel 认为服务器已经断线所需的毫秒数。在指定时间内没有返回响应,则视为下线。

sentinel parallel-syncs mymaster 1
#表示刚设定为新主时,允许同时有多少个从向主发起同步请求

sentinel failover-timeout mymaster 180000
#表示当master故障时,把新的从提升为master,多长时间切换不过去就认为故障转移失败了

3.先将文件复制给server2和server3,然后再开启监控
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
sentinel.conf                                100% 9710     9.5KB/s   00:00    
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
sentinel.conf                                100% 9710     9.5KB/s   00:00    
 
将三台redis开启监控
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel

注意:
每多开一个监控,就会多出一条这个消息

2114:X 02 Mar 2019 08:10:08.825 * +sentinel sentinel 
90d1153cfba9f2ba064283ef1f91c9a609c27ba6 172.25.60.1 26379 @ mymaster 172.25.60.1 6379

监控如下:

master

slave

查看状态:

master

slave

 


测试:当我们把master中的redis宕掉之后,此时监控中,我们可以看到master切换到其它server3主机上, 而此时server2中配置文件的slaveof的值也变为server3了。

[root@redis1 ~]# redis-cli
127.0.0.1:6379> info

127.0.0.1:6379> shutdown
将redis1 SHUTDOWN

查看监控:

查看redis3上的信息,发现redis3已经变成master


4.将server1开启,并写改配置文件添加slaveof  172.25.27.3 6379

再次观察redis3的info

 

原理参考链接
链接一

链接二

链接三

链接四

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值