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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 综合项目: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

相关文章
|
7月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
289 11
|
12月前
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1663 4
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
722 3
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
360 8
LVS+Keepalived 负载均衡
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
254 5
|
负载均衡 算法 前端开发
HAProxy 和负载均衡概念简介
HAProxy 和负载均衡概念简介
234 3
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
681 1
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
354 0
|
7月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
230 21

相关实验场景

更多