阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis服务搭建及使用Keepalived实现主从双机热备

426次阅读
没有评论

共计 11627 个字符,预计需要花费 30 分钟才能阅读完成。

1.  简述

本文档根据互联网上博客参考,并在测试环境搭建成功,记录测试环境中 Redis 缓存服务器的搭建过程及实现主从双机热备架构的过程。

2.  测试环境

系统:CentOS6.5

软件:redis-2.8.24.tar.gz  Keepalived v1.2.13

主 IP:192.168.3.3

从 IP:192.168.3.4

VIP:  192.168.3.5

3.  Redis 单机安装及配置

3.1    编译安装

A. 准备好 redis tar gz 放到 /tmp 目录

在线下载 wget  http://download.redis.io/releases/redis-2.8.24.tar.gz

B. 执行以下命令:

cd /tmp

tar -zxvf redis-2.8.24.tar.gz

cd redis-2.8.24

makeMALLOC=libc

make PREFIX=/usr/local/redis install

3.2    配置启动脚本 redis 和配置文件 redis.conf

3.2.1  启动脚本 redis

touch/etc/init.d/redis

#!/bin/sh

#chkconfig:2345 80 90

#

# Simple Redisinit.d script conceived to work on Linux systems

# as it doeSUSE of the /proc filesystem.

REDISPORT=6379

EXEC=/usr/local/redis/bin/redis-server 

CLIEXEC=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis.pid

CONF=”/etc/redis/redis.conf”

REDISPASSWORD=123456

case”$1″ in

    start)

        if [-f $PIDFILE]

        then

                echo “$PIDFILE exists,process is already running or crashed”

        else

                echo “Starting Redisserver…”

                $EXEC $CONF &

        fi

        ;;

    stop)

        if [! -f $PIDFILE]

        then

                echo “$PIDFILE does notexist, process is not running”

        else

                PID=$(cat $PIDFILE)

                echo “Stopping …”

                $CLIEXEC -p $REDISPORT -a$REDISPASSWORD shutdown

                while [-x /proc/${PID} ]

                do

                    echo “Waiting forRedis to shutdown …”

                    sleep 1

                done

                echo “Redis stopped”

        fi

        ;;

    *)

        echo “Please use start or stop asfirst argument”

        ;;

esac

3.2.2  配置文件 redis.conf

      mkdir/etc/redis/

      cp/tmp/redis-2.8.24/redis.conf /etc/redis/

     

      修改内容:

      daemonizeyes

      port6379

      bind0.0.0.0

      requirepass123456

     

3.2.3 开机启动及防火墙

添加开机启动

chkconfig –add redis

chkconfig redis on

chkconfig –list | grep redis

添加防火墙

/sbin/iptables -I INPUT -p tcp –dport 3306-j ACCEPT

service iptables restart

/etc/rc.d/init.d/iptables save

more /etc/sysconfig/iptables

将 Redis 的命令所在目录添加到系统参数 PATH 中

并将此添加到.bashrc

#vi /etc/profile

exportPATH=”$PATH:/usr/local/redis/bin”

启动服务

service redis start

查看服务启动情况:

[root@redis01 ~]# ps -ef | grep redis

root    18478 18465  0 06:28 pts/1    00:00:00 grep –color=auto redis

root    26404    1  0 Jan05 ?      00:04:40/usr/local/redis/bin/redis-server 0.0.0.0:6379

测试命令:

redis-cli -a 123456

127.0.0.1:6379> ping

PONG

证明安装配置完成。

4.  主从双机热备的实现

将 192.168.3.3 作为 master 将 192.168.3.4 作为 slave 并统一访问地址为 192.168.3.5;应用通过访问 192.168.3.5:6379 来访问 redis 缓存数据库。

实现主从双机热备,首先需要实现 Redis 的主从复制功能,然后使用 Keepalived 来实现系统的容灾,创建出 VIP,在 master 故障时能够自动切换到 slave 机器上,并实现双机热备的能力。

4.1    Redis 主从复制

Master 的 redis.conf 

slave-read-only no #因同时写入的只会有一个,此选项打开是为了防止 master -slave 数据不同步问题,我们此架构不存在 master slave 同时写入过程。所以我们将此选项关闭,为了当从 master 切换到 slave 后,应用也可以写入,不影响应用的正常使用。

Slave 的 redis.conf

slaveof 192.168.3.3 6379

masterauth 123456

slave-serve-stale-data yes

slave-read-only no

设置完成后,重启两台机器的 redis 服务。

验证主从复制是否正常:

终端登陆:

redis-cli -a 123456

info 输出:

master

[root@youlook-redis01 ~]# redis-cli -a123456

127.0.0.1:6379> info

# Server

redis_version:2.8.24

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:24d3bdda0cc05ee1

redis_mode:standalone

os:Linux 2.6.32-642.6.2.el6.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

gcc_version:4.4.7

process_id:23070

run_id:f0d358edd0d6aad82171e4c16fae2c522ba62bd0

tcp_port:6379

uptime_in_seconds:3815852

uptime_in_days:44

hz:10

lru_clock:7551606

config_file:/etc/redis/redis.conf

# Clients

connected_clients:13

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:29171896

used_memory_human:27.82M

used_memory_rss:116658176

used_memory_peak:518246264

used_memory_peak_human:494.24M

used_memory_lua:36864

mem_fragmentation_ratio:4.00

mem_allocator:libc

# Persistence

loading:0

rdb_changes_since_last_save:6

rdb_bgsave_in_progress:0

rdb_last_save_time:1483946348

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

aof_enabled:0

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:-1

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

# Stats

total_connections_received:5481499

total_commands_processed:85348127

instantaneous_ops_per_sec:3

total_net_input_bytes:7877840209

total_net_output_bytes:28361548248

instantaneous_input_kbps:0.09

instantaneous_output_kbps:0.02

rejected_connections:2

sync_full:2

sync_partial_ok:0

sync_partial_err:1

expired_keys:93876

evicted_keys:0

keyspace_hits:33685304

keyspace_misses:2473872

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:3264

# Replication

role:master

connected_slaves:1

slave0:ip=192.168.3.4,port=6379,state=online,offset=4237822823,lag=1

master_repl_offset:4237822823

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:4236774248

repl_backlog_histlen:1048576

# CPU

used_cpu_sys:5370.02

used_cpu_user:3799.63

used_cpu_sys_children:320.30

used_cpu_user_children:1659.35

# Keyspace

db0:keys=7124,expires=47,avg_ttl=128544654

slave 端的 info 信息:

[root@youlook-redis02 ~]# redis-cli -a123456

127.0.0.1:6379> info

# Server

redis_version:2.8.24

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:aa10e3525eecea17

redis_mode:standalone

os:Linux 2.6.32-642.6.2.el6.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

gcc_version:4.4.7

process_id:22720

run_id:5e61741d52bb82def68c30cc2df322f34135798b

tcp_port:6379

uptime_in_seconds:3816078

uptime_in_days:44

hz:10

lru_clock:7551784

config_file:/etc/redis/redis.conf

# Clients

connected_clients:3

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:27903728

used_memory_human:26.61M

used_memory_rss:58122240

used_memory_peak:41421576

used_memory_peak_human:39.50M

used_memory_lua:36864

mem_fragmentation_ratio:2.08

mem_allocator:libc

# Persistence

loading:0

rdb_changes_since_last_save:1689

rdb_bgsave_in_progress:0

rdb_last_save_time:1483946706

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

aof_enabled:0

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:-1

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

# Stats

total_connections_received:1907598

total_commands_processed:21038297

instantaneous_ops_per_sec:1

total_net_input_bytes:4343963223

total_net_output_bytes:188755136

instantaneous_input_kbps:0.02

instantaneous_output_kbps:0.06

rejected_connections:0

sync_full:0

sync_partial_ok:0

sync_partial_err:0

expired_keys:0

evicted_keys:0

keyspace_hits:90412

keyspace_misses:11

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:438

# Replication

role:slave

master_host:192.168.3.3

master_port:6379

master_link_status:up

master_last_io_seconds_ago:8

master_sync_in_progress:0

slave_repl_offset:4238304449

slave_priority:100

slave_read_only:0

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

# CPU

used_cpu_sys:3004.34

used_cpu_user:1546.73

used_cpu_sys_children:276.15

used_cpu_user_children:1587.06

# Keyspace

db0:keys=7124,expires=47,avg_ttl=184336271

4.2    KeepAlived 实现双机热备

使用 Keepalived 实现 VIP,并且通过 notify_notify_master、notify_backup、notify_fault、notify_stop 来实现容灾。

4.2.1 安装 Keepalived

yum -y install keepalived

4.2.2  配置 Keepalived.conf

在此贴出 master 和 slave 的 Keepalived.conf 配置文件以及相关的依赖脚本。

Master

/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

  }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id redis01

}

vrrp_script chk_redis {

  script “/etc/keepalived/scripts/redis_check.sh”    ### 监控脚本 

  interval 2                                          ### 监控时间

}

vrrp_instance VI_1 {

  state MASTER

  interface eth0

  virtual_router_id 51

  priority 100

  advert_int 1

  authentication {

      auth_type PASS

      auth_pass 1111

    }

  track_script {

      chk_redis            ### 执行上面定义的 chk_redis 

    }

  virtual_ipaddress {

      192.168.3.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

}

进入 /etc/keepalived/scripts/ 查看依赖脚本

redis_backup.sh  redis_check.sh  redis_fault.sh  redis_master.sh  redis_stop.sh

redis_master.sh

#!/bin/bash

REDISCLI=”/usr/local/redis/bin/redis-cli-a 123456″

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.3.4 6379 >>$LOGFILE  2>&1

sleep 10 #延迟 10 秒以后待数据同步完成后再取消同步状态 

echo “Run SLAVEOF NO ONE cmd …”>> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE2>&1

redis_backup.sh

#!/bin/bash

REDISCLI=”/usr/local/redis/bin/redis-cli-a 123456″

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.3.4 6379 >>$LOGFILE  2>&1

redis_fault.sh

#!/bin/bash

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

echo “[fault]” >> $LOGFILE

date >> $LOGFILE

redis_stop.sh

#!/bin/bash

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

echo “[stop]” >> $LOGFILE

date >> $LOGFILE

redis_check.sh

#!/bin/bash

ALIVE=`/usr/local/redis/bin/redis-cli -a123456 PING` 

if [“$ALIVE” == “PONG”]; then

echo $ALIVE

exit 0

else

echo $ALIVE

exit 1

fi

Slave

/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

  }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id redis02

}

vrrp_script chk_redis {

  script “/etc/keepalived/scripts/redis_check.sh”    ### 监控脚本 

  interval 2                  ### 监控时间

}

vrrp_instance VI_1 {

  state BACKUP

  interface eth0

  virtual_router_id 51

  priority 10

  advert_int 1

  authentication {

      auth_type PASS

      auth_pass 1111

    }

  track_script {

      chk_redis        ### 执行上面定义的 chk_redis 

    }

  virtual_ipaddress {

      192.168.3.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

}

redis_master.sh

#!/bin/bash

REDISCLI=”/usr/local/redis/bin/redis-cli-a 123456″

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.3.3 6379 >>$LOGFILE  2>&1

sleep 10 #延迟 10 秒以后待数据同步完成后再取消同步状态 

echo “Run SLAVEOF NO ONE cmd …”>> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE2>&1

redis_backup.sh

#!/bin/bash

REDISCLI=”/usr/local/redis/bin/redis-cli-a 123456″

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.3.3 6379 >>$LOGFILE  2>&1

redis_fault.sh

#!/bin/bash

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

echo “[fault]” >> $LOGFILE

date >> $LOGFILE

redis_stop.sh

#!/bin/bash

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

echo “[stop]” >> $LOGFILE

date >> $LOGFILE

redis_check.sh

#!/bin/bash

ALIVE=`/usr/local/redis/bin/redis-cli -a123456 PING` 

if [“$ALIVE” == “PONG”]; then

echo $ALIVE

exit 0

else

echo $ALIVE

exit 1

fi

4.2.3 开机启动及防火墙

添加开机启动

chkconfig keepalived on

添加防火墙

编辑 /etc/sysconfig/iptables

添加:

-A INPUT -s 192.168.3.0/24 -p vrrp -jACCEPT

或者

-A INPUT -p vrrp -j ACCEPT

service iptables restart

/etc/rc.d/init.d/iptables save

more /etc/sysconfig/iptables

启动服务

service keepalived start

测试服务是否正常

从另外服务器 ping 192.168.3.5 是否联通

测试 redis 是否正常
redis-cli -h 192.168.3.5 -p 6379 -a 123456 info

至此 Redis 服务器搭建及主从双机热备架构实现。

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 14.04 安装 Redis 与简单配置  http://www.linuxidc.com/Linux/2017-01/139075.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm

Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139793.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计11627字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7955373
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...