yongzhang 2020-05-11
今天通过两个实战案例,带大家理解Nginx+keepalived
如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点:
注意:Keepalived服务器同样是nginx负载均衡器。
本实验系统均使用Centos 7.5,在所有节点进行以下操作:
// 查看操作系统 [ ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) //关闭并禁用防火墙 [ ~]# systemctl stop firewalld [ ~]# systemctl disable firewalld //关闭selinux [ ~]# sed -i ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/sysconfig/selinux [ ~]# setenforce 0 //安装nginx yum -y install nginx 若提示,无安装包,则需要安装epel扩展源: yum -y install epel-release
2.1)修改web01节点网站根目录默认文件
[ ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html
2.2)修改web02节点网站根目录默认文件
[ ~]# echo "<h1>web01 192.168.1.34</h1>" > /usr/share/nginx/html/index.html
通过nginx主配置文件,可以看出nginx网站根目录文件默认是:
/usr/share/nginx
,如下:
2.3)启动nginx服务
//web01 [ ~]# systemctl start nginx //web02 [ ~]# systemctl start nginx
2.4)验证
主机web01和web02已配置成web服务器
LB服务器需同时部署nginx和Keepalived服务,以下操作均在两台LB
节点执行:
3.1)配置nginx反向代理服务
编辑nginx主配置文件:`/etc/nginx/nginx.conf`
启动nginx服务;验证效果:
访问LB01:
访问LB02:
如图所示,LB01和LB02均可轮询访问后端web节点,即表示nginx LB集群搭建成功。
3.2)配置Keepalived服务
(1)安装Keepalived
yum -y install keepalived
(2)配置Keepalived服务
这里直接提供LB01与LB02两者配置文件差异对比,方便读者阅读:
vim /etc/keepalived/keepalived.con
(3)谁是主Keepalived?
通过上图得知,LB01优先级高于LB02,因此VIP绑定在LB01上:
[ ~]# ip a | grep 192.168.1.110 inet 192.168.1.110/24 scope global secondary eth0:1
由于不是真实环境,域名使用www.test.com
用作测试,所以www.test.com的解析只能在客户机hosts文件设置。具体步骤如下:
打开:
C:\Windows\System32\drivers\etc\hosts
在末尾添加:
192.168.1.110 www.test.com
注意:这里的IP指定的是浮动IP,即通过客户端通过VIP访问web业务
关闭LB01节点的keepalived服务。再次访问:
发现已然可以通过域名进行访问,只是此时VIP已绑定在LB02上,如下所示:
[ ~]# ip a | grep 192.168.1.110 inet 192.168.1.110/24 scope global secondary eth0:1 [ ~]#
到此,Nginx+Keepalived 高可用集群(主从)就搭建完成了。
将keepalived做成双主模式,其实很简单,就是再配置一段新的vrrp_instance(实例)规则。
说明:还按照上面的环境继续做实验,只是修改LB节点上面的keepalived服务的配置文件即可。
此时LB-01节点既为Keepalived的主节点也为备节点,LB-02节点同样既为Keepalived的主节点也为备节点。
LB-01节点默认的主节点VIP(192.168.1.110),LB-02节点默认的主节点VIP(192.168.1.210)
增加一段vrrp_instance VI_2实例规则:
vim /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
//LB-01 [ ~]# systemctl restart keepalived //LB-02 [ ~]# systemctl restart keepalived
//LB-01 [ ~]# ip a ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq inet 192.168.1.31/24 brd 10.43.1.255 scope global eth0 inet 192.168.1.110/24 scope global secondary eth0:1 //LB-02 [ ~]# ip a ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0 inet 192.168.1.210/24 scope global secondary eth0:2
停止LB-01节点的keepalived再次测试
此时VIP都绑定在LB-02上
[ ~]# ip a ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq inet 192.168.1.32/24 brd 10.43.1.255 scope global eth0 inet 192.168.1.110/24 scope global secondary eth0:1 inet 192.168.1.210/24 scope global secondary eth0:2
测试可以发现我们访问keepalived中配置的两个VIP都可以正常调度,当我们停止任意一台keepalived节点,同样还是正常访问;到此,nginx+keepalived+高可用集群(双主模式)就搭建完成了。
以上实验测试有一个问题就是,我们是用Nginx做负载均衡分发请求的数据包的。如果主节点的Keepalived服务正常运行,而Nginx运行异常,那么将会出现Nginx负载均衡服务失灵,无法切换到Nginx负载均衡器02上,后端的Web服务器无法收到请求。所以,我们应该要检测Nginx的服务是否正常运行,如果不是正常运行,应该停掉Keepalived的服务,这样才能自动切换到备节点上。
我们可以通过检测80端口是否开启来判定Nginx的运行情况,2秒钟检测一次,脚本如下:
#!/bin/bash while true do if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ] then /etc/init.d/keepalived stop fi sleep 2 done
欢迎关注微信公众号『开源Linux
』,专注于分享Linux/Unix相关内容,包括Linux运维、Linux系统开发、网络编程、以及虚拟化和云计算等技术干货。后台回复『学习
』,送你一套学习Linux的系列书籍,期待与你相遇。