安装redis

我这里装的是一主三从,其中有一个从一直不能切换到主,所以这台机器上不需要配置keepalived,只需要在redis.conf文件配置上加上slaveof 20.200.45.95 6479,这个IP配置的是虚拟IP的地址,因为你不知道主机到时候会是哪一台IP地址。

机器信息:20.200.45.72 主

20.200.45.73 从

20.200.45.74 从

20.200.45.75 从(永远不能升为主)

申请的虚拟IP:20.200.45.95

一.需要gubby环境和gc++环境

yum install gcc zib ruby rubygems tcl

二.下载解压redis

解压:tar -zxvf redis-4.0.2.tar.gz

> cd redis-4.0.2

> make

> make test

> make install

安装成功后,在/usr/local/bin/目录下,会出现6个文件,如下图

你可以在redis-4.0.2目录下,创建bin文件夹,把/usr/local/bin/下的文件拷贝到

redis-4.0.2/bin目录下,在创建个logs文件夹,步骤如下:

> cd redis-4.0.2

> mkdir bin

> mkdir logs

> cp /usr/local/bin /home/user1/redis-4.0.2/bin

给其中三个文件赋予高一点的权限,最高是777

>chmod 777 redis-cli

>chmod 777 redis-server

>chmod 777 redis-sentinel

三.修改配置文件

每个redis配置文件都一致,注意:永远不能升为主的机器上,再加上slaveof 20.200.45.95 6479 这个配置就好了,别的机器不需要这个配置。

redis.conf基本配置:

bind 0.0.0.0

port 6479

protected-mode no

daemonize yes

pidfile "app/redis1z3c/redis/redis_6479.pid"

logfile "app/redis1z3c/redis/logs/redis.log"

stop-writes-on-bgsave-error no

dir "app/redis1z3c/redis/bin"

slave-serve-stale-data yes

slave-read-only no

slave-priority 80

appendonly yes

四.启动redis

我redis安装在/app/redis1z3c/redis目录下

启动72机器:后面73,74,75依次都是这个命令

> cd /app/redis1z3c/redis/bin

> ./redis-server ../redis.conf  ##启动redis

> /redis-cli -h 20.200.45.72 -p 6479

输入info,可以看到redis信息,

会发现除了75的机器,每一台都是master

75机器显示是slave,如图:

因为keepalived没有启动,所以虚拟IP显示的是down机状态。

安装keepalived

一、安装依赖环境:

yum install kernel-devel openssl-devel popt-devel ipvsadm libnl libnl-devel

二、下载解压keepalived

我是安装在/app/redis1z3c/目录下

解压:tar -zxvf keepalived-2.0.10.tar.gz

> cd keepalived-2.0.10

> ./configure --prefix=/usr/local/keepalived

> make && make install

在/usr/local/keepalived相应的生成4个文件夹,如图:

三、把相应的文件移到系统相应的目录中

注意:keepalived启动,读取的配置文件一定是/etc/keepalived/keepalived.conf文件

> cp /usr/local/keepalived/etc/sysconfig/keepalived   /etc/sysconfig/keepalived

> cp /usr/local/keepalived/sbin/keepalived     /usr/sbin/keepalived

在/etc目录下,创建keepalived文件夹

> mkdir keepalived

> cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived ##这是keepalived配置文件

> cp /app/redis1z3c/keepalived-2.0.10/keepalived/etc/init.d/keepalived  /etc/init.d ##这是启动脚本

四、修改keepalived日志文件存放的地方

默认是放在/var/log/message下面,但是这个文件有很多别的日志信息,所以我们单独配置keepalived日志文件

修改/etc/sysconfig/keepalived文件:

> vi /etc/sysconfig/keepalived

把KEEPALIVED_OPTIONS="-D" 修改成KEEPALIVED_OPTIONS="-D -d -S 0",保存

修改 /etc/rsyslog.conf

在最后一行添加:

local0.*                /etc/keepalived/keepalived.log

systemctl restart rsyslog ##重启rsyslog

五、修改配置文件和脚本

脚本文件我放在/etc/keepalived/scripts文件下,在/etc/keepalived文件下在创建log文件

如图:

1. 修改keepalived.conf文件

这是20.200.45.72的配置:

! Configuration File for keepalived

global_defs {

router_id ocs_keepalived

}

vrrp_script chk_redis {

script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"

interval 2

}

vrrp_instance VI_1 {

state MASTER  ###主节点,从机器要把MASTER  换成BACKUP

interface eth0 ###网卡

virtual_router_id 25 ###设置VRID,决定多播的MAC地址

mcast_src_ip 20.200.45.72  ###多播地址,73的机器上配置20.200.45.73的IP,74的机器上配置20.200.45.74的IP地址

priority 100  ###优先级,73的机器上配置98,74的机器上配置95

advert_int 1 ###检查间隔

authentication { ###设置的认证

auth_type PASS

auth_pass 1111

}

track_script {

chk_redis

}

virtual_ipaddress { ###虚拟IP地址

20.200.45.95

}

notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 20.200.45.95 6479"

notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 20.200.45.95 6479"

notify_fault  /etc/keepalived/scripts/redis_fault.sh

notify_stop   "/etc/keepalived/scripts/redis_stop.sh 127.0.0.1 20.200.45.95 6479"

}

2.添加redis_check.sh脚本

#!/bin/bash

ALIVE=`/app/redis1z3c/redis/bin/redis-cli -h $1 -p $2 PING`

LOGFILE="/etc/keepalived/log/keepalived-redis-check.log"

echo "[CHECK]" >> $LOGFILE

date >> $LOGFILE

if [ $ALIVE == "PONG" ]; then :

echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1

exit 0

else

echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1

exit 1

fi

3.添加redis_master.sh脚本

#!/bin/bash

REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"

LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE

echo "$2 $3" >>$LOGFILE

echo "关闭备份,转换成主机模式" >> $LOGFILE

date >> $LOGFILE

echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF NO ONE cmd ... " >> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

echo "close slaver ,become master " >> $LOGFILE

sleep 5

echo "发送消息给监控" >> $LOGFILE

4.添加redis_stop.sh脚本

#!/bin/bash

LOGFILE=/etc/keepalived/log/keepalived-redis-state.log

echo "[stop]" >> $LOGFILE

date >> $LOGFILE

echo "$2 $3" >> $LOGFILE

echo "keepalived 出现故障,redis变为备机">> $LOGFILE

REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"

echo "Being slave...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1

$REDISCLI SLAVEOF $2 $3 >> $LOGFILE

5.添加redis_backup.sh脚本

#!/bin/bash

REDISCLI="/app/redis1z3c/redis/bin/redis-cli -h $1 -p $3"

LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"

echo "[BACKUP]" >> $LOGFILE

echo "$1 $3" >> $LOGFILE

echo "关闭主机模式,转为备机模式" >> $LOGFILE

date >> $LOGFILE

echo "Being slave...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1

$REDISCLI SLAVEOF $2 $3 >> $LOGFILE

echo "发送消息给监控" >> $LOGFILE

6.添加redis_fault.sh 脚本

#/bin/bash

LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"

echo "[fault]" >> $LOGFILE

date >> $LOGFILE

echo "redis 出现故障,无法ping通,请检查redis服务" >> $LOGFILE

六.启动keepalived

记住:虚拟IP在哪台机器上,哪台机器就会是主机,虚拟ip是按照优先级去区分主从。

只需要启动72,73,74机器,启动命令如下:

进入/etc/init.d文件夹下

> ./keepalived start

> ps -ef|grep keepalived

> ip a 看虚拟IP是否出来,72会显示虚拟IP

73和74的机器上, 是没有虚拟IP 的,如图:

七.这时再看每一台redis的状态

72机器:

>./redis-cli -h 20.200.45.72 -p 6479

>info  ##会看到72变成了主,73,74,75都是从

在任意看其中一台从的机器,比如74

> ./redis-cli -h 20.200.45.74 -p 6479

> info  ##会看到74是虚拟IP的从

再看75机器

> ./redis-cli -h 20.200.45.75 -p 6479

> info  ##会发现虚拟IP变成up状态

我们也可以直接连接虚拟ip

> ./redis-cli -h 20.200.45.95 -p 6479

> info  ##会发现虚拟IP是主机,跟72显示状态一样

这个时候我把72的机器停了,会发现73变成了主,74,75还是从

如果再把72启动起来,会发现72又变回了主

八.附件

下面我把redis配置文件和keepalived配置文件放上去

九.注意事项

1.系统防火墙必须关掉

2.VIP使用需要在同一个网段

3.实现主备模式,需要先全部启动redis,之后按照优先级启动keepalived

4.redis备库掉了之后,重新加入机器需要先杀掉keepalived,之后重启启动redis和keepalived,

如果不这样做,有可能会出现双主。不过我这边测试安装没有出现双主的情况,所以这个按照当时情况再看。

5.结合项目,云平台可能会存在限制,主要是安全组件打开,keepalived无法正常使用,造成VIP出现两台机器上。

redis+keepalived安装的更多相关文章

  1. redis+Keepalived实现Redis主从复制

    redis+Keepalived实现Redis主从复制: 环境:CentOs6.5Master: 10.10.10.203Slave:   10.10.10.204Virtural IP Addres ...

  2. Redis - Keepalived + redis 主备热备切换

    1. 热备方案 硬件:server两台,分别用于master-redis及slave-redis 软件:redis.keepalived 实现目标: 由keepalived对外提供虚拟IP(VIP)进 ...

  3. redis cluster安装部署(测试环境)

    redis 应用于web前端,做缓存和数据存取的速度是挺可观的,最近看了一些资料,手痒了,就弄了一个测试环境,两台方案,试用一下. ##Redis 集群部署## 一,方案调研: 参考博客: http: ...

  4. 测试redis+keepalived实现简单的主备切换【转载】

    转自: 测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站http://raising.iteye.com/blog/2311757 ...

  5. Redis + keepalived 高可用群集搭建

    本次实验环境介绍: 操作系统: Centos 7.3 IP : 192.168.10.10 Centos 7.3 IP : 192.168.10.20  VIP    地址   : 192.168.1 ...

  6. Redis+Keepalived高可用环境部署记录

    Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从.主备.互备方案,尤其是无状态业务,有状态业务就需要额外 ...

  7. linux 双Redis + keepalived 主从复制+宕机自主切换

    主要核心思想,如果master 和 salve 全部存活的情况,VIP就漂移到 master.读写都从master操作,如果master宕机,VIP就会漂移到salve,并将之前的salve切换为ma ...

  8. redis的安装配置

    主要讲下redis的安装配置,以及以服务的方式启动redis 1.下载最新版本的redis-3.0.7  到http://redis.io/download中下载最新版的redis-3.0.7 下载后 ...

  9. Linux下Redis的安装和部署

    一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...

随机推荐

  1. NBUT 1219 Time 2010辽宁省赛

    Time limit   1000 ms Memory limit   131072 kB Digital clock use 4 digits to express time, each digit ...

  2. 2.1 Linux中wait、system 分析

    wait与waitpid: 当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止). 子进程退出时,内核将子进程置为僵尸状态,这个 ...

  3. django 远程数据库mysql migrate失败报error 1045之 解决方案

    Access denied for user 'root'@'localhost' (using password: YES)       ERROR 1045: Access denied for ...

  4. Spring目前用到的知识点

    2017/7/28 目前的工作,spring用到到的地方 在当前类有下列的代码 private BookDao bookDao bookDao.调用方法 点开这个方法,声明指向的是BookDao这个接 ...

  5. day11 python学习 函数的建立,返回值,参数

    函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...

  6. C#中Task的使用简单总结

    Task在并行计算中的作用很凸显,但是他的使用却有点小复杂,下面是任务的一些基本使用说明(转载与总结于多篇文章) 简单点说说吧! 创建 Task 创建Task有两种方式,一种是使用构造函数创建,另一种 ...

  7. pthread中errors.h的代码

    #ifndef __errors_h #define __errors_h #include <unistd.h> #include <errno.h> #include &l ...

  8. 【转】每天一个linux命令(9):touch 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/10/30/2745714.html linux的touch命令不常用,一般在使用make的时候可能会用到 ...

  9. linux的性能优化

    转一位大神的笔记. linux的性能优化: 1.CPU,MEM 2.DISK--RAID 3.网络相关的外设,网卡 linux系统性能分析: top:linux系统的负载,CPU,MEM,SWAP,占 ...

  10. vue 文件中的注释

    在每个代码块内,注释的时候,需要使用各自语言的注释语法去注释(HTML.CSS.JavaScript.Jade 等).在文件最顶部注释的时候用HTML的注释语法:<!- 在这里写注释的内容 -- ...