赞
踩
本篇介绍的搭建方式,是1主2从3哨兵,共6个节点。这6个节点都在同一台机器,所以是伪集群。生产环境,为了达到真正高可用,6个节点要部署到不同机器上。
下面开始搭建,先从整体看一下要做哪些工作
先下载redis单机版安装包,单机版redis下载。本篇文章的redis版本,是5.0.9。
进入/opt/目录,建立redis_sentinel目录,将下载好的tar.gz包上传到该目录。
使用如下解压命令解压tag.gz压缩包:
tar -zxvf redis-5.0.9.tar.gz
进入/opt/redis_sentinel/redis-5.0.9/src目录,看我之前的一篇文章编译安装单机redis
单机版redis编译安装
假如我们安装redis的PREFIX是/opt/redis-5.0.9,此时redis会被安装到/opt/redis-5.0.9目录中
进入/opt/redis_sentinel目录。
将我们解压编译好的redis-5.0.9在当前目录复制三份,分别重命名为6081、6082、6083
#复制并重命名操作。
cp -r redis-5.0.9 6081
cp -r redis-5.0.9 6082
cp -r redis-5.0.9 6083
我们将6081作为master。将6081现有redis.conf配置文件清空
//清空命令
cat /dev/null > redis.conf
然后复制下面的内容到6081的redis.conf配置文件中(注意更换一下主机地址,就是xx.xx.xx.xx处)
#任意ip都可以连接 bind 0.0.0.0 #关闭保护,允许非本地连接 protected-mode no #端口号 port 6081 #后台运行 daemonize yes #进程守护文件,就是存放该进程号相关信息的地方 pidfile "/var/run/redis_6081.pid" #redis数据目录。redis-db目录需要手动建立 dir "/opt/redis_sentinel/6081/redis-db" #redis日志目录。redis-log目录、redis.log文件都需要自己手动创建 logfile "/opt/redis_sentinel/6081/redis-log/redis.log" #开启日志形式 appendonly yes
主机配置修改完成。
接下来,分别修改两台从机的配置。
修改6082从机配置(注意更换一下主机地址,就是xx.xx.xx.xx处)
#任意ip都可以连接 bind 0.0.0.0 #关闭保护,允许非本地连接 protected-mode no #端口号 port 6082 #后台运行 daemonize yes #进程守护文件,就是存放该进程号相关信息的地方 pidfile "/var/run/redis_6082.pid" #db等相关目录位置 dir "/opt/redis_sentinel/6082/redis-db" #开启日志形式 appendonly yes logfile "/opt/redis_sentinel/6082/redis-log/redis.log" #主信息 # 指定主机ip地址,将xx.xx.xx.xx替换为主机ip。如果想从本地访问机器,需要填机器的公网ip replicaof xx.xx.xx.xx 6081
修改6083从机配置(注意更换一下主机地址,就是xx.xx.xx.xx处)
#任意ip都可以连接 bind 0.0.0.0 #关闭保护,允许非本地连接 protected-mode no #端口号 port 6083 #后台运行 daemonize yes #进程守护文件,就是存放该进程号相关信息的地方 pidfile "/var/run/redis_6083.pid" #db等相关目录位置 dir "/opt/redis_sentinel/6083/redis-db" #开启日志形式 appendonly yes logfile "/opt/redis_sentinel/6083/redis-log/redis.log" # 指定主机ip地址,将xx.xx.xx.xx替换为主机ip。如果想从本地访问机器,需要填机器的公网ip replicaof xx.xx.xx.xx 6081
以上就配置好了redis主从,执行如下三条命令,分别启动1台主机,2台从机。
#启动6081主机
/opt/redis_sentinel/6081/bin/redis-server /opt/redis_sentinel/6081/redis.conf
#启动6082从机
/opt/redis_sentinel/6082/bin/redis-server /opt/redis_sentinel/6082/redis.conf
#启动6083从机
/opt/redis_sentinel/6083/bin/redis-server /opt/redis_sentinel/6083/redis.conf
然后登录6081主机。查看主从搭建是否成功。
出现以下信息,就代表主从搭建已经成功。6081是主节点,主节点有2个从节点
但是如果主机挂掉了,此时的架构,主从是无法自动完成主从切换的,所以我们需要上哨兵集群来监视主从并完成自动切换
进入/opt/redis_sentinel目录。建立sentinel_cluster目录,同样执行复制并重命名操作,搞出3个哨兵节点
#复制并重命名操作
cp -r redis-5.0.9 ./sentinel_cluster/26001
cp -r redis-5.0.9 ./sentinel_cluster/26002
cp -r redis-5.0.9 ./sentinel_cluster/26003
先修改26001哨兵的配置,拷贝一份sentinel.conf到26001目录,然后打开sentinel.conf文件,清空原有配置,增加如下配置(注意更换一下主机地址,就是xx.xx.xx.xx处)
bind 0.0.0.0 #关闭保护模式 protected-mode no #端口号 port 26001 #后台运行 daemonize yes #哨兵数据目录,sentinel-db目录需要手工创建 dir "/opt/redis_sentinel/sentinel_cluster/26001/sentinel-db" #哨兵日志文件,sentinel-db目录、sentinel.log文件需要手工创建 logfile "/opt/redis_sentinel/sentinel_cluster/26001/sentinel-log/sentinel.log" #sentinel节点的唯一标识,哨兵之间判断主机状态以及哨兵选主都会用上这个标识 sentinel myid e42e7bf1b00bd966376a225f95c583026abe3e12 #当设置为 "yes" 时,Sentinel 会阻止在 Redis 服务器中运行 CONFIG REWRITE 命令重写 Redis 服务器的配置文件,以确保 Redis 的配置始终由 Sentinel 负责管理,防止手动修改配置文件导致 Sentinel 管理出现问题 sentinel deny-scripts-reconfig yes #sentinel montior命令解释: sentinel monitor [主接点名称] [主节点ip] [主节点端口] [quorum] #quorum:当一台哨兵发现主机下线后,为防止该哨兵误判,需要其他哨兵共同参与判断,quorum的作用就是quorum个哨兵同意后,就可以认为主机真的下线了 #如果从机配置了主机的公网ip,这个地方也要配置主机公网ip sentinel monitor mymaster xx.xx.xx.xx 6081 2 #超过该时间,主机依然不响应哨兵心跳,哨兵就会判断主机已下线 sentinel down-after-milliseconds mymaster 3000 # 主从切换的超时时间 sentinel failover-timeout mymaster 18000
再修改26002的配置。(注意更换一下主机地址,就是xx.xx.xx.xx处)
bind 0.0.0.0 #关闭保护模式 protected-mode no #端口号 port 26002 #后台运行 daemonize yes dir "/opt/redis_sentinel/sentinel_cluster/26002/sentinel-db" logfile "/opt/redis_sentinel/sentinel_cluster/26002/sentinel-log/sentinel.log" sentinel myid e2236291aec7c3a6e1c24f8fd8557624df8d6698 sentinel deny-scripts-reconfig yes sentinel monitor mymaster xx.xx.xx.xx 6081 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 18000
最后修改26003的配置(注意更换一下主机地址,就是xx.xx.xx.xx处)
bind 0.0.0.0 #关闭保护模式 protected-mode no #端口号 port 26003 #后台运行 daemonize yes dir "/opt/redis_sentinel/sentinel_cluster/26003/sentinel-db" logfile "/opt/redis_sentinel/sentinel_cluster/26003/sentinel-log/sentinel.log" sentinel myid 67a03474bea5aa6b8e1324383aabfb404288009f sentinel deny-scripts-reconfig yes sentinel monitor mymaster xx.xx.xx.xx 6081 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 18000
主从配置、哨兵集群配置就搭建完成了。执行如下命令,分别启动3个哨兵节点。
#启动26001哨兵节点
/opt/redis_sentinel/sentinel_cluster/26001/bin/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26001/sentinel.conf
#启动26002哨兵节点
/opt/redis_sentinel/sentinel_cluster/26002/bin/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26002/sentinel.conf
#启动26003哨兵节点
/opt/redis_sentinel/sentinel_cluster/26003/bin/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26003/sentinel.conf
使用ps -ef|grep redis,查看目前的主从、哨兵集群服务是否正常
可以看到,主从的3个节点,哨兵的3个节点都启动成功了。
将现在的主机6081手动kill掉
可以看到6081节点的进程已经没了,之后我们随便进入一个哨兵节点的日志目录。比如:26001
cd /opt/redis_sentinel/sentinel_cluster/26001/sentinel-log/
看一下sentinel的日志,将谁选为了新主机。
tail -100f sentinel.log
//可以看到如下输出,xx.xx.xx.xx是主机的地址
+switch-master mymaster xx.xx.xx.xx 6081 xx.xx.xx.xx 6083
可以看到,新的主机是6083节点,我们登录6083节点看一下
可以看到,新的主节点是6083节点,6083有一个从节点
至此,一主二从三哨兵的redis高可用模式就搭建完成了。下一篇,我们聊一聊原理。哨兵是怎么发现主机宕机并完成主从切换的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。