设为首页 收藏本站
查看: 1091|回复: 0

[经验分享] Centos7.2下基于Nginx+Keepalived搭建高可用负载均衡(一.基于Keepalived搭建HA体系)

[复制链接]

尚未签到

发表于 2017-12-22 18:15:54 | 显示全部楼层 |阅读模式
说明
  本文只为方便日后查阅,不对一些概念再做赘述,网上都有很多明确的解释,也请大家先了解相关概念.
  两台搭建HA的服务器是华为云上的ECS(不要忘记开通VPC,保证我们的服务器都处在一个内网环境),由于华为云每台机器只能绑定一个私有的浮动IP(VIP),所以本次示例只能实现一主一备(Master-Backup).
  环境:

  Server1:192.168.0.70
  Server2:192.168.0.71
  VIP:192.168.0.10


安装Keepalived(两台服务器步骤相同,只有细微的配置差别)
  创建etc下的keepalived目录,编辑配置文件
  

yum -y install keepalived  

mkdir /etc/keepalived  

vi /etc/keepalived/keepalived.conf  

  配置文件内容如下
  

global_defs {  
notification_email {
  
localhost@163.com
  
}
  
notification_email_from Keepalived@localhost
  
smtp_server 163@smtp.com
  
smtp_connect_timeout 30
  
router_id 192.168.0.70
  
}
  
#配置vrrp_script,主要用于健康检查,以及检查失败后执行的动作。
  
vrrp_script chk_nginx {
  
#健康检查脚本,当脚本返回值不为0时认为失败
  
script "/etc/keepalived/ck_ng.sh"
  
#检查频率,以下配置每2秒检查1次
  
interval 2
  
#当检查失败后,将vrrp_instance的priority减小5
  
weight -5
  
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
  
fall 3
  
#连续监测2次成功,就认为成功。但不调整优先级
  
rise 2
  
}
  

  

  
#定义对外提供服务的VIP vrrp_instance配置
  
vrrp_instance VI_1 {
  
#指定vrrp_instance的初始状态,是MASTER还是BackUP主要还是看优先级。
  
state MASTER
  
#指定vrrp_instance绑定的网卡,最终会通过指定的网卡宣告VIP
  
interface eth0
  
#发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP
  
mcast_src_ip 192.168.0.70
  
#相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。
  
virtual_router_id 55
  
#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
  
priority 100
  
#心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其他机器,自己还活着。
  
advert_int 1
  
#定义主从的验证方式以及密码,一般使用PASS(最长8位,超过了只会识别前8位作为密码)
  
authentication {
  
auth_type PASS
  
auth_pass 123456
  
}
  
#VIP
  
virtual_ipaddress {
  
192.168.0.10/24
  
}
  
#本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
  
track_script {
  
chk_nginx
  
}
  
#状态切换,使用上述配置发送邮件通知
  
smtp_alert
  
}
  

  BACKUP服务器的配置需要几处修改
  

state MASTER改为  state BACKUP  
mcast_src_ip 192.168.0.70改为backup服务器实际的IP mcast_src_ip 192.168.0.71
  
priority 100改为priority 99
  

  添加Nginx监控脚本,监控Nginx的运行状态,如果发现异常并不能重启成功则关闭Keepalived,让VIP漂移到备份服务器.
  

vi /etc/keepalived/ck_ng.sh  

  配置内容如下
  

#!/bin/bash  
#检查nginx进程是否存在
  
counter=$(ps -C nginx --no-heading|wc -l)
  
if [ "${counter}" = "0" ]; then
  
#尝试启动一次nginx,停止5秒后再次检测
  
service nginx start
  
sleep 5
  
counter=$(ps -C nginx --no-heading|wc -l)
  
if [ "${counter}" = "0" ]; then
  
#如果启动没成功,就杀掉keepalive触发主备切换
  
service keepalived stop
  
fi
  
fi
  

  增加监控脚本的执行权限,设置keepalived开机启动
  

chmod +x /etc/keepalived/ck_ng.sh  systemctl enable keepalived.service
  


安装Nginx
  这里Nginx当做Server使用,方便查看VIP漂移后的结果
  

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm  

yum -y install nginx  

  设置Nginx开机启动
  

systemctl enable nginx.service  

  启动Nginx
  

service nginx start  

  访问本机查看nginx是否正常
  

curl -i localhost  

  修改nginx的默认启动页,标识当前主机的IP地址
  

vi /usr/share/nginx/html/index.html  

  在Welcome to nginx!后加上IP地址192.168.0.70,保存后再次访问本机查看是否已经更改.另一台服务器是同样的步骤

华为云中一个很重要的配置
  登录华为云,进入到管理控制台,进入云服务器的详情页面(如果你使用的是华为云ECS的话,其他云服务器提供商不晓得是否也是这样)
DSC0000.png

  点击网卡选项,点击管理私有IP地址,添加VIP192.168.0.10(注意两台服务器都要配置!)
DSC0001.png


VIP漂移测试
  启动Keepalived
  

service keepalived start  

  curl访问VIP
  

curl -i 192.168.0.10  

  此时返回的为主服务器的nginx默认页面
DSC0002.png

  重启主服务器或停止Keepalived服务
  

reboot  或
  service keepalived stop
  

  在另一台服务器上访问VIP
  

curl -i 192.168.0.10  

  这个时候可以看到返回的内容已经变为备份服务器的nginx默认页192.168.0.71  说明VIP已经从主服务器漂移到了备份服务器
DSC0003.png

  如果你使用reboot命令重启了服务器,过了一会之后再次访问VIP,发现又返回192.168.0.70的页面内容,因为主服务器已经重启完成,keepalived启动之后会重新把vip抢夺回来.
  在测试过程中,可以查看服务器是否已绑定上vip,使用命令
  

ip a  

  在eth0网卡上可以看到除了本机内网IP外,还有一个VIP
DSC0004.png


总结
  如果某台服务器宕机或者keepalived和nginx出现问题,vip会自动漂移到另一台备份服务器.
  如果是自己测试练着玩的话,本机直接访问vip就可以了.如果应用到生产环境,还需有一个外网IP映射到VIP,然后申请一个域名解析到这个外网IP.
  本文主要实现高可用,nginx只是当做一个静态网站的server.后面会基于此文记录nginx配置负载均衡.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-426924-1-1.html 上篇帖子: 陕西易唐云网-夏天雨后的吉他有点风 下篇帖子: Linux开机自动启动Nginx服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表