【Redis】安装和配置
安装
- 安装升级gcc版本
yum -y install gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 临时有效,退出 shell 或重启会恢复原 gcc 版本
sudo scl enable devtoolset-9 bash
# 长期有效
sudo echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
- 安装tcl
yum install -y tcl
- 下载最新的6.0.5源码
cd /opt
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
- 解压缩
tar -zxvf redis-6.0.5.tar.gz
- 编译源码
cd /opt/redis-6.0.5/
make
make test
- 安装到指定目录
make install PREFIX=/usr/local/redis
- 查看redis版本
cd /usr/local/redis/bin
./redis-server -v
配置
- 拷贝redis.conf配置文件
cd /usr/local/redis/
mkdir conf log data
cp /opt/redis-6.0.5/redis.conf /usr/local/redis/conf/
- 修改redis.conf配置文件
vim /usr/local/redis/conf/redis.conf
# 注释只能本地访问
#bind 127.0.0.1
# 关闭保护模式
#protected-mode yes
# 开启后台服务运行
daemonize yes
# 指定端口,防止被恶意扫描
port 6479
# 指定日志文件
logfile /usr/local/redis/log/redis.log
# 添加密码
requirepass 123456
# 开启aof
appendonly yes
# 指定aof和rdb的文件路径
dir /usr/local/redis/data/
- 新建redis.service文件
sudo vim /etc/systemd/system/redis.service
- 新增内容如下
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 重载系统服务
systemctl daemon-reload
- 启动redis
systemctl start redis
- 查看redis启动状态
systemctl status redis
- 设置redis开机启动
systemctl enable redis
- 去除redis启动日志中warning
vim /etc/sysctl.conf
net.core.somaxconn = 1024
vm.overcommit_memory = 1
sysctl -p
vim /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
source /etc/rc.local
主从配置
- 修改redis.conf配置文件
vim redis.conf
- 在两个slave节点添加如下配置,配置master节点的ip和端口
replicaof 121.41.200.163 6479
- 在三个节点都添加如下配置,设置访问master节点的密码
masterauth "123456"
要和master节点配置的requirepass的密码相同,不然节点之间无法通信
Sentinel配置
- 拷贝sentinel.conf配置文件
cd /usr/local/redis/
mkdir sentinel
cp /opt/redis-6.0.5/sentinel.conf /usr/local/redis/conf/
- 修改sentinel.conf配置文件
vim /usr/local/redis/conf/sentinel.conf
# sentinel进程占用的端口
port 26379
# 以守护进程方式运行
daemonize yes
# sentinel进程的pid文件
pidfile "/var/run/redis-sentinel.pid"
# sentinel的日志
logfile "/usr/local/redis/log/sentinel.log"
# sentinel的数据目录
dir "/usr/local/redis/sentinel"
# sentinel监控的集群名称和master节点
sentinel monitor mymaster 121.41.200.163 6479 2
# 集群之间通信的密码(注意这个配置要放在上面那个配置后面,不然会出现启动sentinel的时候汇报:No such master with specified name异常)
sentinel auth-pass mymaster SuccessHR@2021
# 关闭保护模式
protected-mode no
# 配置sentinel集群之间通信的ip
sentinel announce-ip "121.41.200.163"
- 启动sentinel
cd /usr/local/redis/bin
./redis-sentinel ../conf/sentinel.conf
常见问题
阿里云ECS安装sentinel集群
问题描述
在ECS上安装sentinel集群,sentinel获取的master节点的IP是内网地址,导致客户端连接失败
解决方法
- 保证三个节点的外网IP和端口(6479和26379)都能访问,需要在安全组里面添加对应的白名单
- 两个slave节点的redis.conf配置文件添加如下配置:
replicaof master节点外网ip 6479
- 三个节点的sentinel.conf配置文件添加如下配置:
sentinel monitor mymaster master节点外网ip 6479 2
sentinel auth-pass mymaster 访问master节点的密码
sentinel announce-ip 服务器外网ip
Redis集群生产环境建议部署在内网,应用服务器使用内网连接,提高查询效率
评论区