离线安装痛苦啊~~~~
1.两台物理机服务器分别开两台windows和1台linux虚拟机
windows作为应用服务器,linux作为转发服务器装配nginx和keepalived
2.nginx安装
因为我这需要负载的主要是tcp请求,所以nginx版本选择1.20.2(1.9版本以上都自带stream,随意选择)
切机开linux虚拟机的时候要选择装载ssh!!!否则没有ssh链接真的难受,鄙人最终选择重装系统。
2.1下载nginx
下载地址
tar文件上传到linux服务器上

2.2安装
解压,记得进入到上传目录
tar -zkvf nginx-1.20.2
切换nginx目录
cd nginx-1.20.2
因为要用tcp,需要下载一个tcp的文件

添加tcp模块
patch -p1 < ../nginx_tcp_proxy_module-master/tcp.patch
检查环境,创建安装文件
./configure --with-stream --add-module=../nginx_tcp_proxy_module-master/
安装,最好管理员安装
sudo make && sudo make install
正常情况下这个时候你的/usr/local文件夹下有一个nginx目录了
安装失败的话可能是缺少环境,大概率是openssl、zlib、pcre这三个,具体看报错信息下载安装就好了
2.3nginx配置
在/usr/local/nginx/conf下编辑nginx.config文件,建议送过ssh工具通过文本打开修改,直接修改太坑了。
命令行修改
直接通过命令行修改
vim nginx.config
完成后通过:wq保存退出即可。
配置如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
#添加的tcp负载配置
stream {
upstream pf1{
server 192.168.40.149:8096 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.40.150:8096 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 8096;
proxy_pass pf1; #要和上面保持一直
}
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
保存退出。
修改失败的话退回到local目录下给文件夹增加读写权限
sudo chmod -R 777 nginx
nginx配置完成

无法访问web情况下可能是防火墙没有禁用
查看防火墙状态
systemctl status firewalld
禁用防火墙
systemctl stop firewalld
2.4错误信息
(1)缺少pcre
./configure: 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.
下载一个安装就行,重复步骤不在赘述,我用的8.40版本
(2)缺少zlib
./configure: 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.
同样安装即可。我用的是1.2.11
3.keepalived安装
3.1安装
下载keepalived上传至linux服务器
解压
tar -zxvf keepalived-2.0.20.tar.gz
切换至keepalived目录下执行
指定目录
./configure --prefix=/usr/local/keepalived/
报错
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
没有openssl或者版本过低吧 具体原因资料太多了,不过我解决问题就是没啥装啥 太费劲就研究新方案
下载一个openssl安装包,我这是1.1.1版本
同样解压、编译、安装不废话了
安装完成后查看版本
openssl version
如果版本没有切换,执行
mv /usr/bin/openssl /usr/bin/openssl.bak
将原始文件备份掉
执行
sudo ln -fs /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -fs /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
这两条应该是添加新版本路径
再次查看版本(可能会提示不存在,没关系,退掉ssh连接重登等一下就好了,我估计可能是查询路径问题)
切换成功

回到keepalived目录下继续编译安装
./configure --prefix=/usr/local/keepalived/
sudo make
sudo make install
安装完成后切换到usr/local/keepalived/etc/keepalived下修改配置文件keepalived.conf
# 修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
# 注意:这个是 master(主机) 的配置文件
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx01 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
script_user root
enable_script_security
}
vrrp_script chk_nginx { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_nginx.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state MASTER # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface eno8 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 68 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 150 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.93.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_nginx
}
notify_master /etc/keepalived/to_master.sh # 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
}
to_master配置
# 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
#!/bin/bash
sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.40.151 "nginx -s stop"
nginx
check_nginx配置
#! /bin/bash
# 当 nginx 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 nginx
nginx_server=`ps -C nginx --no-header | wc -l`
if [ $nginx_server -gt 0 ];then
exit 1
else
nginx
fi
将keepalived添加到环境变量
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
启动&&查看状态
systemctl start keepalived.service
systemctl status keepalived.service
启动成功

ping 虚拟地址

通过虚拟地址访问nginx


测试nginx负载的服务



后面吧备用服务器相同方式布置一遍,搞定
keepalived备用配置
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx02 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和主机区分开,不能使用同一个标识
}
vrrp_script chk_nginx { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_nginx.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state BACKUP # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface ens192 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 149 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.169.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_nginx
}
notify_master /etc/keepalived/to_backup.sh # 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
}
说两个遇到的坑吧
1.防火墙记得关闭
2.负载、和虚拟地址要在同一个网段,不然会以为明明好好的为啥就是不通
3.nginx不知名异常可以到log文件下查看error.log
4.keepalived没有日志,可以查看系统日志
tail -100f /var/log/messages
其他暂时想不起来了,也是一点点搜的资料做个记录,侵权的话联系我删除 谢谢大佬们~
本文详细记录了使用nginx和keepalived在两台物理机上实现双机热备的过程,包括nginx的安装配置,解决依赖问题,如pcre和zlib,以及keepalived的安装与配置,同时提到了防火墙设置、错误排查等关键步骤。

1386

被折叠的 条评论
为什么被折叠?



