redis的主从同步及高可用集群
redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了
memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很
好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。
Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上
(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 append
only file(aof)里面(这称为“全持久化模式”)。
1.安装redis
以server2为例(server3也做)
[root@server2 ~]# tar zxf redis-4.0.8.tar.gz
[root@server2 ~]# yum install gcc -y
Make && make install
[root@server2 redis-4.0.8]# cd utils/
[root@server2 utils]# ./install_server.sh
[root@server2 utils]# vim /etc/redis/6379.conf bind 0.0.0.0
[root@server2 utils]# /etc/init.d/redis_6379 restart
/etc/redis/6379.conf内容:
2.Redis 主从同步
master(主):server3—->172.25.25.3
slave (从):server2—->172.25.25.2
master上:
[root@server3 utils]# redis-cli
127.0.0.1:6379> set name lin
OK
127.0.0.1:6379> get name
"lin"
127.0.0.1:6379> set user1 111
OK
127.0.0.1:6379> get user1
"111"
slave上
[root@server2 utils]# vim /etc/redis/6379.conf slaveof 172.25.25.3 6379
[root@server2 utils]# /etc/init.d/redis_6379 restart
[root@server2 utils]# redis-cli
127.0.0.1:6379> get name
"lin"
127.0.0.1:6379> get user1
"111"
/etc/redis/6379.conf内容
再测试:
master
[root@server3 utils]# redis-cli
127.0.0.1:6379> set name lll
OK
slave
127.0.0.1:6379> get name
"lll"
3.redis高可用
先在server1上按照第一步安装配redis,和server2的配置一样作为slave
再在master上配置:
[root@server3 redis-4.0.8]# cp sentinel.conf /etc/redis/
[root@server3 redis-4.0.8]# cd /etc/redis/
[root@server3 redis]# vim sentinel.conf
这里只写master的ip,两个slave和master的文件配置完全一样,也写master的ip
把文件传给slave(server1和server2)
[root@server3 redis]# scp sentinel.conf server2:/etc/redis/
[root@server3 redis]# scp sentinel.conf server1:/etc/redis/
监控命令:
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
再打开一个server3的shell
# 查看server3的信息
[root@server3 ~]# redis-cli
127.0.0.1:6379> info
.
.
.
# Replication
role:master #本机为mastes
connected_slaves:2
slave0:ip=172.25.25.2,port=6379,state=online,offset=37996,lag=0
slave1:ip=172.25.25.1,port=6379,state=online,offset=38133,lag=0# 关闭master
127.0.0.1:6379> shutdown
not connected>
# 查看监控监控,30秒后server1变为master,server3为shutdown状态
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6954:X 11 Aug 17:19:35.692 # +switch-master mymaster 172.25.25.3 6379 172.25.25.1 6379
6954:X 11 Aug 17:19:35.693 * +slave slave 172.25.25.2:6379 172.25.25.2 6379 @ mymaster 172.25.25.1 6379
6954:X 11 Aug 17:19:35.693 * +slave slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379
6954:X 11 Aug 17:20:05.739 # +sdown slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379
开启server3的服务
[root@server3 ~]# /etc/init.d/redis_6379 start
# 监控,30秒后server3变为slave
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6954:X 11 Aug 17:22:51.065 # -sdown slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379
查看server3的配置文件最后一行自动添加了内容:
4.Redis 集群(无中心化)
# 建立目录
[root@server3 ~]# cd /usr/local/
[root@server3 local]# mkdir cluster
[root@server3 local]# cd cluster/
# 建立端口
[root@server3 cluster]# mkdir 7001
[root@server3 cluster]# mkdir 7002
[root@server3 cluster]# mkdir 7003
[root@server3 cluster]# mkdir 7004
[root@server3 cluster]# mkdir 7005
[root@server3 cluster]# mkdir 7006
[root@server3 cluster]# cd 7001/
# 编写配置文件
[root@server3 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
[root@server3 7001]# cd /root/redis-4.0.8/src/
[root@server3 src]# cp redis-trib.rb /usr/local/bin/
安装部署ruby
[root@server3 bin]# yum install -y ruby
[root@server3 ~]# yum install ruby-2.2.3-1.el6.x86_64.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm -y
[root@server3 ~]# gem install --local redis-4.0.1.gem
配置并启动
[root@server3 ~]# cd /usr/local/cluster/7001
[root@server3 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log
[root@server3 7001]# redis-server redis.conf
查看日志,根据信息修改
[root@server3 7001]# cat redis.log
[root@server3 7001]# echo 511 > /proc/sys/net/core/somaxconn
[root@server3 7001]# sysctl -w vm.overcommit_memory=1
[root@server3 7001]# vim /etc/sysctl.conf #写入文件vm.overcommit_memory = 1
[root@server3 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
给其他几个接口都做配置
# 把文件分别拷给其他目录
[root@server3 7001]# cp redis.conf ../7002
[root@server3 7001]# cp redis.conf ../7003
[root@server3 7001]# cp redis.conf ../7004
[root@server3 7001]# cp redis.conf ../7005
[root@server3 7001]# cp redis.conf ../7006# 将redis.conf文件中7001改为各自的目录名(7002,7003,7004...),并启动
[root@server3 7001]# cd ../7002
[root@server3 7002]# vim redis.conf
[root@server3 7002]# redis-server redis.conf
[root@server3 7002]# cd ../7003
[root@server3 7003]# vim redis.conf
[root@server3 7003]# redis-server redis.conf
[root@server3 7003]# cd ../7004
[root@server3 7004]# vim redis.conf
[root@server3 7004]# redis-server redis.conf
[root@server3 7004]# cd ../7005
[root@server3 7005]# vim redis.conf
[root@server3 7005]# redis-server redis.conf
[root@server3 7005]# cd ../7006
[root@server3 7006]# vim redis.conf
[root@server3 7006]# redis-server redis.conf
建立集群
[root@server3 7006]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
测试:
[root@server3 7006]# redis-cli -c -p 7001
127.0.0.1:7001> set name llj
-> Redirected to slot [5798] located at 127.0.0.1:7002 #数据写在了7002
OK
127.0.0.1:7002> get name
"llj"
127.0.0.1:7002>
[root@server3 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"llj"
关闭7002
[root@server3 7006]# ps ax
.
.
.1388 ? Ssl 0:00 redis-server *:7001 [cluster]1408 ? Ssl 0:00 redis-server *:7002 [cluster]1415 ? Ssl 0:00 redis-server *:7003 [cluster]1421 ? Ssl 0:00 redis-server *:7004 [cluster]1427 ? Ssl 0:00 redis-server *:7005 [cluster]1433 ? Ssl 0:00 redis-server *:7006 [cluster]1449 pts/0 R+ 0:00 ps ax
[root@server3 7006]# kill 1388
查看
# 数据由7002的slave(7005)接替
[root@server3 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005
"llj"
127.0.0.1:7005>
开启7002(本宝宝之前不小心kill掉了7001,如果你们的7001没有kill掉的话不用开启,只需开启7002)
[root@server3 7006]# cd ../7001
[root@server3 7001]# redis-server redis.conf
[root@server3 7001]# cd ../7002
[root@server3 7002]# redis-server redis.conf
[root@server3 7002]# redis-trib.rb check 127.0.0.1:7006
emmm…在做的过程中遇到一些问题,这是恢复正常之后的master和slave状态
如果同时kill掉两个master,master数少于slave,将查询不到任何信息
# kill掉7005和7006
[root@server3 7006]# ps ax
.
.
.1427 ? Ssl 0:01 redis-server *:7005 [cluster]1433 ? Ssl 0:01 redis-server *:7006 [cluster]1460 ? Ssl 0:00 redis-server *:7001 [cluster]1467 ? Ssl 0:00 redis-server *:7002 [cluster]1493 ? Ssl 0:01 redis-server *:7003 [cluster]1501 ? Ssl 0:01 redis-server *:7004 [cluster]1511 pts/0 R+ 0:00 ps ax
[root@server3 7004]# kill 1427 1433
查询
[root@server3 7002]# redis-trib.rb check 127.0.0.1:7006
[root@server3 7004]# redis-cli -c -p 7004
127.0.0.1:7004> get name
(error) CLUSTERDOWN The cluster is down #查看失败
redis的主从同步及高可用集群相关推荐
- MHA-结合MySQL半同步复制高可用集群(Centos7)
目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...
- redis高可用集群
一.redis集群方案比较 主从哨兵模式 redis3.0之前的版本实现集群一般采用的方案是借助哨兵sentinel工具来监控master节点的状态,如果master主节点异常,则会做主从切换,将一台 ...
- Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式
redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...
- MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)
1.kafka主从同步与高可用 https://1028826685.iteye.com/blog/2354570 http://developer.51cto.com/art/201808/5815 ...
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群
Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...
- Redis缓存高可用集群
Redis缓存高可用集群 一.Redis集群方案比较 1.哨兵模式 2.高可用集群模式 二.Redis高可用集群搭建 1.在第一台服务器建立两个节点 2.第一个节点的redis.conf配置 3.启动 ...
- 部署Redis高可用集群
目录 部署Redis高可用集群 Redis集群环境 拓扑结构 IP地址 环境准备 工作原理 创建Redis集群 部署管理主机 redis-trib.rb脚本 redis服务器开启集群功能 管理主机创建 ...
- redis 04:Redis高可用集群
文章目录 一.Redis集群方案比较 二.Redis高可用集群搭建 三.Java操作redis集群 四.Redis集群原理分析 五.集群伸缩 5.1 集群扩展 5.1 缩容集群 六.总结 以下参考了图 ...
最新文章
- D1net阅闻:思科占全球交换路由器53%市场份额
- 微软亚洲研究院多媒体计算组招聘计算机视觉算法实习生
- Python的filter方法实现筛选功能
- .NET Core跨平台的奥秘[下篇]:全新的布局
- Centos7 Apache 2.4.18编译安装
- mysql查询报错: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by
- java 模块化基础
- C++11 Lambda表达汇总总结
- C#之反射又是什么东西
- configure/make的shared object参数
- eja智能压力变送器工作原理_EJA智能压力变送器
- CAM表含义及各层交换机介绍
- 【Matlab】函数uigetfile的使用
- Nature communications
- Anaconda 踩过的一些坑
- labview初级08---波形图、波形图表、XY图
- mysql 高可用方案
- (20210116已解决)Windows下的CTF加载程序是什么?
- 记录一次 CPU sy 过高的排查经历
- 【python】 turtle实现汉诺塔游戏动画过程
热门文章
- 微信PC端不显示头像和表情怎么解决
- oracle增加分区时报ora14036,增加分区表2009年的分区报ORA-14074错误
- 百度apistore第三方登陆使用说明
- Centos7安装HighGo DB V6企业版
- 名创优品通过上市聆讯:寻求双重主要上市 年营收91亿
- 微信对账单--每日定时任务获取昨日微信支付账单
- 输入192.168.1.1登陆页面打不开怎么办
- 计算机无法登陆账户 让注销,电脑开机出现登陆账户,点了以后就马上注销,怎么处理?...
- 正方教务系统php登陆,正方教务管理系统最新版无条件注入GetShell | wooyun-2015-0122523| WooYun.org...
- OV7725摄像头的彩色图像采集原理与液晶显示《一》