三:redis哨兵模式实现主从故障切换1

  • 介绍
    Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
    虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 –sentinel 选项来启动 Redis Sentinel 。
    Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
    ● 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
    ● 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
    ● 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

实验环境:redis版本:3.2.8,centos6.6
主:6379 ,sentinel:26379
从:6380 ,sentinel:26380
- 目前我在项目中使用的就是该模式,从节点生产中配置了两个

redis主从配置,配置master 只能为写,slave只能为读,在客户端对poolconnect请求时候,,会将读请求转到slave上面,写请求转到master上面,同时,master和slave有同步功能,这就实现了(数据层)读写分离对上层(逻辑层)透明的正常逻辑。无需再通过中间件或者代码进行读写分析实现

  • 结构图:
    这里写图片描述

  • 安装tcl
    192.169.1.232 zys-zk01
    192.169.1.232 zys-zk02

下载:wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
#tar -xzvf tcl8.6.1-src.tar.gz
#cd  /usr/local/tcl8.6.1/unix/
[root@zys-zk02 unix]#./configure  
[root@zys-zk02 unix]# make && make install
  • 安装redis
[root@zys-zk01 local]# tar -zxvf redis-3.2.8.tar.gz 
[root@zys-zk01 local]#cd redis-3.2.8
[root@zys-zk01 redis-3.2.8]#make && make test && make install
安装好后redis-server -v  可以查看版本
[root@zys-zk01 redis-3.2.8]# redis-server -v
Redis server v=3.2.8 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=615a16d541dda76b

注意:
实际操作中出现的错误
error1:Connect a slave to the master instance (commmands replication) in tests/unit/scripting.tcl
解决到:redis-3.2.8 src目录下执行 make distclean
之后再make test & make install

  • 生产环境启动方案
    要把redis作为一个系统的daemon进程去运行的,每次系统启动,redis进程一起启动

(1)redis utils目录下,有个redis_init_script脚本
(2)将redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379是我们希望这个redis实例监听的端口号
(3)修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)
(4)创建两个目录:/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)
(5)修改redis配置文件(默认在根目录下,redis.conf),拷贝到/etc/redis目录中,修改名称为6379.conf

(6)修改redis.conf中的部分配置为生产环境

daemonize yes 让redis以daemon进程运行
pidfile /var/run/redis_6379.pid 设置redis的pid文件位置
port 6379 设置redis的监听端口号
dir /var/redis/6379 设置持久化文件的存储位置
(7)启动redis,执行cd /etc/init.d, chmod 777 redis_6379,./redis_6379 start

(8)确认redis进程是否启动,ps -ef | grep redis

(9)让redis跟随系统启动自动启动
在redis_6379脚本中,最上面,加入两行注释
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
chkconfig redis_6379 on

上面这些操作是在zys-zk01 这台机器上操作的,在zys-zk02上操作类似,将6379端口或目录换成6380,当然这是两台机器也可以不换端口都用6379,重新启动下机器验证下是否跟操作系统一起启动
zys-zk01:

[root@zys-zk01 ~]# ps -ef|grep redis
root       1753      1  0 09:52 ?        00:00:22 /usr/local/bin/redis-server *:6379              
root       2704   1864  0 16:02 pts/0    00:00:00 grep redis

zys-zk02:

[root@zys-zk02 ~]# ps -ef|grep redis
root       1940      1  0 16:12 ?        00:00:00 /usr/local/bin/redis-server *:6380              
root       2056   2034  0 16:15 pts/0    00:00:00 grep redis
  • 两台机器上的redis安装好以后,下面配置下主从读写分离,zys-zk01机器上为主master,zys-zk02机器上为slave
    在zys-zk02 的6380.conf文件上配置slaveof 192.168.1.232 6379
[root@zys-zk02 redis]# vim 6380.conf 
加在文件的最后保持
# When a child rewrites the AOF file, if the following option is enabled
# the file will be fsync-ed every 32 MB of data generated. This is useful
# in order to commit the file to the disk more incrementally and avoid
# big latency spikes.
aof-rewrite-incremental-fsync yes

slaveof 192.168.1.232 6379

重启下6380端口的服务

[root@zys-zk02 redis]# /etc/init.d/redis_6380 stop
Stopping ...
Redis stopped
[root@zys-zk02 redis]# /etc/init.d/redis_6380 start
Starting Redis server...
  • 测试下主从读写分离
    redis-cli SHUTDOWN,连接本机的6379端口停止redis进程
    redis-cli -h 127.0.0.1 -p 6379 SHUTDOWN,制定要连接的ip和端口号
    redis-cli PING,ping redis的端口,看是否正常
    redis-cli,进入交互式命令行
    在zys-zk01上
[root@zys-zk01 ~]# /usr/local/bin/redis-cli -h 192.168.1.232 -p 6379
192.168.1.232:6379> set key1 value1
OK
192.168.1.232:6379> get key1
"value1"

在 zys-zk02上

[root@zys-zk02 redis]# /usr/local/bin/redis-cli  -h 192.168.1.233 -p 6380
192.168.1.233:6380> get key1
"value1"
192.168.1.233:6380> set key2 value2
(error) READONLY You can't write against a read only slave.
192.168.1.233:6380>

到这里redis的主从,读写分离已经做好了,发现向zys-zk02 6380服务上写入数据是写不进去的

  • 下面,动手实操,练习如何操作部署哨兵集群,如何基于哨兵进行故障转移,还有一些企业级的配置方案
    哨兵的具体配置放在下一篇吧
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值