keepalived-nginx-apache-mysql实现高可用、负载均衡的网站
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了keepalived-nginx-apache-mysql实现高可用、负载均衡的网站,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8533字,纯文字阅读大概需要13分钟。
内容图文
![keepalived-nginx-apache-mysql实现高可用、负载均衡的网站](/upload/InfoBanner/zyjiaocheng/894/67a21e1959ea482d89bb14c3a14cd55c.jpg)
title | copyright | date | tags | categories | ||
---|---|---|---|---|---|---|
keepalived+nginx+apache+mysql实现高可用、负载均衡的网站(上) | true | 2019-08-20 12:52:34 -0700 |
|
|
说明:本次实验是需要8台虚拟机的项目 其架构如下图:
简介
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。
Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与 否的标准。
Layer4:如果理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,是一款高性能的反向代理服务器。
环境说明
虚拟机数量:四台
操作系统:全部是centos7.3
keepalived版本:keepalived-2.0.7
nginx版本:nginx-1.14.0
主机名称 | 安装软件 | ip地址 |
---|---|---|
keepalived_web_m | keepalived+nginx | 172.18.74.64 |
keepalived_web_s | keepalived+nginx | 172.18.74.65 |
web1 | Apache | 172.18.74.66 |
web2 | Apache | 172.18.74.69 |
环境安装
首先关闭所有机器的防火墙和selinux,配置好之后我们开启,然后添加策略。
systemctl stop firewalld
setenforce 0
安装nginx
首先下载并解压需要的包
wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.41/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2o.tar.gz
tar -zxvf openssl-1.0.2o.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar -zxvf nginx-1.14.0.tar.gz
进入nginx目录
cd nginx-1.14.0
配置安装选项
./configure --add-module=../ngx_cache_purge-2.3 --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-pcre=../pcre-8.41 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2o
通过/usr/local/nginx
配置项可以知道主要生效配置文件在此文件夹中
编译并安装
make&&make install
先备份一份nginx配置文件
cd /usr/local/nginx/conf
cp nginx.conf ./nginx.conf.bak
修改nginx.conf的配置
vim nginx.conf
修改红框里的内容
保存退出,然后在sbin目录重新加载nginx
./nginx -s reload
下载并安装keepalived
yum install wget make gcc gcc-c++ openssl-devel
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
tar zxvf keepalived-2.0.7.tar.gz
cd keepalived-2.0.7
./configure --prefix=/data/keepalived
如果报以下警告:
WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
不用担心,我们只需要用到VRRP功能,不需要用IPVS功能,所以请确保以下三项是yes就行了。
编译并安装
make&&make install
将keepalived 以服务方式启动
创建/etc/keepalived目录并把keepalived的配置文件拷贝/etc/keepalived目录下并加入到开机启动。
mkdir /etc/keepalived
cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ \
systemctl enable keepalived
修改keepalived配置文件
! Configuration File for keepalived global_defs { notification_email { 1070481109@qq.com #这里是故障会给谁发邮件 } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 #邮件服务器的地址 smtp_connect_timeout 30 router_id xu_ka_web_m #路由的id 一般写主机名 vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" # 检查nginx状态的脚本 interval 2 weight 3 } vrrp_instance VI_1 { #vrrp实例定义部分 state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写 interface ens160 #设置对外服务的接口 virtual_router_id 51 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置验证类型和密码 auth_type PASS #主要有PASS和AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同 } virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个 172.18.74.182 } track_script { ## 将 track_script 块加入 instance 配置块 chk_nginx } } virtual_server 172.18.74.182 80 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.74.64 80 { weight 1 TCP_CHECK{ connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
备主机里的keepalived配置
! Configuration File for keepalived
global_defs {
notification_email {
1070481109@qq.com #这里是故障会给谁发邮件
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 #邮件服务器的地址
smtp_connect_timeout 30
router_id xu_ka_web_s #路由的id 一般写主机名
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" # 检查nginx状态的脚本
interval 2
weight 3
}
vrrp_instance VI_1 { #vrrp实例定义部分
state BACKUP #设置lvs的状态,MASTER和BACKUP两种,必须大写
interface ens160 #设置对外服务的接口
virtual_router_id 51 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
priority 90 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #主要有PASS和AH两种
auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
}
virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个
172.18.74.182
}
track_script { ## 将 track_script 块加入 instance 配置块
chk_nginx
}
}
virtual_server 172.18.74.182 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 172.18.74.65 80 {
weight 1
TCP_CHECK{
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
添加检查nginx状态的脚本
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
重启keepalived
systemctl restart keepalived
输入命令ip a
查看是否有vip
keepalived+nginx+apache+mysql实现高可用、负载均衡的网站
然后关闭master的keepalived
systemctl stop keepalived
查看backup上是否有vip
有说明配置成功
没有说明keepalived.conf存在问题
安装apache服务器
在两台web服务器上安装apache服务
yum install -y httpd
打开服务
systemctl start httpd
编辑默认页面
cd /var/www/html/
vim index.html
<html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>产品添加-JD产品管理系统</title> </head> <body> <h3>JD产品管理</h3> <form action="deal.php" method="post" enctype="multipart/form-data"> 图书名称:<input type='text' name='title' /> <hr /> 销售价格:<input type="text" name='price' /> <hr /> 市场价格:<input type="text" name='market_price' /> <hr /> <input type="submit" name="submit" value="添加" /> <input type="reset" name="reset" value="重置" /> </form> </body> </html>
同样在web2里安装apache并修改index.html
<html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>产品添加-JD产品管理系统</title> </head> <body> <h3>web2_JD产品管理</h3> <form action="deal.php" method="post" enctype="multipart/form-data"> 图书名称:<input type='text' name='title' /> <hr /> 销售价格:<input type="text" name='price' /> <hr /> 市场价格:<input type="text" name='market_price' /> <hr /> <input type="submit" name="submit" value="添加" /> <input type="reset" name="reset" value="重置" /> </form> </body> </html>
通过浏览器访问vip
可以看到web1的页面,再次刷新会出现web2的页面
因为在nginx的配置为你教案中设置的web1和web2的权重为100:80
所以每访问180次会出现100次web1,80次web2
报错指南:
原因
未使用nginx -c的参数指定nginx.conf文件的位置
解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
执行
不能加空格
内容总结
以上是互联网集市为您收集整理的keepalived-nginx-apache-mysql实现高可用、负载均衡的网站全部内容,希望文章能够帮你解决keepalived-nginx-apache-mysql实现高可用、负载均衡的网站所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。