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

[经验分享] Nginx+Keepalived实现负载均衡和高可用 在ubuntu(乌班图)上--(转)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-4 12:25:18 | 显示全部楼层 |阅读模式
Nginx+keepalived实现负载均衡和高可用性 in ubuntu
使用Nginx已经有很长一段时间,但是最近才去实践利用Nginx做负载均衡和高可用性。


  大致思路:根据keepalived的特性,通过一个虚拟ip来实现主从服务器的切换,如果一台服务器宕机,可以自动切换到另一台备份服务器,从而不影响用户的访问。
  以下是我的安装配置步骤,请大家参考指正。
  1:服务器准备
  准备两台ubuntu虚拟主机服务器,对应的IP分别是 192.168.1.100   192.168.1.200
  两台主机的ip一定要在相同的网段
  2:虚拟IP准备
  sudo ifconfig  eth0:0 192.168.1.150 netmask 255.255.255.0
  然后查看ifconfig,不难发现与之前的ifconfig 的不同。也可以通过ip a查看,对应的网卡eth0有两个ipaddress
  两台虚拟主机要使用相同的虚拟IP: 192.168.1.150
  
  3:安装nginx
  sudo apt-get install nginx
  安装完成之后,ps -ef|grep nginx 查看nginx的进程,如果没问题,可以查看http://192.168.1.100  如果显示正常,说明nginx服务正常启动。
  两台服务器的nginx配置一致
  
  4:安装keepalived
  sudo apt-get install keepalived
  安装完成之后,查看进程发现并没有keepalived的进程,这是因为keepalived配置文件不存在,需要用户自己创建一个keepalived.conf文件存放到/etc/keepalived目录
  



Sh代码

  • vrrp_script chk_nginx {  
  • script "/etc/keepalived/check_nginx.sh" //检测nginx进程的脚本  
  • interval 2  
  • weight 2  
  • }  
  •   
  • global_defs {  
  • notification_email {  
  •       //可以添加邮件提醒  
  • }  
  • }  
  • vrrp_instance VI_1 {  
  • state MASTER //主服务器  
  • interface eth0  
  • virtual_router_id 51   
  • mcast_src_ip 192.168.1.100  
  • priority 250  
  • advert_int 1  
  •   
  • authentication {  
  •         auth_type PASS  
  •         auth_pass 123456  
  • }  
  • track_script {  
  •         chk_nginx  
  • }  
  • virtual_ipaddress {  
  •         192.168.1.150  
  • }  
  • }  
  
  
  两台服务器的keepalived.conf文件除了优先级,state和mcast_src_ip不一样,其他的完全一致,但是需要注意的几点是:

  • 主服务器的state为MASTER,从服务器的state为BACKUP
  • 主服务器的priority一定要比从服务器的priority大
  • mcast_src_ip就是对应服务器的局域网ip
  • “{”前面一定要有个空格,不能跟前面的字符连起来,否则出现问题很难发现
  • check_nginx.sh脚本文件的执行权限一定要正确。
  • check_nginx.sh的代码如下:


    Sh代码

    • #more /etc/keepalived/check_http.sh  
    • #!/bin/bash  
    • #代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程  
    • A=`ps -C nginx --no-header |wc -l`  
    • if [ $A -eq 0 ];then  
    • /etc/init.d/nginx start  
    • sleep 3  
    • if [ `ps -C nginx --no-header |wc -l`-eq 0 ];then  
    • killall keepalived  
    • fi  
    • fi  

  配置文件完成之后,sudo /etc/init.d/keepalived start,然后再查看下keepalived的进程是否存在,如果存在,再检查keepalived的log(sudo tail /var/log/syslog),如果看到nginx Keepalived_vrrp: VRRP_Script(chk_nginx) succeeded,则说明配置成功。
  两台服务器的keepalived配置和启动命令是一致的
  
  5:测试
  因为check_nginx的缘故,当启动keepalived是,nginx也会同时被启动,所以此时,查看nginx和keepalived的进程应该都是存在的,否则就是配置有问题。
  现在访问http://192.168.1.150,如果访问正常,此时应该显示的是主服务器的页面,也就是192.168.1.100的页面,否则也是配置有问题。
  然后在关闭主服务器的nginx访问,访问http://192.168.1.150页面应该正常,因为check_nginx的缘故。
  再关闭主服务器的keepalived进程,则此时访问http://192.168.1.150应该显示的是从服务器的页面,也就是192.168.1.200的页面,否则也是配置不正确。
  如果再关闭从服务器的nginx和keepalived则http://192.168.1.150无法访问。
  
  以上就是我的配置步骤,很粗略,还希望大家多指点。
  另外,以下是版本信息
  ubuntu:Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)
  Keepalived: v1.2.2
  nginx version: nginx/1.1.19
  
  
  

运维网声明 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.yunweiku.com/thread-109368-1-1.html 上篇帖子: Nginx+Keepalived主备切换(包含nginx服务停止) 下篇帖子: Keepalived Nginx 类型办事下高可靠Linux系统规划
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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