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"
浙公网安备 33010602011771号