注:默认使用root权限账户进行安装部署
约定术语:Master表示主节点,Slave表示从节点
(1)redis主从(复制)模式版本要求:2.8及之后版本
(2)服务节点个数要求:至少两个节点(1主1从)
(3)本文档部署信息:使用三台服务器分别部署1个主节点和2个从节点
①自行指定下载位置
mkdir -p /home/tianyu/Downloads
②进入下载目录
cd /home/tianyu/Downloads
③下载redis
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
④解压
tar -xzvf redis-6.0.6.tar.gz
⑤进入解压目录
cd redis-6.0.6/
⑥编译redis源文件
make
⑦安装redis,其中PREFIX代表安装路径(自行指定目录位置)
make install PREFIX=/usr/local/redis
⑧配置redis命令至系统变量
在/etc/profile文件最后一行添加以下内容:
export PATH=$PATH:/usr/local/redis/bin
vim /etc/profile
⑨立即生效该文件,配置后linux终端可直接使用redis-server、redis-cli等redis所有命令
source /etc/profile
注:如果提示bash: “source: command not found…,请检查该文件中新增的变量是否书写有错误
① WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
原因:系统对于特定端口的TCP连接使用backlog队列保存。Redis默认的长度为511,通过tcp-backlog参数设置。如果Redis用于高并发场景为了防止缓慢连接占用,可适当增大这个设置,但必须大于操作系统允许值才能生效。
可以通过netstat -s | grep overflowed命令查看因队列溢出造成的连接拒绝信息
解决:
#添加/修改配置项
net.core.somaxconn = 511
vim /etc/sysctl.conf
#立即生效
sysctl -p
② WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
原因:
overcommit_memory值域:
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存
解决:
#添加/修改配置项
vm.overcommit_memory = 1
vim /etc/sysctl.conf
sysctl -p
③ WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
原因:大页内存动态分配,需要关闭 “让redis 负责内存管理”
解决:
#添加以下内容
echo never > /sys/kernel/mm/transparent_hugepage/enabled
vim /etc/rc.local
#使配置生效
source /etc/rc.local
注:需要重启redis
注:如果要给redis节点设置密码,则各个节点密码都必须一致,否则会报错:Redirected失败
①创建配置文件目录
mkdir /usr/local/redis/conf
②拷贝配置文件
cp /home/tianyu/Downloads/redis-6.0.6/redis.conf /usr/local/redis/conf
③修改配置项bind(IP之间使用空格隔开)
vim /usr/local/redis/conf/redis.conf
#“127.0.0.1”表示主机可通过127.0.0.1和localhost访问本机节点; “192.168.11.10”是当前主机IP,暴露给其它节点通过IP访问
④ 如果需要设置redis访问密码,则添加配置项requirepass XXX
⑤ 配置为后台启动: daemonize yes
⑥ 配置日志输出目录(redis默认没有输出日志)
⑦ 配置日志级别(debug>verbose>notice>warning)
debug:会打印出很多信息,适合用于开发和测试阶段
verbose:会打印出包含很多不太有用的信息(多余)
notice:适用于生产模式(默认)
warning : 警告信息
⑧ 数据文件存储路径
配置项: dir
⑨ 配置项 dbfilename (rdb文件名)
⑩ 配置项 appendfilename (aof文件名)
① 拷贝配置文件
cp /home/tianyu/Downloads/redis-6.0.6/redis.conf /usr/local/redis/conf
②修改配置项bind(IP之间使用空格隔开)
vim /usr/local/redis/conf/redis.conf
③ 添加slaveof参数:绑定master主节点IP和端口
④ 如果master节点设置了密码,则添加参数:masterauth 密码(空格隔开)
⑤ 配置为后台启动: daemonize yes
⑥ 配置日志输出目录
⑦ 配置日志级别
⑧ 数据文件存储路径(RDB文件与AOF文件共享此目录)
配置项: dir
(同Slave1节点,除配置项中暴露的本机IP外其他信息相同)
①启动redis:在master主机命令窗口执行:
redis-server /usr/local/redis/conf/redis.conf
②启动redis:在slave1主机命令窗口执行:
redis-server /usr/local/redis/conf/redis.conf
③启动redis:在slave2主机命令窗口执行:
redis-server /usr/local/redis/conf/redis.conf
#在主节点服务器连接redis客户端(参数 -a 连接密码)
redis-cli -a 123
#连接客户端后,使用 info replication 查看角色配置
#连接slave1从节点
redis-cli -h 192.168.11.11 -p 6379 -a 123
redis-cli -h 192.168.11.12 -p 6379 -a 123