综合项目:Keepalived+Redis+Haproxy 实现主从热备、负载均衡、秒级切换

简介: 综合项目:Keepalived+Redis+Haproxy 实现主从热备、负载均衡、秒级切换

Keepalived+Redis+Haproxy 群集



一、部署 Redis 群集


1.编译安装 Redis

1)创建群集目录

2)编辑配置文件

3)复制配置文件到每个实例

4)启动 Redis 实例

2.配置 Ruby 环境

1)安装 Ruby 工具

2)使用脚本安装 Redis 群集

3)查看群集状态


二、部署 Keepalived 实现主从热备、秒级切换


1.主调度器配置

2.备调度器配置

3.编写 Haproxy 状态检测脚本

4.开启服务,验证 VIP


三、部署 Haproxy 实现负载均衡


1.编译安装 Haproxy

2.配置 Haproxy 主配置文件

3.创建自启动脚本

4.配置 Haproxy 日志管理


四、访问验证


准备工作:


image.png


image.png


一、部署 Redis 群集



1.编译安装 Redis


master slave 操作一致


[root@master ~]# ls
anaconda-ks.cfg  redis-3.2.9.tar.gz
[root@master ~]# tar zxf redis-3.2.9.tar.gz  -C /usr/src
[root@master ~]# cd /usr/src/redis-3.2.9/
[root@master redis-3.2.9]# make && make install
[root@master redis-3.2.9]# cd utils/
[root@master utils]# ./install_server.sh
依次回车即可


image.png


1)创建群集目录


master 上操作


[root@master ~]# /etc/init.d/redis_6379 stop
[root@master ~]# mkdir -p /redis_cluster/{6001..6003}


image.png


slave 上操作


[root@slave ~]# /etc/init.d/redis_6379 stop
[root@slave ~]# mkdir -p /redis_cluster/{6004..6006}


image.png


2)编辑配置文件


master 和 slave 不同之处在于监听地址不同


[root@master ~]# vim redis.conf
bind 192.168.1.1    #slave 需要将 IP 地址改为 192.168.1.2
protected-mode yes
port 6001
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /redis_cluster/redis_6001.pid
loglevel notice
logfile /redis_cluster/6001/redis_6001.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis_cluster/6001
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec


3)复制配置文件到每个实例


master 上操作


[root@master ~]# cp redis.conf /redis_cluster/6001
[root@master ~]# cp redis.conf /redis_cluster/6002
[root@master ~]# cp redis.conf /redis_cluster/6003
[root@master ~]# sed -i 's/6001/6002/g' /redis_cluster/6002/redis.conf
[root@master ~]# sed -i 's/6001/6003/g' /redis_cluster/6003/redis.conf


image.png


slave 上操作


[root@slave ~]# cp redis.conf /redis_cluster/6004
[root@slave ~]# cp redis.conf /redis_cluster/6005
[root@slave ~]# cp redis.conf /redis_cluster/6006
[root@slave ~]# sed -i 's/6001/6004/g' /redis_cluster/6004/redis.conf
[root@slave ~]# sed -i 's/6001/6005/g' /redis_cluster/6005/redis.conf
[root@slave ~]# sed -i 's/6001/6006/g' /redis_cluster/6006/redis.conf


image.png


4)启动 Redis 实例


master 上操作


[root@master ~]# redis-server /redis_cluster/6001/redis.conf
[root@master ~]# redis-server /redis_cluster/6002/redis.conf
[root@master ~]# redis-server /redis_cluster/6003/redis.conf


image.png


slave 上操作


[root@slave ~]# redis-server /redis_cluster/6004/redis.conf
[root@slave ~]# redis-server /redis_cluster/6005/redis.conf
[root@slave ~]# redis-server /redis_cluster/6006/redis.conf


image.png


查看 Redis 的进程和端口


[root@master ~]# ps -ef | grep redis | grep cluster
[root@master ~]# netstat -anpt | grep redis


image.png


image.png


2.配置 Ruby 环境


1)安装 Ruby 工具


master 上操作


[root@master ~]# yum -y install ruby rubygems
上传软件 redis-3.2.0.gem
[root@master ~]# gem install redis --version 3.2.0


2)使用脚本安装 Redis 群集


[root@master ~]# cd /usr/src/redis-3.2.9/src/
[root@master src]# ./redis-trib.rb create --replicas 1 \
192.168.1.1:6001 192.168.1.1:6002 192.168.1.1:6003 \
192.168.1.2:6004 192.168.1.2:6005 192.168.1.2:6006
..........
Can I set the above configuration? (type 'yes' to accept): yes
..........


3)查看群集状态


[root@master ~]# redis-cli -h 192.168.1.1 -p 6001 -c
192.168.1.1:6001> set xingming zhangsan
OK
192.168.1.1:6001> exit
[root@master ~]# 
[root@master ~]# redis-cli -h 192.168.1.2 -p 6004 -c
192.168.1.2:6004> get xingming
-> Redirected to slot [1657] located at 192.168.1.1:6001
"zhangsan"
192.168.1.1:6001> exit


image.png


二、部署 Keepalived 实现主从热备、秒级切换



1.主调度器配置


[root@haproxy1 ~]# yum -y install keepalived
[root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
        router_id Haproxy_1
}
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}
vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
            auth_pass 123456
        }
      track_script {
                chk_haproxy
        }
      virtual_ipaddress {
            192.168.1.188/24
        }
}


2.备调度器配置


[root@haproxy2 ~]# yum -y install keepalived
[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
        router_id Haproxy_2
}
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}
vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
                auth_type PASS
            auth_pass 123456
        }
      track_script {
                chk_haproxy
        }
      virtual_ipaddress {
            192.168.1.188/24
        }
}


3.编写 Haproxy 状态检测脚本


haproxy1 haproxy2 操作一致


[root@haproxy1 ~]# vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
ps aux | grep haproxy
if [ $? -ne 0 ]
then
/usr/bin/systemctl stop keepalived
fi
[root@haproxy1 ~]# chmod +x /etc/keepalived/check_haproxy.sh


4.开启服务,验证 VIP


[root@haproxy1 ~]# systemctl start keepalived
[root@haproxy1 ~]# ip a


image.png


三、部署 Haproxy 实现负载均衡



haproxy1 haproxy2操作一致


1.编译安装 Haproxy


挂光盘,并配置yum源


[root@haproxy1 ~]# yum -y install pcre-devel bzip2-devel            #安装依赖包
[root@haproxy1 ~]# ls
anaconda-ks.cfg  haproxy-1.5.19.tar.gz
[root@haproxy1 ~]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/         #解压到/usr/src/目录
[root@haproxy1 ~]# cd /usr/src/haproxy-1.5.19/
[root@haproxy1 haproxy-1.5.19]# make TARGET=linux26 && make install   #安装 64 位系统


image.png


2.配置 Haproxy 主配置文件


[root@haproxy1 ~]# mkdir /etc/haproxy             #创建配置文件目录
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
global
        log /dev/log    local0 info
        log /dev/log    local1 notice
        maxconn 4096
        uid 99
        gid 99
        daemon
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull     
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
listen  stats
      bind                    *:8888
        stats                   enable
      stats                   hide-version
      stats uri               /haproxystats
      stats realm             Haproxy\ stats
      stats auth              admin:admin
      stats admin             if TRUE
listen  redis
        bind *:6379
        mode tcp
        balance roundrobin
        server redis1 192.168.1.1:6001 check inter 2000 fall 3
        server redis2 192.168.1.1:6002 check inter 2000 fall 3
        server redis3 192.168.1.1:6003 check inter 2000 fall 3
        server redis4 192.168.1.2:6004 check inter 2000 fall 3
        server redis5 192.168.1.2:6005 check inter 2000 fall 3
        server redis6 192.168.1.2:6006 check inter 2000 fall 3


3.创建自启动脚本


[root@haproxy1 ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy1 ~]# chmod +x /etc/init.d/haproxy                 #添加可执行权限
[root@haproxy1 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/           #软链接,优化执行路径
[root@haproxy1 ~]# /etc/init.d/haproxy restart                  #启动 haproxy


image.png


4.配置 Haproxy 日志管理


[root@Haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~
[root@haproxy1 ~]# systemctl restart rsyslog
[root@haproxy1 ~]# /etc/init.d/haproxy restart


image.png



四、访问验证



使用浏览器访问:http://192.168.1.188:8888/haproxystats


image.png


image.png

相关文章
|
10月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
937 25
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
243 4
|
缓存 NoSQL Redis
Redis主从架构
当看到图示中红色标记的,就代表从节点挂载成功了。
241 0
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
1049 9
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
1068 3
|
NoSQL Java 关系型数据库
考考你Redis主从,就知道有没深入Redis
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天继续给大家带来新的一篇Java进阶指南。如果是单机版的数据库,像MySQL、Redis,看起来实现并不复杂。只要支持保存一条数据,同时要能够查询出来。但如果是多机版的数据库呢,各个节点的配合联调是比较复杂的过程,看起来就不是那么简单喽。要考你对Redis深不深入理解,问问Redis多机版相关的问题就知道了。我们今天就来指南下Redis主从架构。
248 1
考考你Redis主从,就知道有没深入Redis
|
负载均衡 算法 前端开发
HAProxy 和负载均衡概念简介
HAProxy 和负载均衡概念简介
356 3
|
监控 NoSQL Ubuntu

相关实验场景

更多