路漫漫其修远兮
吾将上下而求索

redis学习:主从复制及sentinel高可用配置

主从复制测试

redis的主从复制很简单,只要在从服务器中添加master是哪个节点就可以

此测试是基于:redis-3.2.9,以及自动化安装脚本,实际情况以实际为准修改

这里设置有三个redis节点,一个master,两个slave。

使用自动化安装脚本安装redis,这里不做赘述

redis为安全起见,默认监听:127.0.0.1:6380,修改配置文件,为内网ip,其他节点可以访问到

同时修改master节点的防火墙,允许同一网段机器访问

-A INPUT -s 192.168.170.0/24 -p tcp --dport 6380 -j ACCEPT

设置master配置文件,重启服务

requirepass 234567   #添加密码

设置slave1配置文件,重启服务

slaveof 192.168.170.10 6380
masterauth 234567

设置slave2配置文件,重启服务

slaveof 192.168.170.10 6380
masterauth 234567

设置好后可以在master节点看到两个从节点,主从复制完成

127.0.0.1:6380> info
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.170.12,port=6380,state=online,offset=931,lag=1
slave1:ip=192.168.170.11,port=6380,state=online,offset=931,lag=1
master_repl_offset:931

sentinel高可用测试

下面的测试是重新搭建的,和上面没有关系

image.png

redis高可用.zip

三个节点同时操作:将自动安装脚本下载到本地 

[root@master ~]#git clone https://git.andblog.cn/root/services_auto_install.git

三个节点同时操作:将自动安装的其他服务注释掉,只保留redis服务,端口:6380,然后进行编译安装

三个节点同时操作:安装好后修改redis的配置文件如下,即:要求输入密码,并设置从服务同步密码,并重启服务,因为每个节点都有可能会变成从节点,去主节点同步数据,这里都要睡着

[root@master /usr/local/redis-6380/conf]#vim redis.conf
bind 0.0.0.0
masterauth 234567
requirepass 234567

两个从节点设置:设置每个节点的是哪个节点的从节点,这里只是设置初始化状态,运行后的主从关系根据sentinel的运行动态决定

[root@master /usr/local/redis-6380/conf]#vim redis.conf
slaveof 192.168.170.10 6380

三个节点同时操作:配置防火墙允许同一网段的主机访问6380端口,不然从节点无法和主节点同步数据

[root@master ~]#vim /etc/sysconfig/iptables
-A INPUT -s 192.168.170.0/24 -p tcp --dport 6380 -j ACCEPT

到这里主从同步就可以正常工作了,可以从主节点看到两个从节点的状况

三个节点同时操作:因为自动化脚本已经将sentinel配置文件和vip自动转移脚本复制到配置文件目录了,只需修改为需要的即可

修改master_failover.sh 
local ip,vip改为自己主机的内网ip
修改邮件发送的地址

三个节点同时操作:配置防护墙放行端口,sentinel通过此端口通信

-A INPUT -s 192.168.170.0/24 -p tcp --dport 26380 -j ACCEPT

为master节点添加ip地址

ip addr add 192.168.170.13/24 dev eth0

启动三个节点sentinel服务,查看日志

service redis-6380-sentinel restart

进程,都是以redis身份运行

[root@master ~]#ps aux | grep redis
redis      4891  0.2  0.9 135588  9692 ?        Ssl  16:13   0:03 /usr/local/redis-6380/bin/redis-server 0.0.0.0:6380                         
redis     26695  0.5  0.7 133540  7676 ?        Ssl  16:34   0:00 /usr/local/redis-6380/bin/redis-server 0.0.0.0:26380 [sentinel]                           
root      26699  0.0  0.0 100960   616 pts/1    S+   16:34   0:00 tail -f /var/log/redis/redis-6380-sentinel.log
root      26705  0.0  0.0 103328   852 pts/0    S+   16:35   0:00 grep --color=auto redis

然后从192.168.170.14机器上面测试,正常

redis-cli -h 192.168.170.13 -p 6380 -a 234567

查看节点状况

redis-cli -h 192.168.170.13 -p 26380 info sentinel

当不使用service脚本的时候,使用下面的命令可以让sentinel运行起来

redis-server  /usr/local/redis-6380/conf/sentinel.conf --sentinel   #后台模式启动

当sentinel发生master转移的时候,会向用户脚本中传递7个参数,分别是:

<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>

下面是通过脚本测试的结果

[root@master /usr/local/redis-6380/conf]#cat master_failover.sh 
#!/bin/bash 

cd /usr/local/redis-6380/conf
echo $1 >> abc
echo $2 >> abc 
echo $3 >> abc
echo $4 >> abc
echo $5 >> abc
echo $6 >> abc
echo $7 >> abc

当master要漂移到11上面的时候,有用的信息就是$6

[root@master /usr/local/redis-6380/conf]#cat abc 
mymaster
leader
start
192.168.170.10
6380
192.168.170.11
6380

未经允许不得转载:江哥架构师笔记 » redis学习:主从复制及sentinel高可用配置

分享到:更多 ()

评论 抢沙发

评论前必须登录!