百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> CentOS中Redis+Keepalive高可用搭建实例
分享文章到:

CentOS中Redis+Keepalive高可用搭建实例

发布时间:01/15 来源: 浏览: 关键词:
Centos中配置Redis+Keepalive高可用的方法比较复杂了,下面我就把整理过程给各位分享一下,小编也是参考此文章来配置的哦。

Master ip: 192.168.240.78
Backup ip: 192.168.240.79
Virtual ip: 192.168.240.89
Slave ip: 192.168.240.80
Slave2 ip: 192.168.240.81
实现的功能:
1.当Master与Slave均运作正常时,Master负责写,Backup负责热备,Slave负责读
2.当Master挂掉,Backup正常时,Backup接管服务,同时关闭主从复制功能
3.Slave关闭写入磁盘,减少IO负载

一、安装keepalived(backup也安装)

 代码如下
#################################    1.安装兼容包  ###########################
yum -y install openssl openssl-devel ipvsadm
################################  2.下载并安装keepalived  ####################
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-12.7 && make && make install
###############################3.redis_master keepalived配置##################
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
chkconfig --add keepalived
vi /etc/keepalived/keepalived.conf #redis master配置
Configuration File for keepalived
global_defs {
   notification_email {
     zhengxiaofeiccc@126.com
   }
   notification_email_from zhengxiaofeiccc@126.com
   smtp_server smtp.126.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100  #redis_backup 改为90
    advert_int 1
    nopreempt  #不抢占ip,只在master上设置
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.240.89
    }
}
######################4.启动keepalived,并查看###########################################
service keepalived start
[root@redis_master ~]# ip a|grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
    inet 192.168.240.78/24 brd 192.168.240.255 scope global eth0
    inet 192.168.240.89/32 scope global eth0
inet6 fe80::250:56ff:fe98:6a56/64 scope link

 

二、安装redis(每台都安装)

 代码如下
#####################1.下载并安装redis##################################################
wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz
tar zxvf redis-2.6.14.tar.gz
cd redis-2.6.14
make && make install
mkdir -p /etc/redis/
#####################2.编写redis启动脚本################################################
vi /etc/init.d/redis

 

启动脚本

 代码如下
#!/bin/sh
#
# redis - this script starts and stops the redis-server daemon
#
# chkconfig:   - 85 15
# description:  Redis is a persistent key-value database
# processname: redis-server
# config:      /etc/redis/6501.conf
# config:      /etc/sysconfig/redis
# pidfile:     /var/run/redis.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
redis="/usr/local/bin/redis-server"
prog=$(basename $redis)
REDIS_CONF_FILE="/etc/redis/6501.conf"
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -x $redis ] || exit 5
[ -f $REDIS_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $redis $REDIS_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $redis -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2


 

配置Redis

 代码如下

vi /etc/redis/6501.conf  (redis_master )
daemonize yes   #启用守护进程
port 6501       #监听的端口号
timeout 0       #当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
tcp-keepalive 60 #表示将周期性使用SO_KEEPALIVE检测客户端是否还处于健康状态,单位秒
loglevel notice  #指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning
logfile /var/log/redis_6501.log #指定日志路径
databases 8  #设置数据库的数量
save 900 1  #表示900秒(15分钟)内有1个更改,保存数据到磁盘
save 300 10  #300秒(5分钟)内有10个更改
save 60 10000  #60秒内有10000个更改
# slaveof 192.168.240.78 6501  这行在redis_backup 上面添加
stop-writes-on-bgsave-error yes #当持久化出现错误之后,是否继续提供写服务
rdbcompression yes  #在进行镜像备份时,是否进行压缩
rdbchecksum yes  #读取和写入的时候是否支持CRC64校检
dbfilename dump.rdb  #指定本地数据库文件名,默认值为dump.rdb
dir /var/lib/redis/6501  #指定本地数据库存放目录
slave-serve-stale-data yes #当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”
slave-read-only yes #是否允许slave服务器节点只提供读服务
repl-disable-tcp-nodelay no #指定向slave同步数据时,是否禁用socket的NO_DELAY选 项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。
slave-priority 100 #指定slave优先级
appendonly yes  #开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。默认是不开启的。
appendfilename appendonly.aof  #默认为appendonly.aof
appendfsync everysec #设置aof的同步频率,有三种选择always、everysec、no,默认是everysec表示每秒同步一次
no-appendfsync-on-rewrite no #指定是否在后台aof文件rewrite期间调用fsync,默认为no
auto-aof-rewrite-percentage 100 #指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次afo文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite
auto-aof-rewrite-min-size 64mb  #指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes  #aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数
########################4.配置redis_slave (两台配置一样)#################################
vi /etc/redis/6501.conf
daemonize yes
pidfile /var/run/redis_6501.pid
port 6501
timeout 0
tcp-keepalive 60
loglevel notice
logfile /var/log/redis_6501.log
databases 8
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis/6501
slaveof 192.168.240.89 6501
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
maxclients 20000
appendonly no #slave不写入到磁盘
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

#####################5.编写redis监控脚本 redis_master##############################
vi check_Redis.sh
#!/bin/sh
while :
do
  redis-cli -p 6501 info &> /dev/null
  if [ $? -ne 0 ] ;then
     sleep 2
     redis-cli -p 6501 info &> /dev/null
     if [ $? -ne 0 ] ;then
        service keepalived stop
     fi
  fi
  sleep 10
done
nohup check_Redis.sh &  #后台运行
#####################6.编写redis_backup 监控脚本 #####################################
# vi check_Redis.sh
#!/bin/sh
while :
do
  redis-cli -p 6501 info &> /dev/null
  if [ $? -ne 0 ] ;then
     sleep 2
     redis-cli -p 6501 info &> /dev/null
     if [ $? -ne 0 ] ;then
        service keepalived stop
     fi
  else
     ip a|grep 192.168.240.89
     if [ $? -eq 0 ] ;then
        grep “^slaveof” /etc/redis/6501.conf
        If [ $? -eq 0 ]; then
          sed -i 's/^slaveof/#&/' /etc/redis/6501.conf
          service redis stop
          sleep 1
          service redis start
        fi
     fi
  fi
  sleep 10
done
nohup check_Redis.sh & #后台运行

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有9人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板