Haproxy+Heartbeat 高可用集群方案操作记录

之前详细介绍了haproxy的基础知识点, 下面记录下Haproxy+Heartbeat高可用web集群方案实现过程, 以加深理解.

架构草图如下:

1) 基本环境准备 (centos6.9系统)

172.16.60.208(eth0)    HA主节点(ha-master)         haproxy,heartbeat
172.16.60.207(eth0)    HA备节点(ha-slave)          haproxy,heartbeat
172.16.60.229             VIP地址
172.16.60.204(eth0)    后端节点1(rs-204)           nginx/tomcat
172.16.60.205(eth0)    后端节点2(rs-205)           nginx/tomcat

1) 关闭防火墙和selinux (四台节点机都操作)
[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# setenforce 0
[[email protected] ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

2) 设置主机名和绑定hosts (两台HA节点机器都操作)
主节点操作
[[email protected] ~]# hostname ha-master
[[email protected] ~]# vim /etc/sysconfig/network
HOSTNAME=ha-master
[[email protected] ~]# vim /etc/hosts
172.16.60.208 ha-master
172.16.60.207 ha-slave

备节点操作
[[email protected] ~]# hostname ha-slave
[[email protected] ~]# vim /etc/sysconfig/network
HOSTNAME=ha-slave
[[email protected] ~]# vim /etc/hosts
172.16.60.208 ha-master
172.16.60.207 ha-slave

2) 安装后端两个realserver节点的web环境 (即172.16.60.204/205两台机器都要安装nginx)

采用yum方式在两台realserver节点上安装nginx (先安装nginx的yum源)
[[email protected] ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
[[email protected] ~]# yum install -y nginx

rs-204的nginx配置
[[email protected] ~]# cd /etc/nginx/conf.d/
[[email protected] conf.d]# cat default.conf
[[email protected] conf.d]# >/usr/share/nginx/html/index.html
[[email protected] conf.d]# vim /usr/share/nginx/html/index.html
this is test page of realserver01:172.16.60.204

[[email protected] conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [  OK  ]
[[email protected] conf.d]# lsof -i:80
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   31944  root    6u  IPv4  91208      0t0  TCP *:http (LISTEN)
nginx   31945 nginx    6u  IPv4  91208      0t0  TCP *:http (LISTEN)

rs-205的nginx配置
[[email protected] src]# cd /etc/nginx/conf.d/
[[email protected] conf.d]# cat default.conf
[[email protected] conf.d]# >/usr/share/nginx/html/index.html
[[email protected] conf.d]# vim /usr/share/nginx/html/index.html
this is test page of realserver02:172.16.60.205

[[email protected] conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [  OK  ]
[[email protected] conf.d]# lsof -i:80
COMMAND   PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
nginx   20839  root    6u  IPv4 289527645      0t0  TCP *:http (LISTEN)
nginx   20840 nginx    6u  IPv4 289527645      0t0  TCP *:http (LISTEN)

访问http://172.16.60.204/, 访问结果为"this is test page of realserver01:172.16.60.204"
访问http://172.16.60.205/, 访问结果为"this is test page of realserver02:172.16.60.205"

3) 安装配置Haproxy (两台HA节点机进行同样操作)

1) 先安装haproxy
[[email protected] ~]# yum install gcc gcc-c++ make openssl-devel kernel-devel
[[email protected] ~]# cd /usr/local/src/                              #下载haproxy软件到/usr/local/src目录下
[[email protected] src]# ls haproxy-1.8.12.tar.gz
haproxy-1.8.12.tar.gz
[[email protected] src]# tar -zvxf haproxy-1.8.12.tar.gz
[[email protected] src]# cd haproxy-1.8.12
[[email protected] haproxy-1.8.12]# make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy USE_OPENSSL=1 ADDLIB=-lz

参数说明:
TARGET=linux26      #使用 uname -r 查看内核,如:2.6.32-642.el6.x86_64,此时该参数就为linux26
CPU=x86_64          #使用 uname -r 查看系统信息,如 x86_64 GNU/Linux,此时该参数就为 x86_64
PREFIX=/usr/local/haprpxy      #haprpxy 安装路径

[[email protected] haproxy-1.8.12]# ldd haproxy | grep ssl
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00000031d0400000)

[[email protected] haproxy-1.8.12]# make install PREFIX=/usr/local/haproxy

[[email protected] haproxy-1.8.12]# mkdir -p /usr/local/haproxy/conf
[[email protected] haproxy-1.8.12]# mkdir -p /etc/haproxy
[[email protected] haproxy-1.8.12]# cp /usr/local/src/haproxy-1.8.12/examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
[[email protected] haproxy-1.8.12]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg
[[email protected] haproxy-1.8.12]# cp -r /usr/local/src/haproxy-1.8.12/examples/errorfiles  /usr/local/haproxy/errorfiles
[[email protected] haproxy-1.8.12]# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles
[[email protected] haproxy-1.8.12]# mkdir -p /usr/local/haproxy/log
[[email protected] haproxy-1.8.12]# touch /usr/local/haproxy/log/haproxy.log
[[email protected] haproxy-1.8.12]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log
[[email protected] haproxy-1.8.12]# cp /usr/local/src/haproxy-1.8.12/examples/haproxy.init /etc/rc.d/init.d/haproxy
[[email protected] haproxy-1.8.12]# chmod +x /etc/rc.d/init.d/haproxy
[[email protected] haproxy-1.8.12]# chkconfig haproxy on
[[email protected] haproxy-1.8.12]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin

2) haroxy.cfg文件进行负载配置
[[email protected] haproxy-1.8.12]# cd /usr/local/haproxy/conf/
[[email protected] conf]# cp haproxy.cfg haproxy.cfg.bak
[[email protected] conf]# > haproxy.cfg
[[email protected] conf]# vim haproxy.cfg
global
   log 127.0.0.1 local3 info
   maxconn 65535
   chroot /usr/local/haproxy
   uid 99
   gid 99
   daemon                          

defaults
   log global
   mode http
   retries 3
   option redispatch
   stats uri /haproxy
   stats refresh 30s
   stats realm haproxy-status
   stats auth admin:dxInCtFianKtL]36
   stats hide-version
   maxconn 65535
   timeout connect 5000
   timeout client 50000
   timeout server 50000             

frontend http-in
   mode http
   maxconn 65535
   bind :80
   log global
   option httplog
   option httpclose
   acl is_01 hdr_beg(host) www.kevin.com
   use_backend web-server if is_01    

backend web-server
   mode http
   balance roundrobin
   cookie SERVERID insert indirect nocache
   option httpclose
   option forwardfor
   server web01 172.16.60.204:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
   server web02 172.16.60.205:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

3) 配置HAProxy日志
[[email protected] conf]# vim /etc/rsyslog.conf
.......
$ModLoad imudp                        #取消注释 ,这一行不注释,日志就不会写
$UDPServerRun 514                    #取消注释 ,这一行不注释,日志就不会写
.......
local3.*                                                /var/log/haproxy.log      #这一行必须要写,因为在haproxy.cfg里global全局定义好的日志级别

[[email protected] conf]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -m 0"           #接收远程服务器日志

重启syslog日志服务
[[email protected] conf]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                         [  OK  ]

4) 设置haproxy负载均衡的最大并发连接数
查看内核
[[email protected] conf]# sysctl -a | grep file
fs.file-nr = 992        0       386459
fs.file-max = 386459

查看应用层面的需求
[[email protected] conf]# cat /usr/local/haproxy/conf/haproxy.cfg
global                                                        #全局参数设置
   maxconn 65535                                      #设置最大连接数

更改系统层面
[[email protected] conf]# vim /etc/security/limits.conf                    #最后一行增加
*                -       nofile          65535

5) 重启两台HA机器的haproxy
[[email protected] conf]# /etc/init.d/haproxy start
Starting haproxy:                                          [  OK  ]

[[email protected] conf]# ps -ef|grep haproxy
nobody   13080     1  0 16:43 ?        00:00:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
root     13083 11940  0 16:43 pts/0    00:00:00 grep haproxy

[[email protected] conf]# lsof -i:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
haproxy 13080 nobody    4u  IPv4 428975      0t0  TCP *:http (LISTEN)

将www.kevin.com域名解析到两个HA节点上, 即172.16.60.208 和 172.16.60.207上
接着访问http://www.kevin.com/, 则发现访问结果是"this is test page of realserver01:172.16.60.204" , 不断刷新, 访问结果也是这个.
只有当172.16.60.204这个节点的nginx挂了, 访问结果才变成"this is test page of realserver02:172.16.60.205", 即请求转发到正常的realserver节点上.

从haproxy.cfg文件中可以看出, 虽然配置了"balance roundrobin"这个选项, 即客户端每一次访问, 都跳转到后端不同的服务器上. 但是并没有生效!
因为又配置了"cookie SERVERID insert indirect nocache", 即保持客户端session会话同步的配置, 所以客户端请求会一直转发到同一个realserver节点上,直至
这个节点发生故障才会转发到另外正常的节点上.

把"cookie SERVERID insert indirect nocache" 这个配置去掉或注释掉, 再次访问http://www.kevin.com/, 就会发现每刷新一次, 请求都会转发到不同的realserver
节点上, 即"balance roundrobin" 配置生效!

访问http://www.kevin.com/haproxy, 输入haproxy.cfg文件中配置的用户名和密码admin:dxInCtFianKtL]36, 即可打开haproxy监控页面

从上图可以看出, 此时监控的后端两个realserver节点的服务都是OK的(配置文件中定义的web01和web02此时都是绿色状态)。 现在尝试关闭rs-205的nginx服务, 刷新http://www.kevin.com/haproxy监控页面, 发现web02变成红色,即此时该节点服务是故障状态!然后重启rs-205的nginx服务,再次刷出监控页面, 发现web02就又恢复到正常的绿色状态了!

4) 安装配置Heartbeat (两台HA节点机进行同样操作)

原文地址:https://www.cnblogs.com/kevingrace/p/10206731.html

时间: 2024-07-29 00:44:52

Haproxy+Heartbeat 高可用集群方案操作记录的相关文章

LVS+Heartbeat 高可用集群方案操作记录

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能. Heartbeat的高可用集群采用的通信方式是udp协议和串口通信,而且heartbeat插件技术实现了集群间的串口.多播.广播和组播通信.它实现了HA 功能中的核心功能——心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的

ProxySQL Cluster 配置详解 以及 高可用集群方案部署记录(完结篇)

早期的ProxySQL若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是ProxySQl 从1.4.2版本后,ProxySQL支持原生的Cluster集群搭建,实例之间可以互通一些配置数据,大大简化了管理与维护操作. ProxySQL是一个非中心化代理,在拓扑中,建议将它部署在靠近应用程序服务器的位置处.ProxySQL节点可以很方便地扩展到上百个节点,因为它支持runtime修改配

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

Linux高可用集群方案之配置heartbeat v2基于crm+hb_gui接口,配置高可用httpd,mysql,lvs

本章主要配置heartbeat v2基于crm+hb_gui接口,配置高可用httpd,mysql,lvs. 如何安装heartbeat v2.httpd.nfs.配置心跳连接.ssh密钥通信.同步时间.添加名称解析.配置yum源等请参照: >> Linux高可用集群方案之配置heartbeat v2基于haresources配置文件的httpd高可用集群 http://ccschan.blog.51cto.com/11854461/1922966  ll  本文导航    · 前期准备及相关

Oracle的三种高可用集群方案

Oracle的三种高可用集群方案 主要有三种: 1. RAC RAC,  Real Application Clusters 多个Oracle服务器组成一个共享的Cache,而这些Oracle服务器共享一个基于网络的存储.这个系统可以容忍单机/或是多机失败. 不过系统内部的多个节点需要高速网络互连,基本上也就是要全部东西放在在一个机房内,或者说一个数据中心内.如果机房出故障,比如网络不通,那就坏了.所以仅仅用RAC还是满足不了一般互联网公司的重要业务的需要,重要业务需要多机房来容忍单个机房的事故

keepalived实现高可用集群方案

一.keepalived和VRRP协议介绍 keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务. VRRP协议

基于keepalived对HAproxy做高可用集群

一.Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式

keepalived + nginx 实现高可用集群方案

keepalived + nginx 实现高可用集群方案 一.使用场景介绍: nginx做负载均衡,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器挂点了,那么所有的服务也会跟着瘫痪 .keepalived+nginx,就能很好的解决这一问题. 二.原理介绍: Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故 障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用. Keepalived 以 VRRP

Linux高可用集群方案之配置heartbeat v2基于haresources配置文件的httpd高可用集群

本章主要配置heartbeat v2基于haresources配置文件的httpd高可用集群.  ll  本文导航    · 前期准备   · 安装heartbeat v2   · node1.node2主机安装httpd   · shared-nfs主机安装nfs   · 配置httpd高可用集群   · 客户端访问测试  ll  要求  完全掌握heartbeat v2基于haresources配置文件的httpd高可用服务.   前期准备  1.heartbeat服务主机规划 主机 接口