redis一主二从-哨兵模式的搭建

23 篇文章 0 订阅

第一部分:安装redis

1、获取redis压缩包

wget http://download.redis.io/releases/redis-4.0.6.tar.gz

解压文件,因为没有-C指定文件夹,在那个文件夹下tar就在那个文件下

tar -zxvf redis-4.0.6.tar.gz

2、编译安装

yum install gcc #安装编译环境
cd redis-4.0.6/src #进入解压的src文件夹中
make && make install #编译安装

第二部分:搭建redis集群,实现一主二从,哨兵检测模式

搭建redis集群不用安装多个redis,只需要复制配置文件,修改配置文件即可;
1、搭建redis-master
第一步: 进入redis-4.0.6目录,创建redis_master文件夹,将src下的redis-cli,redis-server,redis.conf复制到新建的redis_master文件夹中

cd redis-4.0.6
mkdir redis_master
cp src/redis-cli ./redis_master/
cp src/redis-server ./redis_master/
cp src/redis.conf ./redis_master/

第二步: 修改redis_master中的redis.conf配置文件,修改内容如下:

# 守护进程模式
daemonize yes
#注解掉  bind 127.0.0.1
#protected-mode yes 改为no
protected-mode  no
# 监听端口 
port 6379
# pidfile 修改pidfile指向路径
pidfile 根据自己的位置/redis_master/redis_master.pid
# 指明日志文件名
logfile "./redis7001.log"
# 持久化数据库的文件名 
dbfilename dump-master.rdb
# 工作目录
dir 根据自己的位置/redis-4.0.6/redis_master/
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
# 密码验证
requirepass testmaster123
# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略
maxmemory 3gb
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
maxmemory-policy volatile-lru
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite yes

第三步: 启动并测试
在新建的redis_master中启动并测试

#启动master
redis-server ./redis.conf
#查看下redis进程
ps -aux |grep redis
#使用客户端连接测试
redis-cli -p 6379 -a testmaster123
#插入一条数据
set name lisi
#查询数据
get name
"lisi"
#退出
quit

redis_master搭建完毕,并且能正常读写

2、搭建redis_slave
第一步: 进入redis-4.0.6文件,创建redis_slave文件夹,将src下的redis-cli,redis-server,redis.conf复制到新建的redis_slave文件夹中

cd redis-4.0.6
mkdir redis_slave
cp src/redis-cli ./redis_slave/
cp src/redis-server ./redis_slave/
cp src/redis.conf ./redis_slave/

第二步: 修改redis_slave中的redis.conf配置文件,修改内容如下:

#守护线程
daemonize yes 

#注解掉  bind 127.0.0.1

#protected-mode yes 改为no
protected-mode  no

# pidfile
pidfile  根据自己的位置/redis-4.0.6/redis_slave/redis_slave.pid
# 监听端口  
port 7002
# 指明日志文件名
logfile "./redis7002.log"
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 自己服务的ip地址 7001
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
# 密码验证
requirepass testmaster123
#(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)
slave-read-only yes

第三步: 启动并测试
在新建的redis_slave中启动并测试

#启动redis slave 
redis-server ./redis.conf
#连接redis slave 
redis-cli -p 7002 -a testmaster123
#查询数据
get name
"zhangsan"

master中信息已经同步了
3、搭建redis_slave2
搭建redis_slave2和搭建redis_slave步骤一样,首先,需要创建文件->复制src下的redis-cli,redis-server,redis.conf->修改配置文件->启动测试。
修改配置文件内容如下:
a: 监听端口
b: 开启守护线程
c: 修改自己的pidfile文件位置
d: 日志文件位置
e: master服务器的ip地址和端口
f: 密码设置
g: 注解掉 bind 127.0.0.1
h: protected-mode yes 改为no

#守护线程
daemonize yes 

#注解掉  bind 127.0.0.1

#protected-mode yes 改为no
protected-mode  no

# pidfile
pidfile  根据自己的位置/redis-4.0.6/redis_slave/redis_slave.pid
# 监听端口  
port 7003
# 指明日志文件名
logfile "./redis7003.log"
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 127.0.0.1 7001
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
#(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)
slave-read-only yes

4、搭建哨兵
第一步: 进入redis-4.0.6文件,创建redis_sentinel文件夹,将src下的redis-cli,redis-server,redis_sentinel复制到新建的redis_sentinel文件夹中,在redis_sentinel文件夹中新建sentinel1.conf

cd redis-4.0.6
mkdir redis_sentinel
cp src/redis-cli ./redis_sentinel/
cp src/redis-server ./redis_sentinel/
cp src/redis_sentinel ./redis_sentinel/
touch sentinel1.conf 

第二步: 修改配置文件:哨兵发现redis的ip地址,尽量不要使用127.0.0.1使用自己的服务地址

# port <sentinel-port> 
port 8001

# 守护进程模式
daemonize yes

# 指明日志文件名
logfile "./sentinel1.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir ./

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
# 当前Sentinel节点监控 127.0.0.1 7001 这个主节点
# 2代表判断主节点失败至少需要2个Sentinel节点节点同意
# mymaster是主节点的别名
sentinel monitor MyMaster 自己服务的ip地址 7001 2

#当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs MyMaster 1

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
# 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds MyMaster 1500

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout MyMaster 10000

# 设置master和slaves验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass MyMaster testmaster123

sentinel config-epoch MyMaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵,不用配置,启动后自动发现
#自动出现以下信息,一定要注意这里!!!!
sentinel known-sentinel MyMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel MyMaster  127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862

第三步: 多个哨兵配置
其他哨兵只需要复制sentinel1.conf配置文件,重命名以后,需要如下改变如下配置即可:

# port <sentinel-port>
port 8002
# 指明日志文件名
logfile "./sentinel2.log"

第四步: 启动哨兵

启动哨兵:redis.sentinel  ./sentinel1.conf  或使用 redis.server ./sentinel1.conf  --sentinel
     redis.sentinel  ./sentinel2.conf
     redis.sentinel  ./sentinel3.conf

第三步:进行整体测试

连接哨兵:redis-cli -p 8001
成功连接以后:
查看master:sentinel masters
查看当前mastrer :SENTINEL get-master-addr-by-name TestMaster
若oldmaster宕机后,master会改变成newmaster,oldmaster再次上线时,只能是slave,不会在是master
在这里插入图片描述
查看端口:ps -ef | grep redis
杀死进程:kill -9 进程号
在这里插入图片描述
本篇搭建了一主二从,并且加入了三个哨兵,任何一个节点挂掉都不影响正常使用,实现了高可用。
存在的问题:
一主二从每个节点都存储着数据,随着业务庞大,数据量在某天会超过节点容量,即便是redis可以配置清理策略,但是也有极限,于是需要搭建redis集群,将数据分别存储到不同的redis上,并且可以横向扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值