Redis启动多端口、运行多实例
分类: redis Linux 学习2013-04-27 11:38 2675人阅读 评论(0) 收藏 举报
Redis多端口启动存储配置
默认Redis程序安装在/usr/local/redis目录下;
配置文件:/usr/local/redis/redis.conf,该配置文件中配置的端口为默认端口:6379; Redis的启动命令路径:/usr/local/bin/redis-server。
可以指定端口启动多个Redis进程。
#/usr/local/bin/redis-server --port 6380 & #启动6380端口的redis实例。
====================以下每个进程对应一个配置文件(转载)
===================================================
需要启动多个Redis实例:
一台Redis服务器,分成多个节点,每个节点分配一个端口(6380,6381…),默认端口是6379。
每个节点对应一个Redis配置文件,如: redis6380.conf、redis6381.conf #cp redis.confredis6380.conf
#vi redis6380.conf
pidfile : pidfile/var/run/redis/redis_6380.pid
port 6380
logfile : logfile/var/log/redis/redis_6380.log
rdbfile : dbfilenamedump_6380.rdb
(其他配置文件类似修改)
启动多个redis实例:
#redis-server/usr/local/redis/redis6380.conf
#redis-server/usr/local/redis/redis6381.conf
补充说明:
Redis数据存储
redis 的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates:在指定时间内,达到多少次更新操作时,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
appendonly yes/no:是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。
因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsyncno/always/everysec:no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
第二篇:通过Keepalived实现Redis Failover自动故障切换功能 多端口
通过Keepalived实现Redis Failover自动故障切换功能(多端口)
设计思路:
初始四个端口redis 主和 redis从 正常同步;
redis主keepalived 启动,执行redis_master.sh脚本,vip在自己身上;
redis 从keepalived 启动,执行redis_slave.sh脚本;
redis主服务关闭,则redis主执行redis_fault.sh脚本, vip落在redis 从上,redis从执行redis-_master.sh脚本,变成主;
redis主服务开启,则redis主执行redis_slave.sh脚本变成从,vip还在redis 从上,还是主; redis从服务关闭,则redis从执行redis_fault.sh脚本, vip落在redis主上,redis主执行redis-_master.sh脚本,变成主;
redis从服务开启,则redis从执行redis_slave.sh脚本变成从, vip还在redis主上,redis主继续做主,此时为redis初试主从状态;
keepalived 主上关闭,则redis主执行redis_stop.sh,redis 从执行redis_master.sh脚本,vip在redis 从身上;
keepalived 主上恢复,则redis主执行redis_master.sh,redis 从执行redis_slave.sh脚本,vip在redis 主身上;
keepalived 从上关闭,则redis从执行redis_stop.sh,redis 主无变化,vip在redis 主身上; keepalived 从上恢复,则redis从执行redis_slave.sh,redis 主无变化,vip在redis 主身上;
环境:
Master:
192.168.10.40
192.168.10.40
192.168.10.40
192.168.10.40
Slave:
192.168.10.41
192.168.10.41
192.168.10.41
192.168.10.41
192.168.10.49
6001 6002 6003 6004 redis redis redis redis 6001 6002 6003 6004 vip redis-slave redis-slave redis-slave redis-slave
注意:
Redis Master 和slave的四个文件要修改
Master:
redis6001.conf
举例:
[root@redis-1 redis]# egrep -v "^$|#" /usr/local/redis/redis6001.conf |grep '6001' pidfile /usr/local/redis/redis6001.pid
port 6001
logfile /usr/local/redis/var/redis6001.log
dbfilename dump6001.rdb
vm-swap-file /tmp/redis6001.swap
redis6002.conf
redis6003.conf
redis6004.conf
slave:
redis6001.conf
举例:
[root@redis-2 redis]# egrep -v "^$|#" /usr/local/redis/redis6001.conf |grep '6001' pidfile /usr/local/redis/redis6001.pid
port 6001
logfile /usr/local/redis/var/redis6001.log
dbfilename dump6001.rdb
slaveof 192.168.10.40 6001
vm-swap-file /tmp/redis6001.swap
redis6002.conf
redis6003.conf
redis6004.conf
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ keepalived master和backup的配置文件
master:
[root@redis-1 scripts]# cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
yunwei@xlhtol.com
}
notification_email_from keepalived@message2 router_id message2
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh" interval 1
}
vrrp_instance mes_Redis {
state MASTER
interface em1
garp_master_delay 10
smtp_alert
virtual_router_id 3
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.49
}
track_script {
chk_redis
}
notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_slave.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }
slave:
[root@redis-2 scripts]# cat /etc/keepalived/keepalived.conf global_defs {
notification_email {
yunwei@xlhtol.com
}
notification_email_from keepalived@message2 router_id message2
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh" interval 1
}
vrrp_instance mes_Redis {
state BACKUP
interface em1
garp_master_delay 10
smtp_alert
virtual_router_id 3
priority 90
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.49
}
track_script {
chk_redis
}
notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_slave.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }
keepalived master和slave调用的五个文件
redis_check.sh
redis_fault.sh
redis_master.sh
redis_slave.sh
redis_stop.sh
master:
1.redis_check.sh:
[root@redis-1 scripts]# cat redis_check.sh
#!/bin/bash
ALIVE1=`/usr/local/bin/redis-cli -p 6001 PING`
ALIVE2=`/usr/local/bin/redis-cli -p 6002 PING`
ALIVE3=`/usr/local/bin/redis-cli -p 6003 PING`
ALIVE4=`/usr/local/bin/redis-cli -p 6004 PING`
if [ "$ALIVE1" == "PONG" -a "$ALIVE2" == "PONG" -a "$ALIVE3" == "PONG" -a "$ALIVE4" == "PONG" ]; then
echo $ALIVE1
exit 0
else
echo $ALIVE1
exit 1
fi
2.redis_fault.sh
[root@redis-1 scripts]# cat redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
3.redis_master.sh
[root@redis-1 scripts]# cat 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
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -p 6001 SLAVEOF 192.168.10.41 6001 >> $LOGFILE
$REDISCLI -p 6002 SLAVEOF 192.168.10.41 6002 >> $LOGFILE
$REDISCLI -p 6003 SLAVEOF 192.168.10.41 6003 >> $LOGFILE
$REDISCLI -p 6004 SLAVEOF 192.168.10.41 6004 >> $LOGFILE
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -p 6001 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6002 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6003 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6004 SLAVEOF NO ONE >> $LOGFILE
4.redis_slave.sh
[root@redis-1 scripts]# cat redis_slave.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
sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -p 6001 SLAVEOF 192.168.10.41 6001 >> $LOGFILE
$REDISCLI -p 6002 SLAVEOF 192.168.10.41 6002 >> $LOGFILE
$REDISCLI -p 6003 SLAVEOF 192.168.10.41 6003 >> $LOGFILE
$REDISCLI -p 6004 SLAVEOF 192.168.10.41 6004 >> $LOGFILE
5.redis_stop.sh
[root@redis-1 scripts]# cat redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
slave:
1.redis_check.sh
[root@redis-2 scripts]# cat redis_check.sh
#!/bin/bash
ALIVE1=`/usr/local/bin/redis-cli -p 6001 PING`
ALIVE2=`/usr/local/bin/redis-cli -p 6002 PING`
ALIVE3=`/usr/local/bin/redis-cli -p 6003 PING`
ALIVE4=`/usr/local/bin/redis-cli -p 6004 PING`
if [ "$ALIVE1" == "PONG" -a "$ALIVE2" == "PONG" -a "$ALIVE3" == "PONG" -a "$ALIVE4" == "PONG" ]; then
echo $ALIVE1
exit 0
else
echo $ALIVE1
exit 1
fi
2.redis_fault.sh
[root@redis-2 scripts]# cat redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
3.redis_master.sh
[root@redis-2 scripts]# cat 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 -p 6001 SLAVEOF 192.168.10.40 6001 >> $LOGFILE $REDISCLI -p 6002 SLAVEOF 192.168.10.40 6002 >> $LOGFILE $REDISCLI -p 6003 SLAVEOF 192.168.10.40 6003 >> $LOGFILE $REDISCLI -p 6004 SLAVEOF 192.168.10.40 6004 >> $LOGFILE sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -p 6001 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6002 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6003 SLAVEOF NO ONE >> $LOGFILE
$REDISCLI -p 6004 SLAVEOF NO ONE >> $LOGFILE
4.redis_slave.sh
[root@redis-2 scripts]# cat redis_slave.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 -p 6001 SLAVEOF 192.168.10.40 6001 >> $LOGFILE $REDISCLI -p 6002 SLAVEOF 192.168.10.40 6002 >> $LOGFILE $REDISCLI -p 6003 SLAVEOF 192.168.10.40 6003 >> $LOGFILE $REDISCLI -p 6004 SLAVEOF 192.168.10.40 6004 >> $LOGFILE
5.redis_stop.sh
[root@redis-2 scripts]# cat redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE