nginx和keepalived 集群实现在centos8简单部署命令

一、nginx环境部署

一、环境部署

1.执行命令安装执行环境

yum -y install gcc
yum -y install pcre-devel
yum -y install zlib-devel


2.执行命令指定执行文件夹的目录 $Nginx_Home = /root/dev/nginx/nginx 自定义目录我这里用简称 $Nginx_Home表示路径

./configure --prefix=/root/dev/nginx/nginx

3.执行命令安装

make && make install 

4.在$Nginx_Home/conf/nginx.conf文件配置配置:

示例一nginx.conf 简单

#简单配置

# 设置服务器组  localhost可以用ip代替
    upstream backend {
            ip_hash;
        server localhost:9001;
        server localhost:9002;
        server localhost:9003;
    }
    server {
        listen 8080;
        server_name localhost;
        
        location / {
            # backend 就是服务器组的名称
            proxy_pass http://backend/;
        }
    }

示例二nginx.conf

#简单了解需要时自己了解
#nginx.conf文件中,添加以下内容(只供参考),这个不能放在http模块里面,否则会报错

stream {
# 添加socket转发的代理
upstream client_a {
hash $remote_addr consistent;
# 转发的目的地址和端口
server ip1:6577 weight=5 max_fails=3 fail_timeout=30s;
server ip2:6588 weight=5 max_fails=3 fail_timeout=30s;
}

upstream client_b {
hash $remote_addr consistent;
# 转发的目的地址和端口
server ip3:6577 weight=5 max_fails=3 fail_timeout=30s;
server ip4:6588 weight=5 max_fails=3 fail_timeout=30s;
}

# 提供转发的服务,即访问localhost:30001,会跳转至代理bss_num_socket指定的转发地址
server {
listen 30001;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass client_a;
access_log /soft/nginx/logs/access.log;
error_log /soft/nginx/logs/error.log;
}
server {
listen 30002;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass client_b;
access_log /soft/nginx/logs/access.log;
error_log /soft/nginx/logs/error.log;
}
}

#或者在tcp.d下新建个bss_num_30001.conf文件,然后在nginx.conf引用该文件
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {

}

5.这时候进入安装好的目录启动$Nginx_Home/sbinnginx


    ./nginx #启动
    ./nginx -s stop   #快速停止
    ./nginx -s quit   # 优雅关闭,在退出前完成已经接受的连接请求
    ./nginx -s reload    #重新加载配置


将nginx相关的命令安装成系统服务

     1.执行命令


    vi /usr/lib/systemd/system/nginx.service

2.添加内容


    #服务脚本内容
    [Unit]
    Description=nginx - web server 
    After=network.target remote-fs.target nss-lookup.target 
 
    [Service] 
    Type=forking 

        #主要这几个加粗目录看是否是$Nginx_Home的目录
    PIDFile=/usr/local/nginx/logs/nginx.pid 
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 

    ExecReload=/usr/local/nginx/sbin/nginx -s reload 
    ExecStop=/usr/local/nginx/sbin/nginx -s stop 
    ExecQuit=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true 

 
    [Install] 
    WantedBy=multi-user.target 

3.重新加载系统服务


    systemctl daemon-reload

4.启动服务


    systemctl start nginx.service

5.开机启动


    systemctl enable nginx.service

二、错误解决方法


    1.如果报错 error: C compiler cc is not found 

    whereis gcc  #就是gcc没有安装 查看是否安装
     yum -y install gcc #执行命令安装


    2.如果报错 error: the HTTP rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_module
    option, or install the PCRE library into the system, or build the PCRE library
    statically from the source with nginx by using --with-pcre=<path> option.

    就是没有安装pcre-devel


    yum -y install pcre-devel #执行命令安装


    3.如果报错 error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib=<path> option.

    就安装

yum -y install zlib-devel


4.用到就执行不需要普通就不用管


如果你想使用openssl 功能,sha1 功能。 那么安装openssl ,sha1 吧


yum install openssl openssl-devel

install perl-Digest-SHA1.x86_64
./configure –with-http_ssl_module  #开启ssl 模块 执行
./configure –with-http_stub_status_module  #启用“server+status”页,执行
#上面两个命令同时启动可以
./configure --with-http_stub_status_module --with-http_ssl_module

5.如果报错-bash: make: 未找到命令执行命令安装

yum -y install gcc automake autoconf libtool make

二、keepalived部署


一、安装环境:

1.安装执行环境


yum install gcc-c++

yum -y install libnl libnl-devel

yum install -y libnfnetlink-devel

  yum -y install openssl-devel

    yum update glib*

2.执行命令配置文件路径 $Keepalived_Home=/root/dev/keepalived/keepalived  $Keepalived_Home简单表示路径

    ./configure --prefix=/root/dev/keepalived/keepalived

3.执行命令安装

make && make install

4.将配置文件拷贝到系统对应的目录   因为默认执行/etc/keepalived目录下的keepalived.conf文件

#创建目录
mkdir /etc/keepalived

#$Keepalived_Home/etc/keepalived/keepalived.conf 文件拷贝到/etc/keepalived里这个文件可以自己生成名称一样就行

#拷贝配置文件
cp $Keepalived_Home/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf

#拷贝系统服务   解压keepalived目录下的路径 和 $Keepalived_Home一般不一样除非自定义一样了
cp 解压keepalived目录下的路径/keepalived/etc/init.d/keepalived  /etc/init.d/

#赋权
 chmod -R 775  /etc/init.d/keepalived

#拷贝系统日志
cp $Keepalived_Home/etc/sysconfig/keepalived /etc/sysconfig/keepalived

5.编辑keepalived.conf文件

vim /etc/keepalived/keepalived.conf

在文件里追加内容 红颜色表示根据自己文件路径和ip更换进去

############################ 全局配置 #############################
  
global_defs {
 
    # 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个
    notification_email {    
        #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务    
        ########@qq.com
    }
    #keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁
    notification_email_from ########@qq.com
    
    #指定发送email的smtp服务器
    smtp_server 127.0.0.1
    
    #设置连接smtp server的超时时间
    smtp_connect_timeout 30
    
    #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。
    router_id node01
}
 
 
############################ VRRPD配置 #############################
 
# 定义nginx_check脚本,脚本执行间隔10秒,权重-10,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
vrrp_script chk_nginx {  
 
    #这里通过脚本监测    
    script "/etc/keepalived/nginx_check.sh"   
    
    #脚本执行间隔,每2s检测一次
    interval 2    
    
    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5    
    weight -10     
    
    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)    
    fall 2     
    
    #检测1次成功就算成功。但不修改优先级    
    rise 1                    
}
 
#定义vrrp实例,VI_1 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
vrrp_instance VI_1 { 
 
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,
    #那么他会就回抢占为MASTER   
    state MASTER 
    
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看
    interface ens160
    
    #当该keepalived切换为MASTER状态时,执行下面的脚本
    #notify_master /etc/keepalived/chk_master.sh
    #当该keepalived切换为BACKUP状态时,执行下面的脚本
    #notify_backup /etc/keepalived/chk_backup.sh

 
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址    
    mcast_src_ip 192.168.37.136
    
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    virtual_router_id 51    
 
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级    
    priority 100
 
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    
    advert_int 1        
 
    #设置验证类型和密码。主从必须一样
    authentication {    
    
        #设置vrrp验证类型,主要有PASS和AH两种
        auth_type PASS           
        
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111           
    }
    
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定
    virtual_ipaddress {          
        192.168.37.101
    }
    
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
    track_script {   
 
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。    
       chk_nginx                    
    }
}

在/etc/keepalived/check_nginx.sh编辑nginx_check.sh文件并且追加内容

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

给check_nginx.sh文件赋权

sudo chmod +x /etc/keepalived/check_nginx.sh

6.编辑keepalived服务配置 

执行命令

vim /usr/lib/systemd/system/keepalived.service

#追加内容

[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
Documentation=man:keepalived(8)
Documentation=man:keepalived.conf(5)
Documentation=man:genhash(1)
Documentation=https://keepalived.org

[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process

############################################主要改这个路径 环境变量
EnvironmentFile=-/root/dev/keepalived/keepalived/etc/sysconfig/keepalived
ExecStart=/root/dev/keepalived/keepalived/sbin/keepalived  $KEEPALIVED_OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

7.执行启动等命令

systemctl start keepalived.service #启动keepalived
 #sudo service keepalived start

systemctl stop keepalived.service #停止keepalived
 #sudo service keepalived stop

systemctl restart keepalived.service #重启keepalived
#sudo service keepalived restart 

systemctl status keepalived.service #查看keepalived状态
#sudo service keepalived status

二、错误解决方法

    1.出现checking openssl/ssl.h usability... no
    checking openssl/ssl.h presence... no
    checking for openssl/ssl.h... no
    就执行


    yum install openssl openssl-devel

    2.出现*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to         support IPv6 with IPVS.

    执行安装libnl 和 libnl-devel:


    yum install -y libnl3.x86_64
    yum install -y libnl3-devel.x86_64

  3.  出现configure: error: !!! Please install libnfnetlink headers. !!!
    解决方案为:


    yum install -y libnfnetlink.x86_64 
    yum install -y libnfnetlink-devel.x86_64


4.当启动出现报错
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2023-11-06 15:55:24 CST; 4s ago
     Docs: man:keepalived(8)
           man:keepalived.conf(5)
           man:genhash(1)
           https://keepalived.org
  Process: 1611 ExecStart=/root/dev/keepalived/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=203/EXEC)


#关闭 openEuler 的SELinux与防火墙 firewall
#1.关闭防火墙
systemctl stop firewalld.service     #关闭防火墙服务
systemctl disable firewalld.service    #关闭防火墙开机自启
#2.关闭 SELinux
#编辑配置文件

vim /etc/selinux/config

#将SELINUX=enforcing 改为 SELINUX=disabled。
#重启生效

shutdown -r now


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值