redis-banner
2015-04-11 6 条评论

一:环境介绍

Master: 172.16.206.29

Slave: 172.16.206.28

Virtural IP Address (VIP): 172.16.206.250

二:设计思路:

当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;

当 Master 挂掉,Slave 正常时, Slave接管服务,有写权限,同时关闭主从复制功能;

当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,同时Slave等待Master同步数据完成之后,恢复Slave身份。

三:安装配置前准备工作

在主服务器 172.16.206.29 上面做下面操作

echo “172.16.206.29 osb29” >> /etc/hosts

echo “172.16.206.28 osb28” >> /etc/hosts

在从服务器 172.16.206.28 上面做下面操作

echo “172.16.206.29 osb29” >> /etc/hosts

echo “172.16.206.28 osb28” >> /etc/hosts

四:主服务器配置redis

1.下载redis 版本2.8.19

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

2.解压 tar -zxvf redis-2.8.19.tar.gz

3.cd redis-2.8.19

4.make && make install

5.cp redis.conf /etc/redis.conf

cd src/

cp redis-server redis-cli redis-benchmark redis-check-aofredis-check-dump /usr/local/bin

6.修改 /etc/redis.conf里面可以把daemonize no 修改为daemonize yes

目的是可以在后台执行redis-server。

7.init.d 启动脚本

    vi /etc/init.d/redis-server

chmod o+x /etc/init.d/redis-server

chkconfig –add redis-server

service redis-server start

五:从服务器配置redis

从服务器,配置一样,只不过 修改/etc/redis.conf 中

slaveof <masterip> <masterport>修改为

slaveof 172.16.206.28 6379

然后开启从服务器的redis服务。

start redis-server start

 

六:进行redis主从测试

#主服务器

redis-cli -p 6379 set hello world

#从服务器

redis-cli -p 6379 get hello

“world”

 

#主服务器

redis-cli -p 6379 set hello2 world2

#从服务器

redis-cli -p 6379 get hello2

“world2”

redis-cli -p 6379 set hello world

(error) READONLY You can’t write against a read only slave.

成功配置主从redis服务器,由于配置中有一条从服务器是只读的,所以从服务器没法设置数据,只可以读取数据。

 

七:安装和配置keepalived

1. wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

tar -zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

2.  安装openssl-devel和kernel-devel

yum install openssl-devel

yum install kernel-devel

ln -s /usr/src/kernels/2.6.32-431.el6.x86_64 /usr/src/linux

3. 配置编译安装

./configure–prefix=/usr/local/keepalived  –with-kernel-dir=/usr/src/linux   –enable-sha1

make && make install

4. 复制keepalived相关文件

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

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

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/samples/keepalived.conf.virtualhost

/etc/keepalived/keepalived.conf

八:修改配置文件和相关脚本

1. 在Master上创建配置文件

vi /etc/keepalived/keepalived.conf

2.在Slave上创建如下配置文件

vim /etc/keepalived/keepalived.conf

 

3.在Master和Slave上创建监控Redis的脚本

$  mkdir /etc/keepalived/scripts

$  vim /etc/keepalived/scripts/redis_check.sh

 

4.编写关键脚本

notify_master /etc/keepalived/scripts/redis_master.sh

notify_backup /etc/keepalived/scripts/redis_backup.sh

notify_fault /etc/keepalived/scripts/redis_fault.sh

notify_stop /etc/keepalived/scripts/redis_stop.sh

因为Keepalived在转换状态时会依照状态来执行脚本:

当进入Master状态时会呼叫notify_master

当进入Backup状态时会呼叫notify_backup

当发现异常情况时进入Fault状态呼叫notify_fault

当程序终止时则呼叫notify_stop

 

首先,在Redis Master上创建notity_master与notify_backup脚本:

vi /etc/keepalived/scripts/redis_master.sh

vi /etc/keepalived/scripts/redis_backup.sh

 

在Redis Slave上创建notity_master与notify_backup脚本:

vi /etc/keepalived/scripts/redis_master.sh

vi /etc/keepalived/scripts/redis_backup.sh

然后在Master与Slave创建如下相同的脚本:

 

vi /etc/keepalived/scripts/redis_fault.sh

vi /etc/keepalived/scripts/redis_stop.sh

在主从服务器上面给脚本都加上可执行权限:

chmod +x /etc/keepalived/scripts/*.sh

九:相关功能测试

启动Master和slave上的Redis

service redis-server start

启动Master和slave上的Keepalived

/etc/init.d/keepalived start

尝试通过VIP连接Redis:

$ redis-cli -h 172.16.206.250 INFO

连接成功,可以看到主从机的信息,例如:

role:master

slave0:172.16.206.28,6379,online

 

尝试插入一些数据:

$ redis-cli -h 172.16.206.250 SET hello3 world3

OK

 

从VIP读取数据

$ redis-cli -h 172.16.206.250 GET hello3

“world3”

从Master读取数据

$ redis-cli -h 172.16.206.29 GET hello3

“world3”

从Slave读取数据

$ redis-cli -h 172.16.206.28 GET hello3

“world3”

 

将Master上的Redis进程杀死:

$ service redis-server stop

查看Master上的Keepalived日志

$ tail -f /var/log/keepalived-redis-state.log

[fault]

Mon Jan  5 14:06:22 CST 2015

 

同时Slave上的日志显示:

$ tail -f /var/log/keepalived-redis-state.log

[master]

Mon Jan  5 14:13:52 CST 2015

Being master….

Run SLAVEOF cmd …

OK Already connected to specified master

Run SLAVEOF NO ONE cmd …

OK

现在,Slave已经接管服务,并且拥有Master的角色

$ redis-cli -h 172.16.206.250 INFO

$ redis-cli -h 172.16.206.28 INFO

role:master

 

然后恢复Master的Redis进程

$  service redis-server start

查看Master上的Keepalived日志

$ tail -f /var/log/keepalived-redis-state.log

 

[master]

2015年 01月 05日 星期一 15:48:08 CST

Being master….

Run SLAVEOF cmd …

OK

Run SLAVEOF NO ONE cmd …

OK

同时Slave上的日志显示:

$ tail -f /var/log/keepalived-redis-state.log

[backup]

Mon Jan  5 14:53:16 CST 2015

Being slave….

Run SLAVEOF cmd …

OK

 

Master已经再次恢复了Master角色

发表评论

  1. 请问下 您的vip是怎么配置得。好像我的其他服务器都ping不通vip

    1. 不会啊 哪里除问题啦 在同一网段没被占用的ip都可以用来做vip

  2. 有几个ip 楼主是错误的 改一下可以跑通

    1. 你改了吗?我不知道怎么改?

  3. 这个漫画不会更新了 这个漫画改名字了 大家搜《狼族少年》才是的

  4. 不知道为什么故意将几个ip改错,不知道有什么想法