Linux之Redis的部署(redis的安装、主从复制、sentinel实现高可用)

一、Redis的介绍

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,ObjectC,Python,Ruby,Erlang等客户端,使用很方便。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

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

二、Redis的安装

实验准备:

server1——主redis(172.25.65.1)

server2——从redis(172.25.65.2)

server3——从redis(172.25.65.3)

软件安装包:redis-5.0.3.tar.gz

server1中安装redis过程如下

1. 安装redis软件

tar zxf redis-5.0.3.tar.gz
yum  install -y gcc     #安装编译器
cd redis-5.0.3
make && make install        #安装

2. 运行安装脚本,设置redis相关文件或目录

cd redis-5.0.3/utils/
./install_server.sh       #运行安装脚本
netstat -antlp    #查看端口,该端口只对夲机有效,需要进行修改

安装完毕后,我们查看端口会发现,默认只监听本地的6379端口,需要进行修改,使它监听所有主机的6379端口

3. 修改配置文件中的端口

vim /etc/redis/6379.conf  #修改配置文件
bind 0.0.0.0
/etc/init.d/redis_6379 restart    #重启redis服务
netstat -antlp        #监听所有端口的6379
systemctl status redis_6379    #查看redis服务的状态

打开redis,可以通过/etc/init.d脚本进行打开,也可以使用systemctl命令打开服务

4. 进入redis命令端,进行测试

redis-cli     #进入redis
set name westos
get name
del name

三、redis的主从复制

1. 在server2上需要安装redis

tar zxf redis-5.0.3.tar.gz
cd redis-5.0.3
yum install -y gcc && make && make install
cd utils/
./install_server.sh

2. 配置文件中设置主从复制,并修改端口

vim /etc/redis/6379.conf
bind 0.0.0.0
replicaof 172.25.65.1 6379       #主从复制,复制172.25.5.1主机中的数据
/etc/init.d/redis_6379 restart
netstat -antlp

3. 测试主从复制

(1)在server1中进入redis命令端进行设置

redis-cli
set name xingxing
get name 

(2)在server2中查看,测试是否复制server1中redis的数据

redis-cli
get name
del name

我们可以发现,server2中的redis已经同步了server1,但是它只有复制的权限,没有修改权限

四、Redis的高可用

在之前的实验基础上,server3中也安装redis,参考server1流程,这里不再介绍了

Redis Sentinel 是一个分布式系统, 可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
1. 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
2. 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
3. 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

1. 在server3中安装redis

tar zxf redis-5.0.3.tar.gz
cd redis-5.0.3
yum install -y gcc && make && make install
cd utils/
./install_server.sh
vim /etc/redis/6379.conf
bind 0.0.0.0
replicaof 172.25.65.1 6379
/etc/init.d/redis_6379 restart

2.  在server1中编辑配置文件,修改master相关参数

cd /root/redis-5.0.3
cp sentinel.conf /etc/redis
vim /etc/redis/sentinel.conf
protected-mode no       #不进行保护
sentinel monitor mymaster 172.25.65.1 6379 2    # master的ip、端口、投票个数为2时,切换为master
sentinel down-after-milliseconds mymaster 10000 #等待master10s,没有响应则切换master
scp sentinel.conf server2:/etc/redis
scp sentinel.conf server3:/etc/redis

拷贝sentinel.conf文件到server2和server3,注意要先拷贝,再启动redis-sentinel

3. 启动各个节点的redis-sentinel

注意:启动 Sentinel 实例必须指定相应的配置文件, 系统会使用配置文件来保存 Sentinel 的当前状态, 并在 Sentinel 重启时通过载入配置文件来进行状态还原。如果启动 Sentinel 时没有指定相应的配置文件, 或者指定的配置文件不可写(not writable), 那么 Sentinel 会拒绝启动。

#三个节点同时执行该命令
redis-server /etc/redis/sentinel.conf --sentinel  #启动redis-sentinel

 三个结点同时打开sentinel(以server1为例),其他两个结点直接使用命令打开,不用做其他操作

server2和server3添加完毕后,server1中的显示如下

4. 测试高可用

关闭master,我们可以看到三个节点中的sentinel进程会通过选举产生新的master,其他slave结点会自动同步新master中的数据

redis-cli
SHUTDOWN

server3中查看具体master的切换过程

 通过redis命令行登录server3中,使用info命令可以看到server3已经切换为master,且server2复制server3中redis的数据

5.  开启server1,使它作为slave加入集群

vim /etc/redis/6379.conf 
replicaof 172.25.5.3 6379	#设置主master为server3
/etc/init.d/redis_6379 restart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值