keepalived(高可用)+nginx(负载平衡)+web

金歌  论坛元老 | 2024-10-25 02:45:05 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1701|帖子 1701|积分 5103

情况


注意:

(1) 做高可用+负载平衡至少需要四台服务器:两台独立的高可用+负载平衡器,两台web服务器做集群
(2) vip(假造ip)不能和物理ip辩论
(3) vip(假造ip)最好设置成和内网ip同一网段,末了做所在映射到公网ip
(4) keeplived(高可用)+nginx(负载平衡) 可以实现多域名对应一个VIP,并且访问不同域名,表现不同主页,可行,已测
(5) 负载平衡服务器(keeplived+nginx)最好和后端web服务器在同一局域网内
(6) 两台web服务的网站内容必须相同
(7) keeplived+nginx 中后端web服务器不需要配置vip,也不用抑制arp广播,由于后端web回包时还会经过前端nginx
(8) 心跳线:两台服务器各新增一块网卡然后配上恣意网段ip只要能相互ping通就行(不要和局域网通网段)
名词表明:
VIP:负载平衡服务器的假造ip所在
LB :负载平衡服务器
sealserver:后端真实服务器
形貌配置keepalive+nginx+web的过程
  1. 1、准备好后端web集群并且保证web集群内容一致
  2. 2、配置2台nginx的反向代理功能,保证能通过nginx正常访问到后端的web集群
  3. 3、在每台nginx上配置keepalive,模式为主备,实现当用户访问主keepalive的时候,vip能够正常把数据包发送给nginx并实现反向代理,后端的web集群回复用户的时候仍然通过vip来发送数据。
  4. 注意:如果master上的nginx发生故障keepalive需要手动停止才能把vip漂移到backup上。
复制代码
1、安装keepalived(与nginx[负载平衡服务器] 在一台服务器上)

  1. # keepalived使用 VRRP(虚拟路由冗余协议),实现单点故障切换,俗称心跳线监听
  2. [root@oldboy ~]# yum -y install keepalived
  3. [root@oldboy ~]# cd /etc/keepalived/
  4. [root@oldboy keepalived]#  cp keepalived.conf keepalived.conf.ori
  5. [root@oldboy keepalived]# sed  -n '1,31p' keepalived.conf.ori >keepalived.conf
复制代码
2、配置web服务器站点目次(Real-server:后端web服务器)

  1. (1) 配置real-server-10.0.0.7(nginx-web)
  2. [root@Oldboy extra]# cat www.conf
  3. server {
  4.         listen        80;
  5.         server_name  www.etiantian.org;
  6.         location / {
  7.             root   html/www;
  8.             index  index.html index.htm;
  9.         }
  10. }
  11. [root@Oldboy extra]# cat bbs.conf
  12. server {
  13.         listen        80;
  14.         server_name  bbs.etiantian.org;
  15.         location / {
  16.             root   html/bbs;
  17.             index  index.php  index.html index.htm;
  18.         }
  19. }
  20. [root@Oldboy extra]# cat blog.conf
  21. server {
  22.         listen        80;
  23.         server_name  blog.etiantian.org;
  24.         location / {
  25.         root     html/blog;
  26.         index    index.html index.php;
  27. }
  28.         location ~ .*\.(php|php5)?$ {
  29.         root html/blog;
  30.         fastcgi_pass  127.0.0.1:9000;
  31.         fastcgi_index index.php;
  32.         include fastcgi.conf;
  33.         }
  34. }
  35. (2) 配置real-server-10.0.0.8 (apache-web)
  36. [root@Oldboy extra]# egrep -v "#|^$" httpd-vhosts.conf
  37. NameVirtualHost *:80
  38. <VirtualHost *:80>
  39.     ServerAdmin oldboy@oldboyedu.com
  40.     DocumentRoot "/application/apache2.2.31/htdocs/www"
  41.     ServerName   www.etiantian.org
  42.     ServerAlias etiantian.org
  43.     ErrorLog "/app/logs/www-error_log"
  44.     CustomLog "/app/logs/www-access_log" common
  45. </VirtualHost>
  46. <VirtualHost *:80>
  47.     ServerAdmin oldboy@oldboyedu.com
  48.     DocumentRoot "/application/apache2.2.31/htdocs/bbs"
  49.     ServerName   bbs.etiantian.org
  50.     ErrorLog "/app/logs/bbs-error_log"
  51.     CustomLog "/app/logs/bbs-access_log" common
  52. </VirtualHost>
  53. <VirtualHost *:80>
  54.     ServerAdmin oldboy@oldboyedu.com
  55.     DocumentRoot "/application/apache2.2.31/htdocs/blog"
  56.     ServerName   blog.etiantian.org
  57.     ErrorLog "/app/logs/blog-error_log"
  58.     CustomLog "/app/logs/blog-access_log" common
  59. </VirtualHost>
复制代码
3、配置nginx负载平衡服务器 ,配置两台,主备都一样(也叫反向代理)

  1. [root@Oldboy keepalived]# vi /application/nginx/conf/nginx.conf
  2. worker_processes  1;
  3. events {
  4.     worker_connections  1024;
  5. worker_processes  1;
  6. events {
  7.     worker_connections  1024;
  8. }
  9. http {
  10.     include       mime.types;
  11.     default_type  application/octet-stream;
  12.     sendfile        on;
  13.     keepalive_timeout  65;
  14. upstream www_pool {
  15.     server 172.16.1.7:80  weight=1;
  16.     server 172.16.1.8:80  weight=1;
  17. }
  18. server {
  19.         listen       80;
  20.         server_name  www.etiantian.org bbs.etiantian.org  blog.etiantian.org;   (多个域名用空格隔开)
  21.         location / {
  22.             index  index.html index.htm;
  23.             proxy_pass http://www_pool;
  24.             proxy_set_header Host  $host;
  25.             proxy_set_header X-Forwarded-For $remote_addr;
  26.         }
  27.     }
  28. }
复制代码
4、配置keepalived(keepalived和负载平衡服务器在一台服务器上)

  1. (1) 配置keepalived-MASTER(10.0.0.5)
  2. [root@Oldboy keepalived]# cat keepalived.conf
  3. ! Configuration File for keepalived
  4. global_defs {
  5.    router_id LVS_DEVEL_01         \\keepalived服务器标识符,最好和备keepalived不一样
  6. }
  7. vrrp_instance VI_1 {                    \\VRRP实例1,多实例不能相同,但是主备必须相同
  8.     state MASTER                          \\指定keepalived的角色,MASTER为主服务器,BACKUP为备用服务器
  9.     interface eth0                          \\监听的接口
  10.     virtual_router_id 51                  \\虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样
  11.     priority 150                               \\优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
  12.     advert_int 1                                \\设置主备之间同步检查的时间间隔,单位秒
  13.     authentication {
  14.         auth_type PASS
  15.         auth_pass 1111
  16.     }
  17.     virtual_ipaddress {
  18.         172.16.1.254/24 dev eth0 label eth0:3    \\定义虚拟ip地址,在监听的eth0网卡上增加eth0:3虚拟网卡
  19.         #172.16.1.245                                           \\直接加ip也可以,用ip add 看
  20.     }
  21. }
  22. (2) 配置keepalived-BACKUP(10.0.0.6)
  23. [root@Oldboy keepalived]# cat keepalived.conf
  24. ! Configuration File for keepalived
  25. global_defs {
  26.    }
  27.    router_id LVS_DEVEL_02                                                                     \\keepalived服务器标识符,最好和主keepalived不一样
  28. }
  29. vrrp_instance VI_1 {                                                                                \\VRRP实例,和主一样
  30.     state BACKUP                                                                                     \\指定keepalived的角色,这里是备用服务器
  31.     interface eth0
  32.     virtual_router_id 51                                                                           
  33.     priority 100                                                                                          \\优先级低于主服务器,最好相差50
  34.     advert_int 1
  35.     authentication {
  36.         auth_type PASS
  37.         auth_pass 1111
  38.     }
  39.     virtual_ipaddress {
  40.     172.16.1.254/24 dev eth0 label eth0:3
  41.     #172.16.1.245                                        \\直接加ip也可以,用ip add 看
  42.     }
  43. }
复制代码
5、启动keepalived

  1. /etc/init.d/keepalived start
  2. chkconfig keepalived on
  3. echo "/application/nginx/sbin/nginx" >> /etc/rc.d/rc.local
  4. 查看vip漂移:
  5. [root@Oldboy keepalived]# ifconfig eth0:3
  6. eth0:3    Link encap:Ethernet  HWaddr 00:0C:29:6D:23:83  
  7.           inet addr:172.16.1.254  Bcast:0.0.0.0  Mask:255.255.255.0
  8.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
复制代码
6、将vip映射到公网ip(由于我这里没有硬件防火墙,只能使用同一局域网的别的服务器取代,这台服务器需要能联网)

  1. (1) 开启路由转发
  2. [root@Oldboy ~]# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf
  3. [root@Oldboy ~]# sysctl -p
  4. net.ipv4.ip_forward = 1
  5. (2) 配置地址映射(当访问公网ip:10.0.0.51的时候跳转到vip:172.16.1.254)
  6. iptables -F -t nat
  7. iptables -t nat -I PREROUTING -p tcp  -d 10.0.0.51 --dport 80 -j DNAT --to-destination 172.16.1.254:80
  8. iptables -t nat -A POSTROUTING  -j MASQUERADE
  9. /etc/init.d/iptables save
  10. /etc/init.d/iptables restart
复制代码
7、测试并验证



  • keepalived+nginx:多个域名假造主机对应一个VIP,并且访问不同域名假造主机,表现不同主页,可行,已测,由于nginx支持7层转发
  1. 客户端绑定hosts: 10.0.0.51  www.etiantian.org  bbs.etiantian.org  blog.etiantian.org   (一个vip对应多个域名)
  2. 1、keepalived只负责vip漂移,能够让用户顺利将请求通过vip交给负载均衡服务器,当停止主服务器,备用服务器会接管vip以及对应的服务,当启动主服务器,备用服务器会让出接管权,注意这里是停止主服务器,如果只停止nginx服务vip是不会发生漂移的。
  3. 2、当访问www.etiantian.org  bbs.etiantian.org 或 blog.etiantian.org,则解析到 10.0.0.51(公网ip)并NAT映射到vip:172.16.1.254(vip与负载均衡服务器在一起),负载均衡服务器会带着用户的主机头请求后端的real-server,后端real-server会根据主机头信息,回复负载均衡服务器,然后负载均衡服务器再回复客户端请求。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表