首页 >> 大全

hydd的Linux笔记Day65

2023-09-01 大全 30 作者:考证青年

Day65 主从复制 主从复制概述 主从复制结构模式

一主一从、一主多从、主从从

主从复制工作原理

工作原理:

1. slave向master发送sync命令
2. master启动后台存盘进程,并收集修改数据命令
3. master完成后台存盘后,传送整个数据文件到slave
4. slave接收数据文件,加载到内存中完成首次完全同步
5. 后续有新数据产生时,master继续收集数据修改命令依次传给salve,完成同步

配置主从复制 拓扑结构

配置从库

redis服务运行后,默认都是服务器

[root@redisA ~]# redis-cli -h 192.168.4.51 –p 6351 
192.168.4.51:6351> info replication        //查看复制信息
# Replication
role:master            //是master 服务器  
connected_slaves:0    //从服务器个数零台
master_replid:eaa14478158a71c41f947eaea036658c2087e8f2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.4.51:6351>

将主机192.168.4.52配置为192.168.4.51的从服务器

1)命令行配置(马上生效)

[root@redisB ~]# redis-cli -h 192.168.4.52 –p 6352
192.168.4.52:6352> slaveof  192.168.4.51  6351  //指定主服务器ip地址与端口
OK
192.168.4.52:6352> info replication   //查看复制信息
# Replication
role:slave  //从服务器
master_host:192.168.4.51        //主服务器ip地址
master_port:6351 //主服务器端口
master_link_status:up //连接状态开启
master_last_io_seconds_ago:3
master_sync_in_progress:0

2)永久配置(重新redis服务后,依然有效)

[root@redisB ~]# vim /etc/redis/6379.conf    
slaveof  192.168.4.51  6351    //在文件末尾添加或在原有配置项上修改都可以

3)在主服务器查看复制信息

[root@redisA ~]# redis-cli -h 192.168.4.51 –p 6351
192.168.4.51:6351> info replication  //查看复制信息
# Replication
role:master
connected_slaves:1 //从服务器个数 1台
slave0:ip=192.168.4.52,port=6352,state=online,offset=14,lag=1    //从服务器信息
master_replid:db7932eb0ea4302bddbebd395efa174fb079319f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
192.168.4.51:6351>

测试配置

1)客户端连接主服务器存储数据

[root@client50 ~]# redis-cli -h 192.168.4.51 –p 6351   
192.168.4.51:6351> set x  9
OK
192.168.4.51:6351> set y  8
OK
192.168.4.51:6351> set z  7
OK

2)在从服务器本机登录,查看数据(与主服务器数据一致)

[root@redisB ~]#     redis-cli -h 192.168.4.52 –p 6352
192.168.4.52:6352> keys  *
1)“x”
2)“y”
3)“z”

配置带验证的主从复制

设置主服务器192.168.4.51 设置连接密码

1) 修改主服务器的配置文件,设置密码。

[root@redisA ~]# vim +501 /etc/redis/6379.conf 
requirepass  123456   //设置密码
:wq
[root@redisA ~]# vim +43  /etc/init.d/redis_6379  //修改脚本
$CLIEXEC -h 192.168.4.51 -p 6351 -a 123456  shutdown //添加密码
:wq
[root@redisA ~]# /etc/init.d/redis_6379 stop //停止服务
[root@redisA ~]# /etc/init.d/redis_6379  start //启动服务
Starting Redis server...
[root@redisA ~]# 
[root@redisA ~]# netstat -utnlp  | grep  :6351  //查看端口
tcp        0      0 192.168.4.51:6351       0.0.0.0:*               LISTEN      11523/redis-server

配置从服务器192.168.4.52

1) 修改配置文件,设置主服务器连接密码。

[root@redisB ~]# /etc/init.d/redis_6379 stop //停止服务
[root@redisB ~]# vim +289 /etc/redis/6379.conf 
masterauth  123456   //设置密码
:wq
[root@redisA ~]# /etc/init.d/redis_6379  start //启动服务
Starting Redis server...
[root@redisA ~]# 
[root@redisA ~]# netstat -utnlp  | grep  :6351  //查看端口
tcp        0      0 192.168.4.51:6351       0.0.0.0:*               LISTEN      11523/redis-server

2) 在从服务器本机连接服务,查看复制信息

[root@redisB ~]# redis-cli -h 192.168.4.52 –p 6352  192.168.4.52:6352> info replication   //查看复制信息
# Replication
role:slave  //从服务器
master_host:192.168.4.51        //主服务器ip地址
master_port:6351 //主服务器端口
master_link_status:up //连接状态开启
master_last_io_seconds_ago:3
master_sync_in_progress:0
……
……
192.168.4.52:6352>

哨兵服务

简介:

​ 作用:监视服务器,当发现宕机,将从服务器升级为主服务器。

​ 主配置文件:.conf

​ 模板文件:redis-4.0.8/.conf

配置哨兵服务流程

1. 安装redis软件
2. 创建主配置文件
3. 启动哨兵服务

拓扑环境

1) 安装源码软件redis ,无需做初始化配置。

[root@redis57 redis]# yum -y install gcc 
[root@redis57 redis]# tar -zxf redis-4.0.8.tar.gz
[root@redis57 redis]# cd redis-4.0.8/
[root@redis1 redis-4.0.8]# make
[root@redis1 redis-4.0.8]# make install

2)编辑主配置文件

[root@redis57 redis]# vim  /etc/sentinel.conf  //创建主配置文件
sentinel   monitor   server51   192.168.4.51   6351   1 //监视主服务器
bind  0.0.0.0    //哨兵服务地址(表示本机所有网络接口)
sentinel auth-pass  server51   123456   //主服务器密码

3)启动哨兵服务

[root@redis57 redis]# redis-sentinel /etc/sentinel.conf    //启动哨兵服务
25371:X 28 Sep 11:16:54.993 # +sdown master redis51 192.168.4.51 6351
25371:X 28 Sep 11:16:54.993 # +odown master redis51 192.168.4.51 6351 #quorum 1/1
25371:X 28 Sep 11:16:54.993 # +new-epoch 3
25371:X 28 Sep 11:16:54.993 # +try-failover master redis51 192.168.4.51 6351
25371:X 28 Sep 11:16:54.994 # +vote-for-leader be035801d4d48eb63d8420a72796f52fc5cec047 3
...
25371:X 28 Sep 11:16:55.287 * +slave slave 192.168.4.51:6351 192.168.4.51 6351 @ redis51 192.168.4.52 6351
25371:X 28 Sep 11:17:25.316 # +sdown slave 192.168.4.51:6379 192.168.4.51 6379 @ redis51 192.168.4.52 6352

测试配置

1)停止主服务器51的redis服务

[root@redisA ~]#     /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@redisA ~]#

2)在服务器52主机,查看复制信息

 [root@redisB ~]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> info replication
# Replication
role:master  //角色是master
connected_slaves:0
……
……

持久化 RDB

RDB简介

Redis数据库文件

​ 是数据库持久化方式之一

​ 是持久化默认方式

​ 按照指定时间间隔,将内存中的数据集快照写入硬盘

​ 在指定时间间隔内,将内存中的数据集快照写入硬盘

​ 术语叫快照

​ 恢复时,将快照文件直接读到内存里

相关配置参数

​ 文件名

​ “dump.rdb” 文件名

​ 数据从内存保存到硬盘的频率

​ save 900 1 900秒内且有1个key改变

​ save 300 10 300秒内且有10个key改变

​ save 60 10000 60秒内且有10000个key改变

[root@redisA ~]# vim /etc/redis/6379.conf
dbfilename dump.rdb
save 900 1        
#save 300 10 //注释原有设置
save 120 10 //时间修改为 120秒
save 60 10000
:wq
[root@redisA ~]#     /etc/init.d/redis_6379 stop  //停止服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@redisA ~]#
[root@redisA ~]# rm –rf  /var/lib/redis/6379/* //清空数据库目录
[root@redisA ~]# /etc/init.d/redis_6379 start //启动服务
Starting Redis server...
[root@redisA ~]#
[root@redisA ~]# ls /var/lib/redis/6379  //此时,查看数据库目录下没有dump.rdb文件
[root@redisA ~]# 
[root@redisA ~]# redis-cli -h 192.168.4.51  -p 6351  -a 123456  //连接服务,在200秒内存储10个变量,就会自动在数据库目录下创建dump.rdb 文件
192.168.4.51:6351> set v1 k1
OK
192.168.4.51:6351> set v2 k1
OK
192.168.4.51:6351> set v3 k1
OK
192.168.4.51:6351> set v4 k1
OK
192.168.4.51:6351> set v45 k1
OK
192.168.4.51:6351> set v46 k1
OK
192.168.4.51:6351> set v7 k1
OK
192.168.4.51:6351> set v8 k1
OK
192.168.4.51:6351> set v9 k1
OK
192.168.4.51:6351> set v10 k1
OK
192.168.4.51:6351> keys *1) "v2"2) "v9"3) "v10"4) "v45"5) "v4"6) "v1"7) "v46"8) "v8"9) "v7"
10) "v3"
192.168.4.51:6351>exit
[root@redisA ~]# ls /var/lib/redis/6379  //此时,查看数据库目录下有dump.rdb文件
dump.rdb
[root@redisA ~]#

备份数据

[root@redisA ~]# cd /var/lib/redis/6379/
[root@redisA 6379]# ls
dump.rdb  
[root@redisA 6379]# cp dump.rdb  /tmp/dump.rdb    //备份dump.rdb文件
[root@redisA 6379]# scp  /tmp/dump.rdb  root@192.168.4.56:/root/ //传递备份文件给目标主机

删除数据 (56主机模拟误删除数据)

[root@redis56 ~]# redis-cli -h 192.168.4.56 –p 6356        //连接服务
192.168.4.56:6356> flushall
OK
192.168.4.51:6379> keys *        //已经没有数据
(empty list or set)
192.168.4.56:6356> exit

恢复数据(56主机使用备份文件恢复数据)

[root@redis56 ~]# /etc/init.d/redis_6379 stop  //停止服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@redis56 ~]# 
[root@redis56 ~]# rm  -rf  /var/lib/redis/6379/*  //清空数据库目录
[root@redis56 ~]# cp  /tmp/dump.rdb   /var/lib/redis/6379/ //拷贝备份文件到数据库目录下
[root@redis56 ~]# /etc/init.d/redis_6379  start  //    启动服务
Starting Redis server...
[root@redis56 ~]# redis-cli -h 192.168.4.56 –p 6356 //访问服务
192.168.4.56:6356> keys *  //查看数据1) "v7"2) "v46"3) "v45"4) "v8"5) "v4"6) "v2"7) "v1"8) "v3"9) "v9"
10) "v10"
192.168.4.56:6356>

RDB优点与缺点

优点:

​ 高性能的持久化实现——创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中对数据完整性要求不是非常高。

​ 比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合。

缺点:

​ 意外宕机时,丢失最后一次持久化的所有数据。

AOF AOF介绍

​ 追加方式记录写操作的文件,记录redis服务所有写操作,追加到文件末尾,默认没有启用,使用cat命令可以查看文件内容。

启用AOF

>config set appendonly yes
>config rewrite

使用AOF文件恢复数据

1)修改配置文件

[root@redisA ~]# redis-cli -h 192.168.4.51 –p 6351 -a 123456 //连接服务
192.168.4.51:6351>config  set   appendonly yes     //启用aof,默认no
192.168.4.51:6351> config  rewrite //写进配置文件
192.168.4.51:6351> save
192.168.4.51:6351> exit
[root@redisA ~]# ls  /var/lib/redis/6379/   //会出现appendonly.aof文件
appendonly.aof  dump.rdb  

2)备份AOF文件

[root@redisA ~]# cd /var/lib/redis/6379/
[root@redisA 6379]# cp appendonly.aof /tmp/appendonly.aof
[root@redisA 6379]# scp /tmp/appendonly.aof  root@192.168.4.57:/root/  //传递备份文件给目标主机

3)删除数据(在57主机 默认数据误删除)

[root@redis57 ~]# redis-cli -h 192.168.4.57 -p 6357  //连接服务
192.168.4.57:6357> flushall  //清除数据
OK
192.168.4.57:6357> keys * //查看数据
(empty list or set)
192.168.4.57:6357> exit

使用AOF文件恢复数据

[root@redis57 ~]# vim +673 /etc/redis/6379.conf
appendonly  yes  //启用AOF
:wq
[root@redis57 ~]#
[root@redis57 ~]# /etc/init.d/redis_6379 stop  //停止服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@redis57 ~]# 
[root@redis57 ~]#  /etc/init.d/redis_6379  start //启动服务
Starting Redis server...
[root@redis57 ~]# 
[root@redis57 ~]# rm  -rf  /var/lib/redis/6379/* //删除没有数据的文件
[root@redis57 ~]# cp  /root/appendolny.aof /var/lib/redis/6379/  //拷贝文件
[root@redis57 ~]# /etc/init.d/redis_6379  start  //启动服务
Starting Redis server...
[root@redis57 ~]# redis-cli -h 192.168.4.57 -p 6357 //连接服务
192.168.4.57:6357> keys *  //查看数据1) "v9"2) "v5"3) "v8"4) "v2"5) "v1"6) "v4"7) "v10"8) "v6"9) "v7"
10) "v3"
192.168.4.57:6357>

优化配置

定义文件名

appendonly yes				//启用aof
appendfilename ”文件名“		//指定文件名

AOF文件记录写操作的方式

appendfsync always		//时时记录,并完成磁盘同步
appendfsync everysec	//每秒记录一次,并完成磁盘同步
appendfsync no			//写入aof,不执行磁盘同步

日志重写

auto-aof-rewrite-min-size 64mb	//首次重写触发值
auto-aof-rewrite-percentage 100	//再次重写,增长百分比

修复AOF文件

​ 把文件恢复到最后一次操作

redis-check-aof --fix appendonly.aof

AOF优点与缺点

AOF优点

​ 可以灵活设置持久化方式

​ 出现意外宕机时,仅可能丢失1秒数据

AOF缺点

​ 持久化文件的体积通常会大于RDB方式

​ 执行fsync策略时速度可能回避RDB方式慢

数据类型 字符串 字符串操作

set key value [ex ] [px ] [nx|xx]

​ ——设置key及值,过期时间可以使用秒或者毫秒

key value

​ ——从偏移量开始复写key的特定位的值

key,统计字串长度

key value

​ ——存在则追加,不存在则创建key及value,返回key长度

key value

​ ——对key所存储字串,设置或清除特定偏移量上的位

​ ——value值可以为1或0,为0232之间

​ ——key不存在,则创建新的key

key

​ ——统计字串中被设置为1的比特位数量

decr key

​ 将key中的值减少1,key不存在则先初始化

key

​ 将key中的值减去

get key

​ 返回key存储字符串值,若key不存在则返回null

​ 若key的值不是字串,则返回错误,get只能处理字串

key start end

​ 返回字串值中的字串,截取范围为start和end

​ 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符

incr key

​ 将key的值加1,如果key不存在,则初始为0后再加1

​ 主要应用为计数器

incr key

​ 将key的值加1,如果key不存在,则初始为0后再加1

​ 主要应用为计数器

key

​ 将key的值增加

mget key [key]

​ 获取一个或多个key的值,空格分隔,具有原子性

mset key value [key value ……]

​ 设置多个key和值,空格分隔,具有原子性

List列表 简介

list是个字符队列,先进后出,一个key可以有多个值

List列表操作

lpush key value [value……]

​ 将一个或多个值value插入到列表key的表头

​ key不存在,则创建key

key start stop

​ 从开始位置读取key的值到stop结束

lpop key

​ 移除并返回列表头元素数据,key不存在则返回nil

llen key

​ 返回列表key的长度

key index

​ 返回列表中第index个值

lset key index value

​ 将key中的index位置的值修改为value

rpush key value [value……]

​ 将value插入到key的末尾

rpop key

​ 删除并返回key末尾的值

Hash表 Hash简介

​ Redis hash是一个类型的field和value的映射表

​ 一个key能对应多个field,一个field对应一个value

​ 将一个对象存储为hash类型,较于每个字段都存储成类型更能节省内存

Hash表操作

hset key field value

​ 将hash表中field值设置为value

hget key filed

​ 获取hash表filed的值

hmset key field value [field value……]

​ 同时给hash表中的多个field赋值

hmget key field [field ……]

​ 返回hash表的多个field的值

hkeys key

​ 返回hash表中所有的field名称

key

​ 返回hash表中所有field和value

hvals key

​ 返回hash 表中的所有field的值

hdel key field [field]

​ 删除hash表中多个列的值,不存在则忽略。

​ 返回列表中第index个值

lset key index value

​ 将key中的index位置的值修改为value

rpush key value [value……]

​ 将value插入到key的末尾

rpop key

​ 删除并返回key末尾的值

Hash表 Hash简介

​ Redis hash是一个类型的field和value的映射表

​ 一个key能对应多个field,一个field对应一个value

​ 将一个对象存储为hash类型,较于每个字段都存储成类型更能节省内存

Hash表操作

hset key field value

​ 将hash表中field值设置为value

hget key filed

​ 获取hash表filed的值

hmset key field value [field value……]

​ 同时给hash表中的多个field赋值

hmget key field [field ……]

​ 返回hash表的多个field的值

hkeys key

​ 返回hash表中所有的field名称

key

​ 返回hash表中所有field和value

hvals key

​ 返回hash 表中的所有field的值

hdel key field [field]

​ 删除hash表中多个列的值,不存在则忽略。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了