1、简介
php
2、环境介绍html
3、安装配置后端服务器前端
4、安装配置Haproxymysql
5、安装配置Keepalivedlinux
6、验证服务c++
1、简介web
HAProxy简介:redis
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速而且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在时下的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很简单安全的整合进您当前的架构中, 同时能够保护你的web服务器不被暴露到网络上算法
HAProxy实现了一种事件驱动、单一进程模型,此模型支持很是大的并发链接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,不多能处理数千并发链接。事件驱动模型由于在有更好的资源和时间管理的用户端(User-Space) 实现全部这些任务,因此没有这些问题。此模型的弊端是,在多核系统上,这些程序一般扩展性较差。这就是为何他们必须进行优化以 使每一个CPU时间片(Cycle)作更多的工做sql
Keepalived简介:
KeepAlived是一个相似于layer3, 4 & 5交换机制的软件,是一个高可用解决方案,经过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived是由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;因此默认状况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在必定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔通常为2秒钟能够修改,若是Backup发现Master宕机,那么Backup会发送ARP包到网关,而后把虚拟IP绑定到本身的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会从新接管全部资源
2、环境介绍
系统版本: CentOS 6.4_x86_64
Keepalived版本: keepalived-1.2.7 点此下载
Haproxy版本: Haproxy-1.4.24 点此下载
拓扑介绍:
前端HA1与HA2服务器上安装Keepalived+Haproxy软件,两台服务器互为主备而初始状态是每台服务器上各有一个虚拟IP地址【HA1的VIP:172.16.14.10 HA2的VIP:172.16.14.11】;后台WEB1与WEB2服务器上面安装Apache软件实现负载均衡;而LAMP服务器只负责解析php程序,当用户访问的是静态页面时会由前端调度器分发处处理静态请求的服务器,若是访问的是php的动态页面,将会被分发到lamp动态服务器进行处理,实现了动、静分离的效果,
3、安装后端服务器
一、安装LAMP服务器并测试
[root@lamp ~]# yum -y install httpd php mysql-server ######建立测试页 [root@lamp ~]# vim /var/www/html/index.php <h1>LAMP: 172.16.14.5</h1> <?php phpinfo(); [root@lamp ~]# service httpd start [root@lamp ~]# chkconfig httpd on
二、安装WEB1服务器的HTTPD服务并访问测试
[root@WEB1 ~]# yum -y install httpd [root@WEB1 ~]# service httpd start [root@WEB1 ~]# chkconfig httpd on [root@WEB1 ~]# echo "<h1>WEB1:172.16.14.3</h1>" > /var/www/html/index.html
三、安装WEB2服务器的HTTPD服务并访问测试
[root@WEB2 ~]# yum -y install httpd [root@WEB2 ~]# service httpd start [root@WEB2 ~]# chkconfig httpd on [root@WEB2 ~]# echo "<h1>WEB2:172.16.14.4</h1>" > /var/www/html/index.html
4、安装并配置Haproxy
一、在HA1服务器安装Haproxy
######安装开发环境 [root@HA1 ~]# yum -y install gcc gcc-c++ [root@HA1 ~]# tar xf haproxy-1.4.24.tar.gz [root@HA1 ~]# cd haproxy-1.4.24 [root@HA1 haproxy-1.4.24]# uname -r 2.6.32-358.el6.x86_64 [root@HA1 haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64 [root@HA1 haproxy-1.4.24]# make install ######注释:TARGET指定内核版本,而uname -r是查看内核版本;ARCH指定CPU架构 ---------------------------------------------------------------------- ######为Haproxy提供主配置文件与服务脚本,并将其添加到系统服务 [root@HA1 haproxy-1.4.24]# mkdir /etc/haproxy [root@HA1 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy [root@HA1 haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy [root@HA1 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@HA1 haproxy-1.4.24]# chmod +x /etc/init.d/haproxy [root@HA1 haproxy-1.4.24]# chkconfig --add haproxy
二、修改主配置文件
######建立Haproxy的工做目录 [root@HA1 ~]# mkdir /usr/share/haproxy [root@HA1 ~]# vim /etc/haproxy/haproxy.cfg # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 #日志配置,全部日志都记录在本地,经过local0输出 log 127.0.0.1 local1 notice maxconn 25600 #最大链接数 chroot /usr/share/haproxy #改变Haproxy的工做目录 uid 99 #用户的UID gid 99 #用户的GID nbproc 1 #进程数据(能够设置多个) daemon #之后台守护进程方式运行Haproxy #debug #是否开启调试 defaults log global mode http #默认使用协议,能够为{http|tcp|health} http:是七层协议 tcp:是四层 health:只返回OK option httplog #详细记录http日志 option dontlognull #不记录健康检查的日志信息 retries 3 #3次链接失败则认为服务不可用 option redispatch #ServerID对应的服务器宕机后,强制定向到其余运行正常的服务器 maxconn 30000 #默认的最大链接数 contimeout 5000 #链接超时 clitimeout 50000 #客户端超时 srvtimeout 50000 #服务器超时 timeout check 1s #心跳检测超时 timeout http-request 10s #默认http请求超时时间 timeout queue 1m #默认队列超时时间 timeout connect 10s #默认链接超时时间 timeout client 1m #默认客户端超时时间 timeout server 1m #默认服务器超时时间 timeout http-keep-alive 10s #默认持久链接超时时间 listen stats mode http bind 0.0.0.0:8090 #指定IP地址与Port stats enable #开启Haproxy统计状态 stats refresh 3s #统计页面自动刷新时间间隔 stats hide-version #状态页面不显示版本号 stats uri /allen #统计页面的uri为"/allen" stats realm Haproxy\ allen #统计页面认证时提示内容信息 stats auth admin:admin #统计页面的用户名与密码 stats admin if TRUE #启用或禁用状态页面 frontend allen #定义前端服务器 bind *:80 mode http option httpclose #每次请求完成主动关闭http链接 option forwardfor #后端服务器获取客户端的IP地址,能够从http header中获取 acl url_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写 acl url_dynamic path_end -i .php default_backend webservers #客户端访问时默认调用后端服务器地址池 use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配 backend webservers #定义后端服务器 balance roundrobin #定义算法;基于权重进行轮询 server web1 172.16.14.3:80 check rise 2 fall 1 weight 2 server web2 172.16.14.4:80 check rise 2 fall 1 weight 2 backend lamp balance source #定义算法;源地址hash运算;相似于Nginx的ip_hash server lamp 172.16.14.5:80 check rise 2 fall 1 ---------------------------------------------------------------------- #####注释:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态须要检查的次数;weight:权重,数量越大,超重越高
三、启动Haproxy服务并作访问测试
[root@HA1 ~]# service haproxy start
四、在HA2服务器上安装Haproxy;这里就不在介绍了,安装与配置方法与在HA1服务器上安装相同
5、安装配置Keepalived
一、在HA1与HA2服务器上安装Keepalived
[root@HA1 ~]# yum -y install keepalived [root@HA2 ~]# yum -y install keepalived
二、修改HA1服务器的主配置文件
[root@HA1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@allen.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_ALLEN } vrrp_script chk_proess { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance ha_1 { state MASTER interface eth0 virtual_router_id 56 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1056 } virtual_ipaddress { 172.16.14.10 } track_script { chk_proess } } vrrp_instance ha_2 { state BACKUP interface eth0 virtual_router_id 58 priority 92 advert_int 1 authentication { auth_type PASS auth_pass 1058 } virtual_ipaddress { 172.16.14.11 } }
三、修改HA2服务器的主配置文件
[root@HA2 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@allen.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_ALLEN } vrrp_script chk_proess { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance ha_1 { state BACKUP interface eth0 virtual_router_id 56 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1056 } virtual_ipaddress { 172.16.14.10 } } vrrp_instance ha_2 { state MASTER interface eth0 virtual_router_id 58 priority 93 advert_int 1 authentication { auth_type PASS auth_pass 1058 } virtual_ipaddress { 172.16.14.11 } track_script { chk_proess } }
四、启动Keepalived服务并查看HA1与HA2服务器上的虚拟IP地址
[root@HA1 ~]# service keepalived start [root@HA1 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.10/32 scope global eth0 inet6 fe80::20c:29ff:fe2c:1a24/64 scope link valid_lft forever preferred_lft forever ------------------------------------------------------------------------ [root@HA2 ~]# service keepalived start [root@HA2 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.11/32 scope global eth0 inet6 fe80::20c:29ff:feec:f63f/64 scope link valid_lft forever preferred_lft forever
6、验证服务
一、访问验证服务器的负载均衡功能
二、验证是否实现动、静分离的效果
三、假设前端服务器其中一台出现了故障,验证IP地址可否自动切换到备份服务器上
######中止HA1服务器的haproxy服务 [root@HA1 ~]# service haproxy stop ------------------------------------------------------------------------ ######查看HA2服务器的IP地址 [root@HA2 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.11/32 scope global eth0 inet 172.16.14.10/32 scope global eth0 inet6 fe80::20c:29ff:feec:f63f/64 scope link valid_lft forever preferred_lft forever 注释:由上可见,虚拟IP地址已成功切换到HA2服务器
四、假如这里将服务器修复好从新上线,IP地址会切换回到原来的服务器,这里就不在验证;将HA2服务器上的haproxy或keepalived服务关闭亦是如此
到此Keepalived+Haproxy实现负载均衡及动静分离已完成;后续博客会更新其余相关内容,敬请关注...