logo资料库

Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)-完整部署记录(个人珍藏版).doc

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
Haproxy+Keepalived 的负载均衡和高可用环境的部署过程,有主从和主主两种模式: 主从模式:一个 vip,vip 在 master 机器上,当 master 机器出现故障后,vip 漂移到 slave 机器上,slave 变 为 master 提供服务。 主主模式:两个 vip,两台机器都设置 vip,当其中一台机器出现故障后,它的 vip 就漂移到另一台机器上(即另一 台机器有两个 vip),当故障机器恢复后,再将 vip 重新漂移过来。 各自作用: 1)Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除, 当 web 服务器工作正常 后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的 只是修复故障的 web 服务器。 2)HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的 一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些 站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它 的运行模式使得它可以很简单安全的整 合进您当前的架构中, 同时 可以保护你的 web 服务器不被暴露到网络上。 一、Haproxy+Keepalived 主主架构部署记录 0)需求描述: 网站的域名之前都是放在机房的两台服务器上,前面做 CDN 加速,CDN 节点会同步缓存到网站数据,用户访问网站, 流量压力都在前面的 CDN 设备上。 后续网站服务器被攻击,又在 CDN 前面加了一个上层,即又多加一层缓存,刚加这个上层的时候,流量回源会很大, 访问量也会减少,不过随着回源,访问量渐渐恢复。 后来为了安全考虑,计划做 Keepalivedd+Haproxy 负载均衡的高可用,部署好之后,可以将后端源站服务器的外网 ip 拿下,进来的请求通过 Haproxy 代理进来,出去的请求可以通过 squid 代理出去。 后端源站机器的 web 端口只需要对 Haproxy 机器开放即可,然后 CDN 解析那边将源站 ip 改为 Haproxy 服务器 ip 即可。 1)环境准备 Haproxy_Keepalived_Master VIP1 182.148.15.237 182.148.15.239 Haproxy_Keepalived_Backup VIP2 182.148.15.236 182.148.15.235 Real_Server1 182.148.15.233
Real_Server2 182.148.15.238 系统版本都是 centos6.8 Haproxy_Keepalived_Master VIP1 182.148.15.237 182.148.15.239 Haproxy_Keepalived_Backup VIP2 182.148.15.236 182.148.15.235 Real_Server1 Real_Server2 182.148.15.233 182.148.15.238 系统版本都是 centos6.8 基本的网络拓扑图如下: 2)Haproxy_keepalived_Master 和 Haproxy_keepalived_Backup 两台服务器上安装配置 haproxy 和 keepalived 的操作记录: -------------------------------------------------------------------------------------- ------------------------------------
关闭 SElinux、配置防火墙(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都 要操作) [root@Haproxy_Keepalived_Master ~]# vim /etc/sysconfig/selinux #SELINUX=enforcing #SELINUXTYPE=targeted SELINUX=disabled #注释掉 #注释掉 #增加 [root@Haproxy_Keepalived_Master ~]# setenforce 0 启机器后就永久生效。 #临时关闭 selinux。上面文件配置后,重 注意下面 182.148.15.0/24 是服务器的公网网段,192.168.1.0/24 是服务器的私网网段 一定要注意:加上这个组播规则后,MASTER 和 BACKUP 故障时,才能实现 VIP 资源的正常转移。其故障恢复后, VIP 也还会正常转移回来。 [root@Haproxy_Keepalived_Master ~]# vim /etc/sysconfig/iptables ....... -A INPUT -s 182.148.15.0/24 -d 224.0.0.18 -j ACCEPT -A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT -A INPUT -s 182.148.15.0/24 -p vrrp -j ACCEPT -A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许组播地址通信。 #允许 VRRP(虚拟路由器冗余协)通信 [root@Haproxy_Keepalived_Master ~]# /etc/init.d/iptables restart -------------------------------------------------------------------------------------- -------------------------------- 下载 Haproxy 地址:http://www.haproxy.org/download/1.6/src/ 1)安装 Haproxy(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都要操作) 注意:安装之前,先执行 yum install gcc gcc-c++ make openssl-devel kernel-devel [root@Haproxy_Keepalived_Master src]# wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.12.tar.gz [root@Haproxy_Keepalived_Master src]# tar -zvxf haproxy-1.6.12.tar.gz [root@Haproxy_Keepalived_Master src]# cd haproxy-1.6.12
[root@Haproxy_Keepalived_Master haproxy-1.6.12]# make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy USE_OPENSSL=1 ADDLIB=-lz 参数说明: #使用 uname -r 查看内核,如:2.6.32-642.el6.x86_64,此时该参数就为 TARGET=linux26 linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy #使用 uname -r 查看系统信息,如 x86_64 GNU/Linux,此时该参数就为 x86_64 #haprpxy 安装路径 [root@Haproxy_Keepalived_Master haproxy-1.6.12]# ldd haproxy | grep ssl libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f6f3d9b2000) [root@Haproxy_Keepalived_Master haproxy-1.6.12]# make install PREFIX=/usr/local/haproxy [root@Haproxy_Keepalived_Master haproxy-1.6.12]# mkdir -p /usr/local/haproxy/conf [root@Haproxy_Keepalived_Master haproxy-1.6.12]# mkdir -p /etc/haproxy [root@Haproxy_Keepalived_Master haproxy-1.6.12]# cp /usr/local/src/haproxy- 1.6.12/examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg [root@Haproxy_Keepalived_Master haproxy-1.6.12]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg [root@Haproxy_Keepalived_Master haproxy-1.6.12]# cp -r /usr/local/src/haproxy- 1.6.12/examples/errorfiles /usr/local/haproxy/errorfiles [root@Haproxy_Keepalived_Master haproxy-1.6.12]# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles [root@Haproxy_Keepalived_Master haproxy-1.6.12]# mkdir -p /usr/local/haproxy/log [root@Haproxy_Keepalived_Master haproxy-1.6.12]# touch /usr/local/haproxy/log/haproxy.log [root@Haproxy_Keepalived_Master haproxy-1.6.12]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log [root@Haproxy_Keepalived_Master haproxy-1.6.12]# cp /usr/local/src/haproxy- 1.6.12/examples/haproxy.init /etc/rc.d/init.d/haproxy [root@Haproxy_Keepalived_Master haproxy-1.6.12]# chmod +x /etc/rc.d/init.d/haproxy [root@Haproxy_Keepalived_Master haproxy-1.6.12]# chkconfig haproxy on
[root@Haproxy_Keepalived_Master haproxy-1.6.12]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin 2)配置 haproxy.cfg 参数(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都 要操作) [root@Haproxy_Keepalived_Master ~]# cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg.bak [root@Haproxy_Keepalived_Master ~]# vim /usr/local/haproxy/conf/haproxy.cfg global log 127.0.0.1 local3 info maxconn 65535 chroot /usr/local/haproxy uid 99 #在本机记录日志 #每个进程可用的最大连接数 #haproxy 安装目录 #运行 haproxy 的用户 uid(cat /etc/passwd 查看,这里是 nobody 的 uid) gid 99 nobody 组 id) daemon defaults #运行 haproxy 的用户组 id(cat /etc/passwd 查看,这里是 #以后台守护进程运行 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 #运行模式 tcp、 http、 health #三次连接失败,则判断服务不可用 #如果后端有服务器宕机,强制切换到正常服务器 #统计页面 URL 路径 #统计页面自动刷新时间 #统计页面输入密码框提示信息 #统计页面用户名和密码 #隐藏统计页面上 HAProxy 版本信息 #每个进程可用的最大连接数 #连接超时 #客户端超时 #服务器端超时 frontend http-in #自定义描述信息
#运行模式 tcp、 http、 health #每个进程可用的最大连接数 #监听 80 端口 mode http maxconn 65535 bind :80 log global option httplog option httpclose acl is_a hdr_beg(host) -i www.wangshibo.com acl is_b hdr_beg(host) -i www.guohuihui.com #每次请求完毕后主动关闭 http 通道 #规则设置,-i 后面是要访问的域名 #如果多个域名,就写多个规则,一规则对 应一个域名;即后面有多个域名,就写 is_c、 is-d….,这个名字可以随意起。但要与下面的 use_backend 对应 #如果访问 is_a 设置的域名,就负载均衡到下面 backend 设置 的对应 web-server 上。web-server 所负载的域名要都部署到下面的 web01 和 web02 上。如果是不同的域名部 署到不同的机器上,就定义不同的 web-server。 use_backend web-server if is_a use_backend web-server if is_b backend web-server mode http balance roundrobin 轮询模式 #设置负载均衡模式,source 保存 session 值,roundrobin cookie SERVERID insert indirect nocache option httpclose option forwardfor server web01 182.148.15.233:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 server web02 182.148.15.238:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5 注意参数解释:inter 2000 心跳检测时间;rise 2 三次连接成功,表示服务器正常;fall 5 三次连接失败, 表示服务器异常; weight 1 权重设置 3)启动 haproxy(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都要操作) [root@Haproxy_Keepalived_Master ~]# service haproxy start [root@Haproxy_Keepalived_Master ~]# service haproxy stop [root@Haproxy_Keepalived_Master ~]# service haproxy restart [root@Haproxy_Keepalived_Master ~]# service haproxy status #启动 #关闭 #重启 #查看服务状态
4)设置 HAProxy 日志(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都要操 作) [root@Haproxy_Keepalived_Master ~]# vim /etc/rsyslog.conf ....... $ModLoad imudp $UDPServerRun 514 ....... local0.* 行可以没有,可以不用写 #取消注释 ,这一行不注释,日志就不会写 #取消注释 ,这一行不注释,日志就不会写 /var/log/haproxy.log #这一 local3.* 行必须要写 /var/log/haproxy.log #这一 [root@Haproxy_Keepalived_Master ~]# vim /etc/sysconfig/rsyslog SYSLOGD_OPTIONS="-r -m 0" #接收远程服务器日志 [root@Haproxy_Keepalived_Master ~]# service rsyslog restart -------------------------------------------------------------------------------------- ----------------------------------- 1)安装 Keepalived(Haproxy_Keepalived_Master 和 Haproxy_Keepalived_Backup 两台机器都要操 作) [root@Haproxy_keepalived_Master ~]# yum install -y openssl-devel [root@Haproxy_keepalived_Master ~]# cd /usr/local/src/ [root@Haproxy_keepalived_Master src]# wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz [root@Haproxy_keepalived_Master src]# tar -zvxf keepalived-1.3.5.tar.gz [root@Haproxy_keepalived_Master src]# cd keepalived-1.3.5 [root@Haproxy_keepalived_Master keepalived-1.3.5]# ./configure -- prefix=/usr/local/keepalived [root@Haproxy_keepalived_Master keepalived-1.3.5]# make && make install
[root@Haproxy_keepalived_Master keepalived-1.3.5]# cp /usr/local/src/keepalived- 1.3.5/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/ [root@Haproxy_keepalived_Master keepalived-1.3.5]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@Haproxy_keepalived_Master keepalived-1.3.5]# mkdir /etc/keepalived/ [root@Haproxy_keepalived_Master keepalived-1.3.5]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ [root@Haproxy_keepalived_Master keepalived-1.3.5]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ [root@Haproxy_keepalived_Master keepalived-1.3.5]# echo "/etc/init.d/keepalived start" >> /etc/rc.local #添加执行权限 [root@Haproxy_keepalived_Master keepalived-1.3.5]# chmod +x /etc/rc.d/init.d/keepalived [root@Haproxy_keepalived_Master keepalived-1.3.5]# chkconfig keepalived on #设置开机启动 [root@Haproxy_keepalived_Master keepalived-1.3.5]# service keepalived start #启动 [root@Haproxy_keepalived_Master keepalived-1.3.5]# service keepalived stop #关闭 [root@Haproxy_keepalived_Master keepalived-1.3.5]# service keepalived restart #重启 2)Haproxy_Keepalived_Master 服务器上的 Keepalived 配置如下: [root@Haproxy_Keepalived_Master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-bak [root@Haproxy_Keepalived_Master ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost
分享到:
收藏