写点什么

Keepalived+Nginx 搭建高可用集群

用户头像
逸少
关注
发布于: 2021 年 06 月 17 日
Keepalived+Nginx 搭建高可用集群

本文主要讲述如何在 Ubuntu 虚拟机上使用 Keepalived 搭建 Nginx 高可用集群

环境准备

准备两台 Ubuntu(Ubuntu 版本为 Ubuntu 20.04.2 LTS) 虚拟机,配置如下:

  • 虚拟机名称 hostname IP

  • nginx-ha-1 node1 192.168.57.231

  • nginx-ha-2 node2 192.168.57.232


虚拟机安装可以参考笔者另外一篇文章,里面有比较详细的讲述(忽略 Docker 相关内容即可)

版本约定

  • nginx version: nginx/1.18.0 (Ubuntu)

  • Keepalived v2.0.19 (10/19,2019)


软件安装

笔者将采用在线安装的方式分别在 node1 和 node2 上安装 nginx 和 Keepalived。

Nginx 安装

  • 在 node1 上执行如下命令安装 nginx

yishao@node1:~$ sudo apt-get updateyishao@node1:~$ sudo apt-get install nginxyishao@node1:~$ nginx -vyishao@node1:~$ sudo service nginx restart
复制代码
  • node2 上执行同样的命令安装 nginx

  • 分别修改 node1、node2 上的/var/www/html/index.nginx-debian.html 文件,在文件上增加当前虚拟机的 IP,如下:


  • 验证 nginx

在浏览器上分别访问http://192.168.57.231/ http://192.168.57.232/

Keepalived 安装

  • 在 node1 上执行如下命令安装 keepalived

yishao@node1:~$ sudo apt-get install keepalived
复制代码
  • node2 上执行同样的命令安装 nginx

主从模式配置

集群规划

  • 虚拟机名称 hostname IP VIP/集群角色

  • nginx-ha-1 node1 192.168.57.231 192.168.57.230/MASTER

  • nginx-ha-2 node2 192.168.57.232 192.168.57.230/BACKUP

Keepalived 配置

在 node1、node2 的 /etc/keepalived 目录下分别增加 keepalived.conf、check.sh 文件

  • 编辑 node1 的 /etc/keepalived/keepalived.conf

yishao@node1:~$ sudo vi /etc/keepalived/keepalived.conf
复制代码

node1 的 /etc/keepalived/keepalived.conf 内容如下:

vrrp_script check{	script "/etc/keepalived/check.sh"    #检活脚本	interval 3}
global_defs { router_id 192.168.57.231 #当前虚拟机IP}
vrrp_instance VI { state MASTER #主 interface ens33 #网卡 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.230/24 #VIP } track_script { check }}
复制代码
  • 编辑 node2 的 /etc/keepalived/keepalived.conf

yishao@node2:~$ sudo vi /etc/keepalived/keepalived.conf
复制代码

node2 的 /etc/keepalived/keepalived.conf 内容如下:

vrrp_script check{	script "/etc/keepalived/check.sh"    #检活脚本	interval 3}
global_defs { router_id 192.168.57.232 #当前虚拟机IP}
vrrp_instance VI { state BACKUP #从 interface ens33 #网卡 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.230/24 #VIP } track_script { check }}
复制代码
  • 在 node1、node2 的 /etc/keepalived 的目录下增加 check.sh,内容如下:

A=`ps -C nginx --no-header |wc -l`if [ $A -eq 0 ];then       service keepalived stopfi
复制代码
  • 分别在 node1、node2 上修改 check.sh 权限

yishao@node1:/etc/keepalived$ sudo chmod 777 check.sh
复制代码


yishao@node2:/etc/keepalived$ sudo chmod 777 check.sh
复制代码

验证高可用

  • 分别在 node1、node2 上执行如下命令重启 keepalived 服务:

yishao@node1:~$ sudo service keepalived restart
复制代码


yishao@node2:~$ sudo service keepalived restart
复制代码
  • 将 node1 关机,继续访问 VIP http://192.168.57.230/,此时 VIP 会自动漂移到 node2 上,即 232

双主模式配置

集群规划

  • 虚拟机名称 hostname IP VIP/集群角色

  • nginx-ha-1 node1 192.168.57.231 192.168.57.230/MASTER

192.168.57.233/BACKUP

  • nginx-ha-2 node2 192.168.57.232 192.168.57.230/BACKUP

192.168.57.233/MASTER

Keepalived 配置

在 node1、node2 的 /etc/keepalived 目录下分别增加 keepalived.conf、check.sh 文件

  • 编辑 node1 的 /etc/keepalived/keepalived.conf

yishao@node1:~$ sudo vi /etc/keepalived/keepalived.conf
复制代码

node1 的 /etc/keepalived/keepalived.conf 内容如下:

vrrp_script check{	script "/etc/keepalived/check.sh"    #检活脚本	interval 3}
global_defs { router_id 192.168.57.231 #当前虚拟机IP}
vrrp_instance VI1 { state MASTER #主 interface ens33 #网卡 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.230/24 #VIP } track_script { check }}
vrrp_instance VI2 { state BACKUP #主 interface ens33 #网卡 virtual_router_id 52 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.233/24 #VIP } track_script { check }}
复制代码
  • 编辑 node2 的 /etc/keepalived/keepalived.conf

yishao@node2:~$ sudo vi /etc/keepalived/keepalived.conf
复制代码

node2 的 /etc/keepalived/keepalived.conf 内容如下:

vrrp_script check{	script "/etc/keepalived/check.sh"    #检活脚本	interval 3}
global_defs { router_id 192.168.57.232 #当前虚拟机IP}
vrrp_instance VI { state BACKUP #从 interface ens33 #网卡 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.230/24 #VIP } track_script { check }}
vrrp_instance VI2 { state MASTER #主 interface ens33 #网卡 virtual_router_id 52 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1314 } virtual_ipaddress { 192.168.57.233/24 #VIP } track_script { check }}
复制代码
  • 在 node1、node2 的 /etc/keepalived 的目录下增加 check.sh,内容如下:

A=`ps -C nginx --no-header |wc -l`if [ $A -eq 0 ];then       service keepalived stopfi
复制代码
  • 分别在 node1、node2 上修改 check.sh 权限

yishao@node1:/etc/keepalived$ sudo chmod 777 check.sh
复制代码


yishao@node2:/etc/keepalived$ sudo chmod 777 check.sh
复制代码

验证高可用

  • 分别在 node1、node2 上执行如下命令重启 keepalived 服务:

yishao@node1:~$ sudo service keepalived restart
复制代码


yishao@node2:~$ sudo service keepalived restart
复制代码


参考:https://www.keepalived.org/manpage.html

发布于: 2021 年 06 月 17 日阅读数: 33
用户头像

逸少

关注

逸少 2017.12.01 加入

一名不甘做咸鱼的码农; 人生没有太晚的开始,只有敢不敢全力前行;

评论

发布
暂无评论
Keepalived+Nginx 搭建高可用集群