我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux系统mysql数据库redis主从复制

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux系统mysql数据库redis主从复制


	linux系统mysql数据库redis主从复制
[数据库教程]

第一章: 关系型和非关系型

实质。
非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。

价格。
目前基本上大部分主流的非关系型数据库都是免费的。而比较有名气的关系型数据库,比如Oracle、DB2、MSSQL是收费的。虽然Mysql免费,但它需要做很多工作才能正式用于生产。

功能。

? 实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高、成本更低的非关系型数据库当然是更明智的选择。

非关系型数据库的优势:

  1. 性能
    NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

  2. 可扩展性
    同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:

  1. 复杂查询
    可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

  2. 事务支持
    使得对于安全性能很高的数据访问要求得以实现。

对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

=======================================

第二章:Redis特点及应用场景

特点

速度快
Redis 所有的数据都存放在内存中
Redis 使用c语言实现
Redis 使用单线程架构

基于键值对的数据结构服务器
5种数据结构:字符串,哈希,列表,集合,有序集合

丰富的功能
提供了键过期功能,可以实现缓存
提供了发布订阅功能,可以实现消息系统
提供了pipeline功能,客户端可以将一批命令一次性传到 Redis,减少了网络开销

简单稳定
源码很少,3.0 版本以后 5 万行左右.
使用单线程模型法,是的Redis服务端处理模型变得简单.
不依赖操作系统的中的类库

客户端语言多
java,PHP,python,C,C++,Nodejs等

数据持久化
把所有的数据都存在内存中
RDB和AOF

主从复制
8.高可用和分布式
哨兵 redis-sentinel
集群 redis-cluster

应用场景
1.缓存-键过期时间
缓存session会话
缓存用户信息,找不到再去mysql查,查到然后回写到 redis
优惠卷过期时间

排行榜-列表&有序集合
热度排名排行榜
发布时间排行榜

计数器应用-天然支持计数器
帖子浏览数
视频播放次数
商品浏览数

社交网络-集合
踩/赞,粉丝,共同好友/喜好,推送,打标签

消息队列系统-发布订阅
配合elk实现日志收集

=======================================

第三章:安装部署

目录规划

redis 下载目录:/data/soft/
redis 安装目录:/opt/redis_cluster/redis_{PORT}/{conf,logs,pid}
redis 数据目录:/data/redis_cluster/redis_{PORT}/redis_{PORT}.rdb
redis 运维脚本:/root/scripts/redis_shell.sh

安装操作命令

#创建软件下载目录
cd /data/soft/
#创建redis存放数据目录
mkdir -p /data/redis_cluster/redis_6379
#创建软件安装目录,包含配置文件,pid,日志存放位置
mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
#下载reids,解压到安装目录,并做软链接
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
#进入安装目录进行安装
cd /opt/redis_cluster/redis
make && make install

配置文件

cd /opt/redis_cluster/redis_6379/conf/
cat >redis_6379.conf <

启动redis实列

redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf

检查是否启动

ps -ef|grep redis 
netstat -lntup|grep 6379 

配置hosts文件

cat >/etc/hosts<

测试

[[email protected] ~]# redis-cli -h db01 
[[email protected] ~]# redis-cli -h db01 
db01:6379> set k1 v1
OK
db01:6379> get k1
"v1"
db01:6379> 

=======================================

第四章:redis基本操作命令

全局命令
1.查看所有的key
keys *

查看有多少个key,注意,是估值
DBSIZE

查看是否存在这个KEY
EXISTS k1
EXISTS k1 k2 k3

状态码:
0 表示这个key不存在
1 表示这个key存在
N 表示有的N个key存在

删除key
DEL k1
DEL k1 k2 k3

状态码:
0 表示这个key不存在
1 表示这个key存在,并且删除成功
N 表示有的N个key存在,并且删除N个Key

键过期
设置过期时间
EXPIRE k1 100

取消过期时间
PERSIST k2

状态码:
0: 表示这个key原来就没有设置过期时间
1: 表示这个key存在过期时间,并且取消成功

查看key是否过期
TTL k1

状态码:
-1: 这个key存在,但是没有设置过期时间
-2: 这个key不存在
N: 表示这个key还有多久过期,时间是秒

过期后的key直接会被删除

=======================================

字符串操作:
1.设置一个key
set k1 v2

查看一个key
get k1

设置多个key
MSET k1 v1 k2 v2 k3 v3

查看多个key
MGET k1 k2 k3

天然计数器
set k1 100

INCR k1 #默认加1
INCRBY k1 N #加N

=======================================

列表:
插入列表:
LPUSH:从列表左侧插入数据
RPUSH:从列表右侧插入数据

db01:6379> LPUSH list1 A
(integer) 1
db01:6379> LPUSH list1 B
(integer) 2
db01:6379> LPUSH list1 C
(integer) 3
db01:6379> RPUSH list1 D
(integer) 4

查看列表的长度:
db01:6379> LLEN list1
(integer) 4

查看列表的内容:
db01:6379> LRANGE list1 0 -1

  1. "C"
  2. "B"
  3. "A"
  4. "D"

删除列表元素:
LPOP: 从列表左侧删除
RPOP: 从列表右侧删除

db01:6379> LPOP list1
"C"
db01:6379> RPOP list1
"D"
db01:6379> LRANGE list1 0 -1

  1. "B"
  2. "A"

删除列表内容:
db01:6379> DEL list1
(integer) 1

=======================================

哈希:

生成一个hash类型:
db01:6379> hmset user:1000 username zhangya age 27 job it
OK

查看hash里的一个值
db01:6379> HGET user:1000 job
"it"
db01:6379> HGET user:1000 username
"zhangya"

查看hash里的多个值
db01:6379> HMGET user:1000 username age job

  1. "zhangya"
  2. "27"
  3. "it"

查看hash里的所有的值
db01:6379> HGETALL user:1000

  1. "username"
  2. "zhangya"
  3. "age"
  4. "27"
  5. "job"
  6. "it"

=======================================

集合:

创建集合
sadd set1 1 2 3
sadd set2 3 4 5

查看集合的成员:
db01:6379> SMEMBERS set1

  1. "1"
  2. "2"
  3. "3"
    db01:6379> SMEMBERS set2
  4. "3"
  5. "4"
  6. "5"

查看集合的差集,以前面一个集合为基准对比后面的
db01:6379> SDIFF set1 set2

  1. "1"
  2. "2"
    db01:6379> SDIFF set2 set1
  3. "4"
  4. "5"

查看集合的交集
db01:6379> SINTER set1 set2

  1. "3"

查看集合的并集
db01:6379> SUNION set1 set2

  1. "1"
  2. "2"
  3. "3"
  4. "4"
  5. "5"

集合不允许出现重复的值
db01:6379> SADD set1 1 2 3 4 5 6 6 7 7
(integer) 4
db01:6379> SMEMBERS set1

  1. "1"
  2. "2"
  3. "3"
  4. "4"
  5. "5"
  6. "6"
  7. "7"

===================================

第五章: Redis持久化

RDB和AOF优缺点
RDB: 快照,把当前内存里的状态快照到磁盘上
优点: 恢复速度快
缺点: 可能会丢失数据

AOF: 类似于mysql的binlog,重写,1秒写一次
优点: 安全,有可能会丢失1秒的数据
缺点: 文件比较大,恢复速度慢

配置RDB

vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
save 900 1
save 300 10
save 60 10000
dir /data/redis_cluster/redis_6379/
dbfilename redis_6379.rdb

结论:
1.执行shutdown的时候,内部会自动执行bgsave,然后再执行shutdown
2.pkill kill killall 都类似于执行shutdown命令.会触发bgsave持久化
3.恢复的时候,rdb文件名称要和配置文件里写的一样
4.如果没有配置save参数,执行shutdown不会自动bgsave持久化
5.如果没有配置save参数,可以手动执行bgsave触发持久化保存

配置AOF

vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
appendonly yes
appendfsync always
appendfsync everysec
appendfsync no

实验:
如果aof和rdb文件同时存在,redis会如何读取:

实验步骤:
1.插入一条数据
aof: 有记录
rdb: 没有记录
2.复制到其他地方
3.把redis停掉
4.清空数据目录
5.把数据文件拷贝过来
aof: 有记录
rdb: 没有记录
6.启动redis
7.测试,如果有新插入的数据,就表示读取的是aof,如果没有,就表示读取的是rdb

实验结论:
如果2种数据格式都存在,优先读取aof

========================================

第六章: Redis用户认证

配置文件

vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
requirepass 123456

使用密码登录
两种方式:
第一种:

[[email protected] ~]# redis-cli -h db01
db01:6379> get k_1
(error) NOAUTH Authentication required.
db01:6379> AUTH 123456
OK
db01:6379> get k_1
"v_1"

第二种:

[[email protected] ~]# redis-cli -h db01 get k_1
(error) NOAUTH Authentication required.
[[email protected] ~]# redis-cli -h db01 -a 123456 get k_1
"v_1"

========================================

第七章: Redis主从复制

快速创建第二台redis节点命令:
rsync -avz /opt/* db02:/opt/
rsync -avz /data db02:/
cd /opt/redis_cluster/redis
make install
sed -i ‘s#51#52#g‘ /opt/redis_cluster/redis_6379/conf/redis_6379.conf
rm -rf /data/redis_cluster/redis_6379/*
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf

配置主从方法:
方法1: 临时生效

[[email protected] ~]# redis-cli -h 10.0.0.52
10.0.0.52:6379> SLAVEOF 10.0.0.51 6379
OK

方法2: 写入配置文件

vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
SLAVEOF 10.0.0.51 6379

主从复制流程:
1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作

  • 立即执行bgsave将当前内存里的数据持久化到磁盘上
  • 持久化完成之后,将rdb文件发送给从节点
    3.从节点从主节点接收到rdb文件之后,做了如下操作
  • 清空自己的数据
  • 载入从主节点接收的rdb文件到自己的内存里
    4.后面的操作就是和主节点实时的了

取消主从复制

SLAVEOF no one

注意!!!
1.从节点只读不可写
2.从节点不会自动故障转移,它会一直同步主
10.0.0.52:6379> set k1 v1
(error) READONLY You can‘t write against a read only slave.
3.主从复制故障转移需要人工介入

  • 修改代码指向REDIS的IP地址
  • 从节点需要执行SLAVEOF no one

注意!!!
1.从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失

安全的操作:
1.无论是同步,无论是主节点还是从节点
2.先备份一下数据

===================================================================

第八章: Redis哨兵

哨兵操作

1.安装部署3个单节点

!!!!注意!!!!

三个节点修改为自己的IP地址

mkdir -p /data/redis_cluster/redis_6379
mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
cd /opt/redis_cluster/redis
make && make install
cd /opt/redis_cluster/redis_6379/conf/
cat >redis_6379.conf < daemonize yes
bind 10.0.0.5x
port 6379
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
databases 16
dbfilename redis_6379.rdb
dir /data/redis_cluster/redis_6379
EOF

2.安装部署3个哨兵节点

!!!!注意!!!!

三个节点的bind IP修改为自己的IP地址

mkdir -p /data/redis_cluster/redis_26379
mkdir -p /opt/redis_cluster/redis_26379/{conf,pid,logs}

3.配置哨兵的配置文件

cat >/opt/redis_cluster/redis_26379/conf/redis_26379.conf << EOF
bind 10.0.0.5x
port 26379
daemonize yes
logfile /opt/redis_cluster/redis_26379/logs/redis_26379.log
dir /data/redis_cluster/redis_26379
#mymaster 主节点别名 主节点 ip 和端口,判断主节点失败,两个 sentinel 节点同意
sentinel monitor mymaster 10.0.0.51 6379 2 
#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
sentinel down-after-milliseconds mymaster 3000
#向新的主节点发起复制操作的从节点个数,1 轮询发起复制
sentinel parallel-syncs mymaster 1
#故障转移超时时间
sentinel failover-timeout mymaster 18000
EOF

启动所有的单节点

redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 

配置主从复制

redis-cli -h db02 slaveof 10.0.0.51 6379
redis-cli -h db03 slaveof 10.0.0.51 6379

启动哨兵

redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf

验证主节点

redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster
redis-cli -h db02 -p 26379 Sentinel get-master-addr-by-name mymaster
redis-cli -h db03 -p 26379 Sentinel get-master-addr-by-name mymaster

模拟故障转移

关闭主节点服务上的所有redis进程

kill redis
  • 观察其他2个节点会不会发生选举
  • 查看配置文件里会不会自动更新
  • 查看新的主节点能不能写入
  • 查看从节点能否正常同步

模拟故障修复上线

启动单节点

redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 

启动哨兵

redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf

模拟权重选举

设置其他节点的权重为0

redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0

手动发起重新选举

redis-cli -h db01 -p 26379 sentinel failover mymaster
  • 观察所有节点消息是否同步
  • 观察切换结果是否符合预期

验证选举结果:

redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster

命令解释:
1.查询命令:CONFIG GET slave-priority
2.设置命令:CONFIG SET slave-priority 0
3.主动切换:sentinel failover mymaster

操作命令:
redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0
redis-cli -h db01 -p 26379 sentinel failover mymaster

禁用危险指令:

设置配置文件

[[email protected] ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
rename-command KEYS ""

重启redis

[[email protected] ~]# redis-cli -h db01 shutdown
[[email protected] ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf

验证是否禁用

[[email protected] ~]# redis-cli -h db01
db01:6379> keys *
(error) ERR unknown command ‘keys‘

linux系统mysql数据库redis主从复制

原文地址:https://www.cnblogs.com/zabcd/p/13366370.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux系统mysql数据库redis主从复制

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux系统mysql数据库redis主从复制

第一章: 关系型和非关系型1.实质。非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。2.价格。目前基本上大部分主流的非关系型数据库都是免费的。而比较有名气的关系型数据库,比如Orac
linux系统mysql数据库redis主从复制
2018-01-22

数据库实现主从复制

MySQL的主从复制,依赖于二进制日志的拉取和sql线程的转换。确认主备关系后,IO线程负责将主库的二进制日志拉取到备库,由SQL线程将二进制日志回读成具体的操作等。主备搭建主库的配置vi /etc/my.cnf[mysqld] #在这个模块下面,添加如下内
数据库实现主从复制
2016-02-20

linux系统mysql数据库备份及主从基础(1)

一、物理备份Xtrabackup1.安装#上传文件包[[email protected] ~]# rz percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm#下载epel源wget -O /etc/yum.repos.d/e
linux系统mysql数据库备份及主从基础(1)
2015-02-22

如何使用PHP实现Redis数据库主从复制

这篇文章主要介绍“如何使用PHP实现Redis数据库主从复制”,在日常操作中,相信很多人在如何使用PHP实现Redis数据库主从复制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用PHP实现Redis数
2023-07-06

数据库学习之十二:mysql主从复制

十二、mysql主从复制1、主从复制原理1.主从复制的前提:1.1两台mysql实例(多台物理机,或者多实例)1.2主库要开启二进制日志1.3主库要提供复制相关用户,replication slave,一个比较特殊的权限。grant replication s
数据库学习之十二:mysql主从复制
2019-12-13

linux mysql 数据库复制

一、主服务器配置1、配置文件my.cnf的修改[root@localhost mysql]# vim /etc/my.cnf #在[mysqld]中添加:server-id=1log_bin=master-binlog_bin_index=master-bin
linux mysql 数据库复制
2021-10-29

编程热搜

目录