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


准备工作:

主机名操作系统IP地址担任角色
masterCentOS7192.168.1.1Redis-主
slave192.168.1.2Redis-从
haproxy1192.168.1.3Keepalived-主,Haproxy
haproxy2192.168.1.4Keepalived-从,Haproxy

一、部署 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
依次回车即可

在这里插入图片描述

1)创建群集目录

master 上操作

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

在这里插入图片描述
slave 上操作

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

在这里插入图片描述

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

在这里插入图片描述
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

在这里插入图片描述

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

在这里插入图片描述
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

在这里插入图片描述
查看 Redis 的进程和端口

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

二、部署 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

在这里插入图片描述

三、部署 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 位系统

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

四、访问验证

使用浏览器访问:http://192.168.1.188:8888/haproxystats
在这里插入图片描述
在这里插入图片描述

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿许浪尽天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值