系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > server > anz > 详细页面

Nginx+Keepalived实现双机主备的方法

时间:2020-03-29来源:电脑系统城作者:电脑系统城

前言

首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。

Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。

下面我们介绍一下nginx keepalived高可用方案的部署安装。

环境准备

在两台主机上准备如下压缩文件:

  • keepalived-2.0.20.tar.gz
  • nginx-1.16.1.tar.gz

虚拟IP

真实IP

nginx端口

主从

192.168.124.20

192.168.124.13

80

MASTER

192.168.124.20

192.168.124.14

80

BACKUP

安装nginx

Nginx+Keepalived实现双机主备的方法

新建一个用户:


 
  1. useradd tianyan

确定安装目录,我这里的安装目录是:/home/tianyan/tianyan_soft/nginx.install。

在这个目录下分别新建两个目录用于安装nginx和keepalived,解压两个压缩包。

执行安装命令:


 
  1. ./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \
  2. --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \
  3. --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \
  4. --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \
  5. --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \
  6. --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \
  7. --user=tianyan --group=tianyan \
  8. --with-http_stub_status_module \
  9. --with-http_gzip_static_module \
  10. --with-http_ssl_module \
  11. --with-http_realip_module \
  12. --with-threads \
  13. --with-pcre \
  14. --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \
  15. --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \
  16. --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \
  17. --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \
  18. --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi

如果报错,记得安装相关依赖:


 
  1. yum install gcc gcc-c++

 
  1. nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。

注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。

原因:Linux只有root用户可以使用1024一下的端口

解决办法:

1.按照root权限启动

2.将 /usr/local/nginx/conf/nginx.conf 文件中的80端口改为1024以上。

安装keepalived


 
  1. ./configure --prefix=/usr/local/keepalived

上述命令执行完毕后继续执行:


 
  1. make && make install

安装完毕后,目录是这个样子:

Nginx+Keepalived实现双机主备的方法

将配置文件拷贝到系统对应的目录下


 
  1. mkdir /etc/keepalived
  2. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  3. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

编辑 master 节点的 keepalived.conf


 
  1. vim /etc/keepalived/keepalived.conf

内容参考如下:


 
  1. ! Configuration File for keepalived
  2.  
  3. global_defs {
  4. #一个没重复的名字即可
  5. router_id hyq_slave
  6. }
  7.  
  8.  
  9. #ng是否运行
  10. vrrp_script chk_nginx {
  11. script "/etc/keepalived/nginx_check.sh"
  12. interval 2
  13. weight -20
  14. }
  15.  
  16. vrrp_instance VI_1 {
  17. state BACKUP # 必填,可以是MASTER或BACKUP
  18.  
  19. interface ens33
  20. virtual_router_id 101
  21. priority 90
  22. advert_int 1
  23.  
  24. # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
  25. # 本机ip
  26. unicast_src_ip 192.168.124.14
  27. unicast_peer {
  28. # 其他机器ip
  29. 192.168.124.13
  30. }
  31. # 设置nopreempt防止抢占资源
  32. nopreempt
  33.  
  34. authentication {
  35. auth_type PASS
  36. auth_pass 1111
  37. }
  38.  
  39. # 与上方nginx运行状况检测呼应
  40. track_script {
  41. chk_nginx
  42. }
  43. virtual_ipaddress {
  44. 192.168.124.20
  45. }
  46. }

编辑 slave 节点的 keepalived.conf


 
  1. vim /etc/keepalived/keepalived.conf

 
  1. ! Configuration File for keepalived
  2.  
  3. global_defs {
  4. #一个没重复的名字即可
  5. router_id hyq_slave
  6. }
  7.  
  8.  
  9. #ng是否运行
  10. vrrp_script chk_nginx {
  11. script "/etc/keepalived/nginx_check.sh"
  12. interval 2
  13. weight -20
  14. }
  15.  
  16. vrrp_instance VI_1 {
  17. state BACKUP # 必填,可以是MASTER或BACKUP
  18.  
  19.  
  20. interface ens33
  21. virtual_router_id 101
  22. priority 90
  23. advert_int 1
  24.  
  25. # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
  26. # 本机ip
  27. unicast_src_ip 192.168.124.14
  28. unicast_peer {
  29. # 其他机器ip
  30. 192.168.124.13
  31. }
  32. # 设置nopreempt防止抢占资源
  33. nopreempt
  34.  
  35. authentication {
  36. auth_type PASS
  37. auth_pass 1111
  38. }
  39.  
  40. # 与上方nginx运行状况检测呼应
  41. track_script {
  42. chk_nginx
  43. }
  44. virtual_ipaddress {
  45. 192.168.124.20
  46. }
  47. }

编写nginx_check.sh脚本

在/etc/keepalived目录下新建nginx_check.sh脚本


 
  1. touch nginx_check.sh

编辑其内容为:


 
  1. #!/bin/sh
  2. A=`ps -C nginx --no-header |wc -l`
  3. if [ $A -eq 0 ]
  4. then
  5. /usr/sbin/nginx
  6. sleep 1
  7. A2=`ps -C nginx --no-header |wc -l`
  8. if [ $A2 -eq 0 ]
  9. then
  10. systemctl stop keepalived
  11. fi
  12. fi

含义是:如果 nginx 停止运行,尝试启动,但是如果无法启动,则杀死本机的 keepalived 进程, keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。 注意: /usr/sbin/nginx是nginx的启动命令,如果你安装到其他目录,则相应的替换。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载