共计 12680 个字符,预计需要花费 32 分钟才能阅读完成。
一:环境介绍:
Master: 192.168.1.4
Slave: 192.168.1.5
Virtural IP Address (VIP): 192.168.1.253
二:设计思路:
当 Master 与 Slave 均运作正常时, Master 负责服务,Slave 负责 Standby;
当 Master 挂掉,Slave 正时, Slave 接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从 Slave 同步数据,同步数据之后关闭主从复制功能,恢复 Master 身份,于此同时 Slave 等待 Master 同步数据完成之后,恢复 Slave 身份。
然后依次循环。
需要注意的是,这样做需要在 Master 与 Slave 上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
三:安装配置前准备工作
1. 在主服务器 192.168.1.4 上面做下面操作
echo “192.168.1.4 test01” >> /etc/hosts
echo “192.168.1.5 test” >> /etc/hosts
2. 在从服务器 192.168.1.5 上面做下面操作
echo “192.168.1.4 test01” >> /etc/hosts
echo “192.168.1.5 test” >> /etc/hosts
四:主服务器配置 redis
1. 下载安装 redis 软件包
wget http://download.redis.io/releases/redis-2.8.12.tar.gztar xf redis-2.8.12.tar.gz
cd redis-2.8.12
make && make install
cd src/
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /usr/local/bin
cd /usr/local/bin
ls -ll
然后将源码中的 redis.conf 复制到 /etc/redis.conf
cp /root/redis-2.8.12/redis.conf /etc/redis.conf
修改 /etc/redis.conf 里面可以把 daemonize no 修改为 daemonize yes
就可以默认在后台执行 redis-server 了。
再制作一个 init.d 的启动脚本:
vim /etc/init.d/redis-server
#!/usr/bin/env bash
#
# redis start up the redis server daemon
#
# chkconfig: 345 99 99
# description: redis service in /etc/init.d/redis \
# chkconfig –add redis or chkconfig –list redis \
# service redis start or service redis stop
# processname: redis-server
# config: /etc/redis.conf
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF=”/etc/redis.conf”
#make sure some dir exist
if [! -d /var/lib/redis] ;then
mkdir -p /var/lib/redis
mkdir -p /var/log/redis
fi
case “$1” in
status)
ps -A|grep redis
;;
start)
if [-f $PIDFILE]
then
echo “$PIDFILE exists, process is already running or crashed”
else
echo “Starting Redis server…”
$EXEC $CONF
fi
if [“$?”=”0”]
then
echo “Redis is running…”
fi
;;
stop)
if [! -f $PIDFILE]
then
echo “$PIDFILE does not exist, process is not running”
else
PID=$(cat $PIDFILE)
echo “Stopping …”
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [-x ${PIDFILE} ]
do
echo “Waiting for Redis to shutdown …”
sleep 1
done
echo “Redis stopped”
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo “Usage: /etc/init.d/redis {start|stop|restart|force-reload}” >&2
exit 1
esac
chmod o+x /etc/init.d/redis-server
chkconfig –add redis-server
service redis-server start
————————————– 分割线 ————————————–
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
————————————– 分割线 ————————————–
五:从发服务器配置 redis
从服务器,配置一样,只不过 修改 /etc/redis.conf 中
slaveof <masterip> <masterport> 修改为
slaveof 192.168.1.4 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 hello world2
# 从服务器
redis-cli -p 6379 get hello
“world2”
redis-cli -p 6379 set hello world
(error) READONLY You can’t write against a read only slave.
成功配置主从 redis 服务器,由于配置中有一条从服务器是只读的,所以从服务器没法设置数据,只可以读取数据。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-07/104552p2.htm
七:安装和配置 keepalived
1. 在 Master 和 Slave 上安装 Keepalived
$ yum install keepalived -y
2. 默认安装完成 keepalived 之后是没有配置文件的,因此我们需要手动创建:
首先,在 Master 上创建如下配置文件:
$ vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_redis {
script “/etc/keepalived/scripts/redis_check.sh” ### 监控脚本
interval 2 ### 监控时间
}
vrrp_instance VI_1 {
state MASTER ### 设置为 MASTER
interface eth1 ### 监控网卡
virtual_router_id 51
priority 100 ### 权重值
authentication {
auth_type PASS ### 加密
auth_pass 1111 ### 密码
}
track_script {
chk_redis ### 执行上面定义的 chk_redis
}
virtual_ipaddress {
192.168.1.253 ######VIP
}
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
}
3. 然后,在 Slave 上创建如下配置文件:
$ vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_redis {
script “/etc/keepalived/scripts/redis_check.sh” ### 监控脚本
interval 2 ### 监控时间
}
vrrp_instance VI_1 {
state BACKUP ### 设置为 BACKUP
interface eth1 ### 监控网卡
virtual_router_id 51
priority 10 ### 比 MASTRE 权重值低
authentication {
auth_type PASS
auth_pass 1111 ### 密码与 MASTRE 相同
}
track_script {
chk_redis ### 执行上面定义的 chk_redis
}
virtual_ipaddress {
192.168.1.253 ####vip
}
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
}
4. 在 Master 和 Slave 上创建监控 Redis 的脚本
$ mkdir /etc/keepalived/scripts
$ vim /etc/keepalived/scripts/redis_check.sh
#!/bin/bash
ALIVE=`/usr/local/bin/redis-cli PING`
if [“$ALIVE” == “PONG”]; then
echo $ALIVE
exit 0
else
echo $ALIVE
exit 1
fi
5. 编写以下负责运作的关键脚本:
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
当 Keepalived 程序终止时则呼叫 notify_stop
1) 首先,在 Redis Master 上创建 notity_master 与 notify_backup 脚本:
$ vim /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI=”/usr/local/bin/redis-cli”
LOGFILE=”/var/log/keepalived-redis-state.log”
echo “[master]” >> $LOGFILE
date >> $LOGFILE
echo “Being master….” >> $LOGFILE 2>&1
echo “Run SLAVEOF cmd …” >> $LOGFILE
$REDISCLI SLAVEOF 192.168.1.5 6379 >> $LOGFILE 2>&1
sleep 10 #延迟 10 秒以后待数据同步完成后再取消同步状态
echo “Run SLAVEOF NO ONE cmd …” >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
$ vim /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI=”/usr/local/bin/redis-cli”
LOGFILE=”/var/log/keepalived-redis-state.log”
echo “[backup]” >> $LOGFILE
date >> $LOGFILE
echo “Being slave….” >> $LOGFILE 2>&1
sleep 15 #延迟 15 秒待数据被对方同步完成之后再切换主从角色
echo “Run SLAVEOF cmd …” >> $LOGFILE
$REDISCLI SLAVEOF 192.168.1.5 6379 >> $LOGFILE 2>&1
2) 在 Redis Slave 上创建 notity_master 与 notify_backup 脚本:
$ vim /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI=”/usr/local/bin/redis-cli”
LOGFILE=”/var/log/keepalived-redis-state.log”
echo “[master]” >> $LOGFILE
date >> $LOGFILE
echo “Being master….” >> $LOGFILE 2>&1
echo “Run SLAVEOF cmd …” >> $LOGFILE
$REDISCLI SLAVEOF 192.168.1.4 6379 >> $LOGFILE 2>&1
sleep 10 #延迟 10 秒以后待数据同步完成后再取消同步状态
echo “Run SLAVEOF NO ONE cmd …” >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
$ vim /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI=”/usr/local/bin/redis-cli”
LOGFILE=”/var/log/keepalived-redis-state.log”
echo “[backup]” >> $LOGFILE
date >> $LOGFILE
echo “Being slave….” >> $LOGFILE 2>&1
sleep 15 #延迟 15 秒待数据被对方同步完成之后再切换主从角色
echo “Run SLAVEOF cmd …” >> $LOGFILE
$REDISCLI SLAVEOF 192.168.1.4 6379 >> $LOGFILE 2>&1
3) 然后在 Master 与 Slave 创建如下相同的脚本:
$ vim /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo “[fault]” >> $LOGFILE
date >> $LOGFILE
$ vim /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo “[stop]” >> $LOGFILE
date >> $LOGFILE
6. 在主从服务器上面给脚本都加上可执行权限:
$ chmod +x /etc/keepalived/scripts/*.sh
7. 进行相关功能测试
启动 Master 和 slave 上的 Redis
$ /etc/init.d/redis start
启动 Master 和 slave 上的 Keepalived
$ /etc/init.d/keepalived start
尝试通过 VIP 连接 Redis:
$ redis-cli -h 192.168.0.253 INFO
连接成功,Slave 也连接上来了。
role:master
slave0:192.168.1.5,6379,online
尝试插入一些数据:
$ redis-cli -h 192.168.0.253 SET Hello Redis
OK
从 VIP 读取数据
$ redis-cli -h 192.168.0.253 GET Hello
“Redis”
从 Master 读取数据
$ redis-cli -h 192.168.0.1 GET Hello
“Redis”
从 Slave 读取数据
$ redis-cli -h 192.168.0.2 GET Hello
“Redis”
8. 通过模拟相关故障,进行功能测试
将 Master 上的 Redis 进程杀死:
$ killall -9 redis-server
查看 Master 上的 Keepalived 日志
$ tail -f /var/log/keepalived-redis-state.log
[fault]
Thu Sep 27 08:29:01 CST 2012
同时 Slave 上的日志显示:
$ tail -f /var/log/keepalived-redis-state.log
[master]
2014 年 07 月 07 日 星期一 16:42:52 CST
Being master….
Run SLAVEOF cmd …
OK Already connected to specified master
Run SLAVEOF NO ONE cmd …
OK
然后我们可以发现,Slave 已经接管服务,并且担任 Master 的角色了。
$ redis-cli -h 192.168.1.253 INFO
$ redis-cli -h 192.168.1.5 INFO
role:master
然后我们恢复 Master 的 Redis 进程
$ /etc/init.d/redis start
查看 Master 上的 Keepalived 日志
$ tail -f /var/log/keepalived-redis-state.log
[master]
2014 年 07 月 07 日 星期一 16: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]
Fri Sep 28 14:16:37 CST 2012
Being slave….
Run SLAVEOF cmd …
OK
发现目前的 Master 已经再次恢复了 Master 的角色,故障切换以及自动恢复都成功了。
Redis 的详细介绍 :请点这里
Redis 的下载地址 :请点这里
一:环境介绍:
Master: 192.168.1.4
Slave: 192.168.1.5
Virtural IP Address (VIP): 192.168.1.253
二:设计思路:
当 Master 与 Slave 均运作正常时, Master 负责服务,Slave 负责 Standby;
当 Master 挂掉,Slave 正时, Slave 接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从 Slave 同步数据,同步数据之后关闭主从复制功能,恢复 Master 身份,于此同时 Slave 等待 Master 同步数据完成之后,恢复 Slave 身份。
然后依次循环。
需要注意的是,这样做需要在 Master 与 Slave 上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
三:安装配置前准备工作
1. 在主服务器 192.168.1.4 上面做下面操作
echo “192.168.1.4 test01” >> /etc/hosts
echo “192.168.1.5 test” >> /etc/hosts
2. 在从服务器 192.168.1.5 上面做下面操作
echo “192.168.1.4 test01” >> /etc/hosts
echo “192.168.1.5 test” >> /etc/hosts
四:主服务器配置 redis
1. 下载安装 redis 软件包
wget http://download.redis.io/releases/redis-2.8.12.tar.gztar xf redis-2.8.12.tar.gz
cd redis-2.8.12
make && make install
cd src/
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /usr/local/bin
cd /usr/local/bin
ls -ll
然后将源码中的 redis.conf 复制到 /etc/redis.conf
cp /root/redis-2.8.12/redis.conf /etc/redis.conf
修改 /etc/redis.conf 里面可以把 daemonize no 修改为 daemonize yes
就可以默认在后台执行 redis-server 了。
再制作一个 init.d 的启动脚本:
vim /etc/init.d/redis-server
#!/usr/bin/env bash
#
# redis start up the redis server daemon
#
# chkconfig: 345 99 99
# description: redis service in /etc/init.d/redis \
# chkconfig –add redis or chkconfig –list redis \
# service redis start or service redis stop
# processname: redis-server
# config: /etc/redis.conf
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF=”/etc/redis.conf”
#make sure some dir exist
if [! -d /var/lib/redis] ;then
mkdir -p /var/lib/redis
mkdir -p /var/log/redis
fi
case “$1” in
status)
ps -A|grep redis
;;
start)
if [-f $PIDFILE]
then
echo “$PIDFILE exists, process is already running or crashed”
else
echo “Starting Redis server…”
$EXEC $CONF
fi
if [“$?”=”0”]
then
echo “Redis is running…”
fi
;;
stop)
if [! -f $PIDFILE]
then
echo “$PIDFILE does not exist, process is not running”
else
PID=$(cat $PIDFILE)
echo “Stopping …”
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [-x ${PIDFILE} ]
do
echo “Waiting for Redis to shutdown …”
sleep 1
done
echo “Redis stopped”
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo “Usage: /etc/init.d/redis {start|stop|restart|force-reload}” >&2
exit 1
esac
chmod o+x /etc/init.d/redis-server
chkconfig –add redis-server
service redis-server start
————————————– 分割线 ————————————–
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
————————————– 分割线 ————————————–
五:从发服务器配置 redis
从服务器,配置一样,只不过 修改 /etc/redis.conf 中
slaveof <masterip> <masterport> 修改为
slaveof 192.168.1.4 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 hello world2
# 从服务器
redis-cli -p 6379 get hello
“world2”
redis-cli -p 6379 set hello world
(error) READONLY You can’t write against a read only slave.
成功配置主从 redis 服务器,由于配置中有一条从服务器是只读的,所以从服务器没法设置数据,只可以读取数据。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-07/104552p2.htm