1 前言
redis集群常见的部署方式有:
- 采用主从复制 + sentinel(哨兵)监控的方式;
- 采用redis-cluster集群(去中心化分片集群)的方式
本文以笔者内部项目为例,采用主从复制+哨兵的方式部署。
2 版本说明
- 三台服务器(一主两从):192.168.1.60 为主服务器,192.168.1.59 和192.168.1.58 为从服务器
- 操作系统:CentOS Linux release 7.4.1708 (Core)
- JDK版本:jdk 1.8.0_171
- REDIS版本:redis 4.0.10
3 配置主服务器 192.168.1.60
- 创建安装文件夹,把下载的redis版本放到文件夹中
mkdir -p /data/software
- redis源码获取
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
- 若提示找不到wget命令,需先安装wget工具
yum -y install wget
- 解压,并切换到redis根目录下
tar -zvxf redis-4.0.10.tar.gz cd ./redis4.0.10
- 编译和安装redis
make && make install
- 创建redis存储数据文件的文件夹redis-data
mkdir /data/software/redis 4.0.10/redis-data
- 创建统一存储Log日志的文件夹LOG
mkdir /data/log/redis
- 修改redis配置文件,修改的内容如下所示
vim ./redis.conf
--- 将redis设置为守护进程的方式运行,启用后redis会在/var/run文件夹下生成记录pid的文件:”daemonize yes”
--- 保护模式默认开启,当未绑定ip或设置密码时,无法进行非本地连接,可关闭保护模式(因下面已绑定ip及设置密码,这一步配置可忽略,否则加上):”protected-mode no”
--- 将绑定ip修改为本机ip:即”bind 192.168.1.60“
--- 指定记录日志路径:logfile "/data/log/redis/redis.log"
--- 指定redis工作路径,redis的数据保存到磁盘将在此路径下(文件名默认为dump.rdb): “dir ‘/data/………/redis-data’ “
--- 添加客户端连接redis服务时的访问密码(*号代表自己设置的密码): “requirepass *** ”
--- 配置从服务器访问主服务器密码: “masterauth *** ”
常规配置按以上配置即可,需进一步配置redis其他参数,如快照或AOF等,可参考redis.conf详细配置说明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html
- 启动redis服务
./src/redis-server ./redis.conf
- 启动服务后,可能出现下列WARNING信息:
① overcommit_memory的警告信息(下图所示),表示overcommit_memory当前设置为0,当系统内存不足时,内存申请可能会不成功。这可能会导致可用内存低时,redis无法保存日志等问题。
解决办法:截图的警告已给出解决办法,分别执行以下三个指令,将overcommit_memory设置为1后重新执行文件:
echo "vm.overcommit_memory=1" > /etc/sysctl.conf reboot echo 1 > /proc/sys/vm/overcommit_memory
② 警告内核参数默认128,这对于负载很大的服务是不够的。
解决方法,执行以下指令:
echo 511 > /proc/sys/net/core/somaxconn
4 配置从服务器192.168.1.59 和 192.168.1.58
redis安装步骤与主服务器操作相同,只是修改配置文件时略有不同:
- 修改redis配置文件
vim ./redis.conf
--- 将redis设置为守护进程的方式运行:”daemonize yes”
--- 将绑定ip修改为本机ip:”bind 192.168.1.59 “
--- 配置跟随主服务器: “slaveof 192.168.1.60 6379”
--- 指定记录日志路径:logfile "/data/log/redis/redis.log"
--- 指定redis工作路径: “dir ‘/data/………/redis-data’ “
--- 添加客户端连接redis服务时的访问密码: “requirepass *** ”
--- 配置从服务器访问主服务器密码: “masterauth *** ”
5 redis主从测试
- redis客户端连接主服务器,添加键值对
./src/redis-cli -h 192.168.1.60 -p 6379 -a *** -> set name testredis -> get name
- redis客户端连接其中一台从服务器,获取键值对的值
./src/redis-cli -h 192.168.1.58 -p 6379 -a [email protected] -> get name
在主服务器上写入键值对后,从服务器能够读取,证明配置正常。
6 配置哨兵,每台服务器配置1个哨兵,在三台服务器均进行相同配置
- 切换到redis根目录下,配置哨兵
cd ./redis4.0.10 vim ./sentinel.conf
--- 哨兵监控主节点的ip & port:sentinel monitor mymaster 192.168.1.60 6379 2
--- 将redis设置为守护进程的方式运行:”daemonize yes”
--- 关闭保护模式:”protected-mode no”
--- 哨兵工作目录为redis根目录:”dir ‘/data/software/redis4.0.10’ “
--- 指定记录日志路径:logfile "/data/log/redis/sentinel.log"
--- 配置主节点多少毫秒无响应后被视为主观下线(sdown):”sentinel down-after-milliseconds mymaster 10000”
--- 配置主服务客观下线时,进行故障转移的时效,在这个时间段内如果转移没完成,则本次转移失效:”sentinel failover-timeout mymaster 30000”
--- 配置哨兵sentinel连接主从的密码:”sentinel auth-pass mymaster *** ”
注意点:哨兵配置文件中,若没有配置连接服务器的密码,启动后无法正常监控服务器。
- 三台服务器均启动哨兵
./src/redis-sentinel ./sentinel.conf
- 哨兵运行情况测试
进入主服务器192.168.1.60,杀死redis-server进程:
ps -ef|grep redis-server kill 主服务进程号
查看sentinel.log 日志,日志记录主服务主观停止(sdown),哨兵进行投票(vote)后判断主服务器客观停止(odown),继续查看日志,哨兵将主服务切换(switch)到其他从服务器,证明哨兵配置生效。
7 配置redis服务和哨兵 开启自启动
- 编辑rc.local
注:rc.local文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该文件。
vim /etc/rc.d/rc.local 在rc.local文件末尾加入命令: # start the redis-server 启动服务 /data/software/redis4.0.10/src/redis-server "data/software/redis4.0.10/redis.conf" # start the redis-sentinel 启动哨兵 /data/software/redis4.0.10/src/redis-sentinel "data/software/redis4.0.10/sentinel.conf"
- 为rc.local增加可执行权限
chmod +x /etc/rc.d/rc.local
- 重启系统,查看服务是否自动开启
ps -ef|grep redis
若看到redis-server和redis-sentinel进程,则配置生效。
原文地址:https://www.cnblogs.com/cheerjude/p/10077505.html