redis集群之主从复制+哨兵模式


redis集群的理论知识请参考我之前的博客,链接为:redis集群之主从复制+哨兵模式+cluster群集(理论+实战,收获满满!!!)

一、redis集群之主从复制

1.1、集群介绍

在主从模式的Redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用。

节点类型 IP地址 安装包 功能
master 192.168.100.128 redis-5.0.7.tar.gz 提供可读可写
slave1 192.168.100.131 redis-5.0.7.tar.gz 提供只读
slave2 192.168.100.132 redis-5.0.7.tar.gz 提供只读

1.2、搭建过程

1、先给每个节点安装redis

//安装编译工具
yum install -y gcc gcc-c++ make

//安装包可以用下面这个命令下载,但是慢。
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
#软件包解压到/usr/local目录下
tar -zxvf redis-5.0.7.tar.gz -C /usr/local       

//编译安装
cd /usr/local
mv redis-5.0.7 redis
cd redis
make
cd src && make install

2、修改主、从节点的配置文件

主节点:
vi /usr/local/redis/redis.conf 

69/bind 0.0.0.0
在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf

136行 daemonize no     #开启守护进程yes
sed -i '136s/no/yes/' /usr/local/redis/redis.conf

171行 logfile ""   改成 logfile /usr/local/redis/redis.log
sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf

263行 dir ./  改成  dir /usr/local/redis   #本地数据库的存放目录
sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf

699/appendonly no    #启用AOF持久化
sed -i '699s/no/yes/' /usr/local/redis/redis.conf
从节点:
vi /usr/local/redis/redis.conf 

69/bind 0.0.0.0
在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf

136行 daemonize no     #开启守护进程yes
sed -i '136s/no/yes/' /usr/local/redis/redis.conf

171行 logfile ""   改成 logfile /usr/local/redis/redis.log
sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf

263行 dir ./  改成  dir /usr/local/redis
sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf

699/appendonly no    #启用AOF持久化
sed -i '699s/no/yes/' /usr/local/redis/redis.conf

286/# replicaof <masterip> <masterport> 改成 replicaof 192.168.100.128 6379
sed -i '286creplicaof 192.168.100.128 6379' /usr/local/redis/redis.conf

3、设置防火墙,放通6379端口的信息流通

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload 

4、设置内存分配策略

cat >> /etc/sysctl.conf<<EOF
vm.overcommit_memory = 1
EOF

/proc/sys/vm/overcommit_memory 可选值:0、1、2。
 0:表示内核将检查是否有足够的可用内存供应用进程使用;
如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
 2:表示内核允许分配超过所有物理内存和交换空间总和的内存

sysctl -p   #加载生效

5、启动服务,先启动master redis,然后依次启动slave

/usr/local/redis/src/redis-server /usr/local/redis/redis.conf

6、 查看日志文件内容,可以看到两个slave节点连接成功的信息!

tail -99f /usr/local/redis/redis.log

也可以通过登录数据库,查看节点角色
在这里插入图片描述

1.3、验证

进入主节点的数据库中,创建键值对,在从节点中可以进行查询,但是不能在从节点创建新的键值对。
主节点:

[root@localhost redis]# redis-cli
127.0.0.1:6379> set name zhangsan	   #创建一个键值对
OK
127.0.0.1:6379> keys *	  #查看所有键
1) "name"
127.0.0.1:6379> get name	    #查看name键的值
"zhangsan"
127.0.0.1:6379> exit	

从节点服务器:

[root@localhost ~]# redis-cli 	 
127.0.0.1:6379> get name	    #查看name键的值
"zhangsan"
127.0.0.1:6379> exit	

二、redis集群之哨兵模式

2.1、部署过程

redis2.8版本之前是主从复制模式,但是当数据库遇到异常中断服务后,我们只能通过手动的方式选择一个从数据库来升格为主数据库,显然这种方式很麻烦需要人工介入,这时通过哨兵模式可以实现自动化的系统监控和故障恢复。

哨兵模式是在主从复制的基础上加入监控机制,来实现自动化的系统监控和故障恢复功能。
具体功能如下:
在这里插入图片描述
哨兵集群的结构图:在这里插入图片描述
每个节点都有一个哨兵进行监控。

1、搭建主从复制集群

2、设置哨兵模式的配置文件

master节点:

vi /usr/local/redis/sentinel.conf

17/protected-mode no    #关闭保护模式
sed -i '17s/^#//' /usr/local/redis/sentinel.conf
sed -i '17s/^ //' /usr/local/redis/sentinel.conf

21/port 26379     #无需修改,sentinel的端口号

26/daemonize yes    指定sentinel为后台启动
sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf

36/logfile /usr/local/redis/sentinel.log   #日志存放路径
sed -i '36s/""/\/usr\/local\/redis\/sentinel.log/' /usr/local/redis/sentinel.conf

65/dir /tmp 改成 dir "/usr/local/redis"    #数据库存放路径
sed -i '65s/tmp/usr\/local\/redis/' /usr/local/redis/sentinel.conf

84/sentinel monitor mymaster 192.168.100.128 6379 2
sed -i '84s/127.0.0.1/192.168.100.128/' /usr/local/redis/sentinel.conf
//sentinel monitor mymaster [主服务器节点IP] [主服务器节点port] [几个哨兵检测到主节点失联数量] 
 -- 至少有几个哨兵检测到主服务器故障了,才进行故障迁移 

113/sentinel down-after-milliseconds mymaster 3000     #原来是30000,为了尽快看到效果,将时间缩短  
sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf

146/sentinel failover-timeout mymaster 120000   #原来是180000
sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf

slave节点:

vi /usr/local/redis/sentinel.conf

17/protected-mode no    #关闭保护模式
sed -i '17s/^#//' /usr/local/redis/sentinel.conf
sed -i '17s/^ //' /usr/local/redis/sentinel.conf

26/daemonize yes    指定sentinel为后台启动
sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf

36/logfile /usr/local/redis/sentinel.log   #日志存放路径

65/dir /tmp 改成 dir "/usr/local/redis"    #数据库存放目录

84/sentinel monitor mymaster 192.168.100.128 6379 2    #填写主节点的地址

113/sentinel down-after-milliseconds mymaster 3000     #原来是30000,为了尽快看到效果,将时间缩短  
sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf

146/sentinel failover-timeout mymaster 120000   #原来是180000
sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf

3、启动哨兵服务

依次启动哨兵sentinel,先启动master 然后slave

//放在后台运行
/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf &

查看哨兵信息,里面有master节点的IP地址

redis-cli -p 26379 INFO Sentinel

2.2、故障模拟

关闭主节点的redis-server服务

ps -ef | grep redis    #查看redis-server进程数
kill -9 进程数   #关闭redis-server

//查看日志
tail -99f /usr/local/redis/sentinel.log 
看到switch-master mymaster 192.168.100.128 6379 192.168.100.132 6379,即主节点down掉,从节点顶替主节点。

// 查看哨兵信息,可以看到master节点的IP地址改变
redis-cli -p 26379 INFO Sentinel   
原创文章 112 获赞 44 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28361541/article/details/105026565