龙空技术网

Keepalived+Nginx高可用配置

薇心飞扬 175

前言:

此时朋友们对“apachekeepalived”可能比较关注,同学们都想要知道一些“apachekeepalived”的相关知识。那么小编同时在网上汇集了一些关于“apachekeepalived””的相关知识,希望小伙伴们能喜欢,朋友们快快来了解一下吧!

很久就想试试Keepalived+Nginx高可用怎么配置,一直没有动手。正所谓"纸上得来终觉浅,绝知此事要躬行"。So let's go, step by step.

主要需要Keepalived+Nginx+Apache,所以要安装这几个。我用的centos7的虚拟机。IP和端口规划如下:

作用 IP 端口

web 192.168.37.128 8828

web 192.168.37.129 8829

Nginx 192.168.37.128 80

Nginx 192.168.37.129 80

keepalived虚拟IP :192.168.37.120 (前提是要配置好固定IP,虚拟IP在这个范围接近就可以了)

建议web的IP在其他机器上,没有更多的虚拟机自己试验,所以web和nginx放在一台上。

图例仅供参考

1,搭建apache

充当web服务器,用apache搞web方便快捷。

yum install httpd

修改配置 /etc/httpd/conf/httpd.conf

#Listen 12.34.56.78:80

Listen 8829

另外一个上面修改 /etc/httpd/conf/httpd.conf

#Listen 12.34.56.78:80

Listen 8828

另外为了方便,修改/usr/share/httpd/noindex/index.html 可以区分是那个web上面的。

systemctl start httpd

启动apache,可以分别访问网页试试:192.168.37.128:8828

192.168.37.129:8829

2,搭建Nginx

rpm -ivh

yum install nginx

/etc/nginx/nginx.conf (下面列出部分配置,其他不用修改)

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

upstream srvlist {

server 192.168.37.128:8828;

server 192.168.37.129:8829;

server 127.0.0.1:8080 backup;

}

这里面包含一个/etc/nginx/conf.d/default.conf

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log /var/log/nginx/host.access.log main;

location / {

proxy_pass ;

#root /usr/share/nginx/html;

index index.html index.htm;

}

在两台虚拟机上做同样的配置,然后启动Nginx。

service nginx start

这样可以到浏览器上面测试下,输入 或者

刷新几次,发现页面内容在128,129之间自动切换。这样就明白了负载均衡是什么意思了。

3,配置Keepalived

上面配置了Nginx应该说已经不错了,能够在自动把请求代理到128或者129的web上。但是如果128上面的Nginx挂了呢?外面的用户不知道我该去访问192.168.37.129,这个地址他是不知道的。反过来,129挂了,也是这样的情形。能不能自动在两个Nginx之间自动切换,自动检测,发现其中一个挂了,地址自动切换到另外一台,对用户来说是透明的。对了,keepalived就是为这个而来的。它通过一个虚拟的IP,检测两个主机的状态,自动切换。详细的关于Keepalived可以百度下。

首先当然是安装Keepalived。建议最好是自己编译安装,各种版本的依赖的坑,很容易掉进去。

yum install keepalived

修改配置/etc/keepalived/keepalived.conf

global_defs {

notification_email {

test@163.com

}

notification_email_from test@163.com

smtp_server smtp.163.com

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eno16777736

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 111111

}

virtual_ipaddress {

192.168.37.120

}

}

在另外一台上面安装,修改配置/etc/keepalived/keepalived.conf

global_defs {

notification_email {

test@163.com

}

notification_email_from test@163.com

smtp_server smtp.163.com

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eno16777736

virtual_router_id 51

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 111111

}

virtual_ipaddress {

192.168.37.120

}

}

主要的不同就是state,priority。一般来说把master的priority配高点。

interface eno16777736 这里也要注意,看了网上很多把eno16777736 配置成eth0,eth2,dev等等,开始一直不明白,原来是要网卡的名称。

可以自己用命令ifconfig看下,你是用的哪个,写哪个就可以了。

两台机器配置好了之后,就可以开始启动了。

service keepalived restart

不出意外,浏览器可以看到。如果没有看到,也不要急,遇到困难多看看日志/var/log/messages

仔细看启动的过程,有很多信息可以给你提示。

我在129上面成功了,128上面遇到:

Dec 26 22:15:07 vm11 Keepalived_vrrp[10099]: Opening file '/etc/keepalived/keepalived.conf'.

Dec 26 22:15:07 vm11 Keepalived_vrrp[10099]: Unable to load ipset library - libipset.so.3: cannot open shared object file: No such file or directory

Dec 26 22:15:07 vm11 Keepalived_vrrp[10099]: VRRP_Instance(VI_1) removing protocol VIPs.

好像是缺了什么包,百度了,没有结果。试试看

yum install libnl3-devel ipset-devel

又发现问题:

Dec 26 22:25:28 vm11 Keepalived_vrrp[10366]: Opening file '/etc/keepalived/keepalived.conf'.

Dec 26 22:25:29 vm11 kernel: Netfilter messages via NETLINK v0.30.

Dec 26 22:25:29 vm11 kernel: ip_set: protocol 6

Dec 26 22:25:29 vm11 Keepalived_vrrp[10366]: VRRP_Instance(VI_1) removing protocol VIPs.

是不是和防火墙有关啊。果断决定 systemctl stop firewalld

Dec 26 22:33:05 vm11 Keepalived_vrrp[10987]: Using LinkWatch kernel netlink reflector...

Dec 26 22:33:05 vm11 Keepalived_vrrp[10987]: VRRP_Instance(VI_1) Entering BACKUP STATE

Dec 26 22:33:05 vm11 Keepalived_vrrp[10987]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

貌似这次正常了。浏览器访问下,OK了

关掉129上面的Nginx,service nginx stop,还是可以访问,说明生效了。在看下日志/var/log/messages

Dec 26 22:34:28 vm11 Keepalived_vrrp[10987]: VRRP_Instance(VI_1) Transition to MASTER STATE

Dec 26 22:34:29 vm11 Keepalived_vrrp[10987]: VRRP_Instance(VI_1) Entering MASTER STATE

Dec 26 22:34:29 vm11 Keepalived_vrrp[10987]: VRRP_Instance(VI_1) setting protocol VIPs.

Dec 26 22:34:29 vm11 Keepalived_vrrp[10987]: Sending gratuitous ARP on eno16777736 for 192.168.37.120

Dec 26 22:34:29 vm11 Keepalived_vrrp[10987]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eno16777736 for 192.168.37.120

Dec 26 22:34:29 vm11 Keepalived_vrrp[10987]: Sending gratuitous ARP on eno16777736 for 192.168.37.120

惊喜的发现128上面的Entering MASTER STATE

再关掉128上的service nginx stop,192.168.37.120访问不了,两个都挂了,神仙也没有办法了。

是的,重启试试service nginx start,一切又回来了。

标签: #apachekeepalived