nginx集群搭建

本文档介绍了如何在服务器上安装Keepalived,并提供了详细的配置步骤,包括设置虚拟路由、监控脚本以及处理权限问题。在配置过程中遇到了Nginx编译安装失败、启动时的日志权限问题以及Nginx用户设置问题,针对这些问题提出了相应的解决方案,如安装依赖、修改脚本权限和创建Nginx用户。
摘要由CSDN通过智能技术生成

前置条件,需要在各服务器安装nginx,安装方式参考Nginx单机安装

1安装keepalived

[root@CentOS002 opt]# yum install keepalived -y

2查看keepalived配置文件

[root@CentOS002 keepalived]# cat /etc/keepalived/keepalived.conf

3修改keepalived配置文件

[root@CentOS002 keepalived]# cat /etc/keepalived/keepalived.conf

主节点配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   ## 标识本节点的字符串,通常为 hostname,也可以是本机ip
   smtp_server 120.26.40.215	
   smtp_connect_timeout 30
   ## 通过它,可以访问到主机,在hosts文件中,要做映射关系,类似于 127.0.0.1 LVS_DEVEL
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance 的优先级
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh" ## 检测 nginx 状态的脚本路径
	interval 2 # (检测脚本执行的间隔)
	weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称

vrrp_instance VI_1 {
 	 ## 主节点为 MASTER, 对应的备份节点为 BACKUP
    state MASTER
    ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同
    interface eth0
    ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
    virtual_router_id 51
    ##节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
    priority 100
    ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
    advert_int 1
    ## 心跳检测需要的密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    ## 追踪 nginx 脚本
    track_script {
    	  check_nginx_alive 
    }
    ## 设置本机内网 IP 地址
    unicast_src_ip 120.26.40.215
    unicast_peer {
    	120.55.75.114            # 对端设备的 IP 地址
    }
    ## 虚拟 ip,可以定义多个
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
    notify_master "/usr/local/src/nginx_check.sh MASTER"
    notify_backup "/usr/local/src/nginx_check.shh BACKUP"
    notify_fault "/usr/local/src/nginx_check.sh FAULT"
    notify_stop "/usr/local/src/nginx_check.sh STOP"
    garp_master_delay 1    # 设置当切为主状态后多久更新 ARP 缓存
    garp_master_refresh 5   # 设置主节点发送ARP报文的时间间隔
    track_interface {
        eth0               # 使用绑定 VIP 的网卡 例如 eth0
    }

}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

在/usr/local/src下创建脚本nginx_check.sh

[root@CentOS001 keepalived]# cd /usr/local/src
[root@CentOS001 keepalived]# vi nginx_check.sh

编辑检测脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

脚本赋权

[root@CentOS001 sbin]# chmod +x /usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

启动

[root@CentOS001 sbin]# systemctl start keepalived.service
或
[root@CentOS001 sbin]# /usr/sbin/./keepalived

查看虚拟地址

[root@CentOS001 sbin]# ip addr 

/usr/local/nginx/sbin/nginx -t

错误

问题1:

[root@CentOS002 nginx-1.20.2]# make && make install
make: *** 没有规则可制作目标“build”,由“default” 需求。 停止。
[root@CentOS002 nginx-1.20.2]# 

安装Nginx相关依赖包:

安装依赖
[root@CentOS002 nginx-1.20.2]# yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel
检查依赖
[root@CentOS003 nginx-1.20.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module

问题2 启动nginx:

nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied)
2018/09/13 14:50:07 [emerg] 49801#0: open() "/usr/local/nginx/logs/access.log" failed (13: Permission denied)

赋权

关闭防火墙

问题3:

[root@CentOS002 nginx-1.20.2]# /usr/local/nginx/sbin/nginx
nginx: [emerg] getpwnam("nginx") failed

设置nginx用户

[root@CentOS002 nginx-1.20.2]# useradd -s /sbin/nologin -M nginx

1

2

3

[root@localhost nginx-1.11.2]

# /usr/local/nginx/sbin/nginx

[root@localhost nginx-1.11.2]

# netstat -tlunp | grep nginx

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9709

/nginx

: master 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Docker实现Nginx集群搭建,可以按照以下步骤进行操作: 1. 首先,确保已经安装了Docker和Docker Compose。 2. 创建一个用于存放Nginx配置文件的目录,比如`nginx-config`。 3. 在该目录下创建一个`nginx.conf`文件,用于配置Nginx。 ```nginx # nginx.conf events { worker_connections 1024; } http { upstream backend { server backend1; server backend2; server backend3; } server { listen 80; location / { proxy_pass http://backend; } } } ``` 这个配置文件中定义了一个名为`backend`的上游服务器池,其中包含了3个后端服务器。 4. 在同一目录下创建一个名为`docker-compose.yml`的文件,用于定义Docker容器。 ```yaml # docker-compose.yml version: '3' services: nginx: image: nginx ports: - 80:80 volumes: - ./nginx-config/nginx.conf:/etc/nginx/nginx.conf depends_on: - backend1 - backend2 - backend3 backend1: image: <your_backend_image> backend2: image: <your_backend_image> backend3: image: <your_backend_image> ``` 在这个文件中,我们定义了一个Nginx服务和3个后端服务。Nginx服务使用Nginx官方提供的镜像,并将80端口映射到主机的80端口。Nginx容器还挂载了之前创建的`nginx.conf`文件作为配置文件。后端服务可以使用自己的后端镜像进行定义。 5. 创建并启动容器集群。 在终端中,定位到存放`docker-compose.yml`文件的目录,并运行以下命令: ```bash docker-compose up -d ``` 这将会启动Nginx和后端服务的容器。 现在,你已经成功使用Docker搭建了一个简单的Nginx集群。可以通过访问`http://localhost`来测试该集群的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值