开发者社区> rqbarzitsudte> 正文

综合项目: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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18784 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27955 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13055 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22042 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15478 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20097 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14867 0
82
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载