Redis部署,主从复制

参考:https://cloud.tencent.com/developer/article/1706700

高新能参考:https://blog.csdn.net/weixin_39327556/article/details/124786247

一、简介

1.Remote Dictionary Server,字典服务, Redis是一个完全开源的基于Key-Value的NoSQL存储系统,遵守BSD协议,支持网络、可基于内存的可持久化的日志型、Key-Value数据库,并提供多种语言的API.

数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2.Redis基于BSD开源协议,BSD开源协议是可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布

 

二、架构及原理

(一)架构

Redis架构主要有两个程序:

Redis客户端 redis-cli

Redis服务器 redis-server

(二)原理

1.客户端发送命令后,Redis服务器将为这个客户端链接创造一个'输入缓存',将命令放到里面

2.再由Redis服务器进行分配挨个执行,顺序是随机的,这将不会产生并发冲突问题,也就不需要事务了.

3.再将结果返回到客户端的'输出缓存'中,输出缓存先存到'固定缓冲区',如果存满了,就放入'动态缓冲区',客户端再获得信息结果

(三)作用

1.传统数据库在存储数据时,需要先定义schema,以确定类型(字节宽度),并以行存储,所以每行所占的字节宽度是一致的(便于索引数据)。

数据库内部数据分为多个datapage(一般是4kb)存储,随着数据量的增大,数据库查询速度会越来越慢,其主要瓶颈在于磁盘I/O:

由于数据量增大查找datapage的时间也会变长,所以索引出现了。索引是一个B+T,存储在内存中,根据索引记录的信息,可以快速定位到datapage的位置。索引虽然会大大加快查询速度,但是因为增删改需要维护索引的B+T,所以会把增删改的速度拖慢,所以索引不适合频繁写的表。 此外,当数据库高并发查询的情况下,单位时间内所需的数据量也是很大的,此时可能会受到磁盘带宽的影响,影响磁盘的查询速度。

2.在I/O上,内存相比较于磁盘,拥有较好的性能;

磁盘:

寻址时间(ms)级别

 带宽(G/M)

内存:

寻址时间(ns级别,磁盘是其10w倍)

带宽(双通道DDR400的宽带为6.4GBps)

 3.Redis与其他key-value存储有什么不同

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,因RDB和AOF两种磁盘持久化方式是不适合随机访问,所以他们可以是紧凑的以追加的方式生成。

4.缓存:使用 缓存 能够明显加快访问的速度,同时降低数据源的压力

三、安装部署

源码包下载地址:http://download.redis.io/releases/redis-4.0.14.tar.gz

1.安装,配置

 主:redis-master  10.243.217.205

# Redis的编译,只将命令文件编译,将会在当前目录生成bin目录
make && make install  PREFIX=/usr/local/redis
cd ..
mv redis-4.0.14/* /usr/local/redis/

# 创建环境变量
echo 'PATH=$PATH:/usr/local/redis/src/' >> /etc/profile
source /etc/profile

# 此时在任何目录位置都可以是用redis-server等相关命令
[root@redis1 ~]# redis-
redis-benchmark  redis-check-rdb  redis-sentinel   redis-trib.rb    
redis-check-aof  redis-cli        redis-server 

 

Redis可执行文件
redis-server  启动redis服务

redis-cli redis  命令行客户端

redis-benchmark   Redis基准测试工具

redis-check-aof   redis AOF持久化文件检测和修复工具

redis-check-dump   redis RDB持久化文件检测和修复工具

redis-sentinel  启动redis sentinel

修改的配置Redis.conf

# 设置后台启动
# 由于Redis默认是前台启动,不建议使用.可以修改为后台
daemonize yes

# 禁止protected-mode yes/no(保护模式,是否只允许本地访问)
protected-mode

# 设置远程访问
# Redis默认只允许本机访问,把bind修改为bind 0.0.0.0 此设置会变成允许所有远程访问,如果指定限制访问,可设置对应IP。
# bind指定是redis所在服务器网卡的IP,不指定本机网卡IP,可能导致你的Redis实例无法启动
# 如果想限制IP访问,内网的话通过网络接口(网卡限定),让客户端访问固定网卡链接redis
# 如果是公网,通过iptables指定某个IP允许访问
bind 0.0.0.0

# 配置Redis日志记录
# 找到logfile,默认为logfile "",改为自定义日志格式
logfile  /var/log/redis_6379.log

# 把requirepass修改为123456,修改之后重启下服务
requirepass "123456"
# 不重启Redis设置密码
# 在配置文件中配置requirepass的密码(当Redis重启时密码依然生效)

 测试:

远程主机连接

redis-cli -h redis_ip -p redis_port -a password

# 放到后台输出,redis自带日志了,可以输出到黑洞
nohup redis-server /usr/local/redis/redis.conf &> /usr/local/redis/redis.log &

# 关闭命令
redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
# 注意:不建议使用 kill -9,这种方式不但不会做持久化操作,还会造成缓冲区等资源不能优雅关闭。极端情况下造成 AOF 和 复制丢失数据 的情况。
# shutdown 还有一个参数,代表是否在关闭 redis 前,生成 持久化文件,命令为 redis-cli shutdown nosave|save。

# 设置开机自启动
echo "redis-server /usr/local/redis.conf" >> /etc/rc.local

四、Redis主从复制

(一)原理

1.redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。

2.通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。

(二)架构

redis-master  10.243.217.205

[root@redis-master redis]#mkdir  -p /usr/local/redis/backup

[root@redis-master redis]# cat redis.conf 
daemonize yes
pidfile /var/run/redis-16379.pid
logfile /var/log/redis-16379.log
port 16379
bind 0.0.0.0
timeout 300
databases 16
dbfilename dump-16379.db
dir /usr/local/redis/backup
masterauth 123456
requirepass 123456

# 重启服务使服务生效
[root@redis-master redis]# redis-server ./redis.conf 

 

redis-slave  10.247.94.8

[root@redis-slave redis]# mkdir  /usr/local/redis/backup

[root@redis-slave redis]# cat redis.conf 
daemonize yes
pidfile /var/run/redis-26379.pid
logfile /var/log/redis-26379.log
port 26379
bind 0.0.0.0
timeout 300
databases 16
dbfilename dump-26379.db
dir /usr/local/redis/backup
masterauth 123456
requirepass 123456
slaveof 192.168.171.136 16379

# 重启服务使服务生效
[root@redis-master redis]# redis-server ./redis.conf 

 验证:

# 主节点
[root@redis-master redis]# redis-cli -h 127.0.0.1 -p 16379 -a 123456
127.0.0.1:16379> set zhou youmen
OK

# 从节点
[root@redis-slave redis]# redis-cli -h 127.0.0.1 -p 26379 -a 123456
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:26379> get zhou
"youmen"

 

posted @ 2021-09-14 15:00  JASON_yul  阅读(111)  评论(0)    收藏  举报