redis 单机部署、集群部署(主从同步+哨兵)
环境准备
- 3台已安装 jdk 的 centos 7.5 服务器
- redis-6.2.2.tar.gz
服务器IP
服务器 | IP | 角色 |
---|---|---|
redis-140 | 192.168.86.140 | master |
redis-141 | 192.168.86.141 | slave |
redis-142 | 192.168.86.142 | slave |
单机模式部署
-
linux 安装 gcc : 用于编译 redis
yum install gcc
-
上传安装包到服务器的 /opt 目录
-
解压安装包,此时 redis 没有编译
cd /opt tar -zxvf redis-6.2.2.tar.gz
-
编译并测试
cd /opt/redis-6.2.2 make #可能出现问题见常见问题,不执行 make test 也可以 make test
-
安装到指定目录
make PREFIX=/usr/local/redis install
-
增加一些目录和拷贝 redis.conf 到安装目录
#配置文件存放路径 mkdir /usr/local/redis/conf #数据存放目录 mkdir /usr/local/redis/data #日志存放目录 mkdir /usr/local/redis/logs #拷贝 配置文件到安装目录 cp /opt/redis-6.2.2/redis.conf /usr/local/redis/conf/redis.conf
-
修改安装目录下的配置文件,修改指定的内容即可,
vi /usr/local/redis/conf/redis.conf
#用于指定本机网卡对应的IP地址,如果是默认 127.0.0.1 的话,则只有本机可以访问。如果注释掉则表示客户端可以通过本机所有网卡进来,如果这样设置,且没有设置 requirepass 密码, redis 默认开始了保护模式 protected-mode,则其它客户端都可以连接,但是一发送命令就会失败 bind 192.168.86.140 #数据存放目录 dir /usr/local/redis/data #是否后台运行 daemonize yes #日志文件 logfile "/usr/local/redis/logs/redis.log" #设置客户端连接后进行任何其他操作前需要使用的密码 requirepass pass
-
启动 redis-server
cd /usr/local/redis/bin ./redis-server ../conf/redis.conf
-
检查
ps -ef | grep redis ./redis-cli -h 192.168.86.140 -p 6379
集群模式搭建(主从同步+哨兵模式)
-
若无特殊说明,以下操作均需在三台 redis 服务器上操作
-
按照单机模式部署的方式执行操作,一直执行到第七步修改配置文件为止
-
主从同步配置 > 修改 master 配置,修改指定的内容即可,
vi /usr/local/redis/conf/redis.conf
# 用于指定本机网卡对应的IP地址 bind 192.168.86.140 #数据存放目录 dir /usr/local/redis/data #是否后台运行 daemonize yes #日志文件 logfile "/usr/local/redis/logs/redis.log" #设置客户端连接后进行任何其他操作前需要使用的密码 requirepass pass #当master服务设置了密码保护时(用requirepass制定的密码),slave服务连接master的密码 masterauth pass
-
主从同步配置 > 修改两台 slave 配置,修改指定的内容即可,
vi /usr/local/redis/conf/redis.conf
# 用于指定本机网卡对应的IP地址 每台机器设置为自己的IP bind 192.168.86.141 #数据存放目录 dir /usr/local/redis/data #日志文件 logfile "/usr/local/redis/logs/redis.log" #是否后台运行 daemonize yes #指定要同步的主机的 ip,端口 replicaof 192.168.86.140 #设置客户端连接后进行任何其他操作前需要使用的密码 requirepass pass #当master服务设置了密码保护时(用requirepass制定的密码),slave服务连接master的密码 masterauth pass
-
启动三台机器的 redis-server
cd /usr/local/redis/bin ./redis-server ../conf/redis.conf
-
检查 redis 服务是否启动成功
ps -ef | grep redis ./redis-cli -h <服务器IP> -p 6379
-
检查主从同步是否配置成功,分别登录三台 redis ,并输入 info replication
-
master-140
-
slave-141
-
slave-142
-
-
主从同步完毕之后进行 哨兵模式 配置,可以大概将 redis-sentinel 理解为 zookeeper,是用来监控机器的运行情况的,在 master 宕机之后,先从 哨兵集群中选举一个哨兵作为故障转移处理的机器,之后被选举出来的哨兵用来协调各个 slave 的进行选举 master
-
在每台机器上设置一个哨兵,配置文件完全一样,当然可以使用另外的机器来部署 哨兵
-
拷贝并修改哨兵配置
cd /opt/redis-6.2.2 cp sentinel.conf /usr/local/redis/conf vi sentinel.conf
-
修改 sentinel.conf ,只修改下面列出的项目
#设置为后台运行 daemonize yes #日志存放目录 logfile /usr/local/redis/logs/sentinel.log #数据存放目录 dir /usr/local/redis/data/ #监控名为 mymaster 的主节点,仲裁参数为 2,一般是哨兵个数的一半+1(类似于zookeeper的过半写成功机制) sentinel monitor mymaster 192.168.86.140 6379 2 #主机多长时间连接不上,哨兵就判定他挂了,单位毫秒 sentinel down-after-milliseconds mymaster 30000 #主机如果设置了 requirepass sentinel auth-pass mymaster pass
-
启动哨兵
cd /usr/local/redis/bin ./redis-sentinel ../conf/sentinel.conf
-
查看哨兵是否启动成功
#查看进程 ps -ef | grep redis #查看日志 tail -f /usr/local/redis/logs/sentinel.log
-
测试集群是否搭建成功
-
关闭或 kill 掉 master 上的 redis 服务,等待30秒,因为我们配置 30秒连接不上就认为他挂了
-
查看 sentinel 日志
-
在另外两台 slave 上执行 **info replication **
-
-
重新启动原来的主机,此时重启之后它将会变为新主机的从机
常见问题
-
执行 make 时,出现 "fatal error: jemalloc/jemalloc.h: No such file or directory"
执行=> make distclean && make
-
执行 make test 时,出现 "You need tcl 8.5 or newer in order to run the Redis test"
执行=> yum install tcl
-
执行 ./redis-cli -p 6379 出现 connection refused
使用 ./redis-cli -h <服务器IP> -p 6379 访问
-
主从复制的时候,master 正常写入但是 salve 读取不到
- 检查一下 master 的 bind 设置,关于 bind 的正常理解: Redis的bind的误区
- 检查一下 slave 的 masterauth 是否正确
- 服务器的端口是否开通,防火墙是否拦截了
-
主机宕机,但是 sentinel 集群没有重新进行选主
- 如果使用 scp 命令拷贝的话,需要在 sentinel 从没运行过的时候拷贝,或者进入配置文件,在末尾删除程序运行自动生成的一些参数
本文来自博客园,作者:君子如珩~,转载请注明原文链接:https://www.cnblogs.com/shulipeng/p/14850585.html