使用Nginx1.25.4版本做负载均衡、搭建Nacos2.3.0服务集群

news/2024/7/10 3:11:27 标签: 负载均衡, 运维

关于使用版本问题上,其实小白更喜欢使用新的版本,因为新的版本功能更多,肯定优化方面不言而喻,懂得都懂,但是新的版本,肯定使用起来更加的速度,性能,也是不言而喻的啊,那是嘎嘎一嘎斯,稳定性较差,坑更多,但是我认为跳坑,更有意思。其实小白不是自虐啊!一方面小白喜欢从坑里爬出来的那份欣喜,最重要的一方面就是可以分享一下,给更多跳坑的人一点点的建议,俗话说我不如地狱谁入地狱!!

好了,收,废话不多说了

前期准备下载 JDK、Maven、Nacos、Nginx

小白使用的版本是JDK17.0.Maven官网:https://maven.apache.org/ 10、Maven3.9.6、Nacos2.3.0、Nginx1.25.4如果专业的话,查看一下版本要求,如果使用SpringalibabbaCloud,Nacos最好不要选择最新版,目前为止SpringalibabaCloud-2023.0.0.0-RC1,最高支持的就是Nacos2.3.0版本。

Nacos

下载 JDK Maven Nacos

Nacos 

Nacos官网下载: https://github.com/alibaba/nacos

点击Releases下的Nacos的版本进行下载,小白使用的是2.3.0 在这里插入图片描述2、找到Assets 如果单纯使用不研究源码直接选择(*.tar.gz)点击 进行下载(注意国外网,不是很好下载,小白祝大家自求多福吧!)自己想想办法 在这里插入图片描述

3、关注自己的jdk版本是否符合Nacos2.3.1这个版本最低要求JDK是1.8+的

JDK

oracle官网Oracle | Cloud Applications and Cloud Platform 下载JDK 注意(.tar.gz)版本的

2、进入官网选择product-->java 在这里插入图片描述 3、Dowload 在这里插入图片描述 4、选择版本进行下载 在这里插入图片描述

Maven

Maven官网:Maven – Welcome to Apache Mavenicon-default.png?t=N7T8https://maven.apache.org/

安装 JDK、Maven、Nacos

JDK

小白使用的是SecureCRT工具将包上传到linux上

使用FTP(快捷键:ALT+P)上传JDK、Nacos Server的包上传至虚拟机上

上传JDK

将jdk移动暗转目录
mv jdk-21_linux-x64_bin.tar.gz /usr/local/etc

将jdk安装包解压
tar -zxvf jdk-21_linux-x64_bin.tar.gz

解压完成

删除jdk包
rm -i jdk-21_linux-x64_bin.tar.gz
删除自带的JDK
查看自带jdk
rpm -qa | grep java

删除java
    yum -y remove java-1.8.0-openjdk-headless-1.8.0.362.b09-4.el9.x86_64
    yum -y remove javapackages-filesystem-6.0.0-4.el9.noarch
    yum -y remove tzdata-java-2023c-1.el9.noarch

配置环境变量
cd /
vim /etc/profile
找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

点击英文字母 i 进入写入模式

编写java环境变量

# setting java evironment then reloading source etc/profile
JAVA_HOME=/usr/local/etc/jdk-21.0.2
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

ESC + : +wq :写入并退出

重新加载 profile 文件

source /etc/profile

查看java版本(有时候会显示 Command not found)吓一跳吧!哈哈哈
java -version

进入jdk安装目录的bin目录首次运行
cd /usr/local/etc/jdk-21.0.2/bin
./java -version

诶!如果在不对了就检查一次 profile吧! 安全起见Linux上JDK版本要与 主机上的JDK的版本保持一致,避免不必要的麻烦

Maven

将Apache-Maven移动至安装目录

解压Maven
tar -zxvf apache-maven-3.9.6-bin.tar.gz

查看,并删除 .tar文件
ls 
rm -i apache-maven-3.9.6-bin.tar.gz
ls

改Maven名字

# apache-maven-3.9.6     解压后的初始名称
# maven-3.9.6            更改后的名称
mv apache-maven-3.9.6 maven-3.9.6

退回至root 编写环境变量
cd /
vi /etc/profile

`` 这里有个小技巧 ,就是提前复制 Maven的路径然后再编写环境变量 ``

cd /usr/local/etc/Maven/maven-3.9.6

什劳子 i 写入模式 、ESC + :+wq 进行写入不用说了吧 !

重载profile文件
source /etc/profile
查看mvn版本
mvn -version

Nacos Server

使用Secure CRT 上传 Nacos

移动 Nacos至安装目录
mv nacos-server-2.3.0.tar.gz /usr/local/etc/
cd /usr/local/etc

解压Nacos包
tar -zxvf nacos-server-2.3.0.tar.gz 

删除Nacos安装包
rm -i nacos-server-2.3.0.tar.gz 

启动Nacos Server
cd /
 cd /usr/local/etc/nacos/bin
 ls
 sh startup.sh -m standalone # 单机模式

查看后台运行面板
cat /usr/local/etc/nacos/logs/start.out

console:会有一个地址 http://000.000.000.000:8848/nacos/index.html

访问 Nacos Server服务器

是因为没有开启端口号 关闭Nacos

sh shutdown.sh

开启8848 指定端口
查看防火墙状态
firewall-cmd --state #显示防火墙状态

开放端口号
 firewall-cmd --add-port=8848/tcp #设置临时端口
 firewall-cmd --add-port=8848/tcp --permanent  #设置永久开放此端口

重新加载并查看端口号

firewall-cmd --reload        # 重新加载防火墙
firewall-cmd  --list-port    # 查看开防火墙开放的端口号

重启Nacos Server并访问

http://000.000.000.000:8848/nacos/index.html

成功访问!

此时,页面是可以访问的,但是要使用程序运行会报错误gRpc 和connection timeout错误,是因为Nacos2.0 之后采用grpc协议,这与传统的访问并不相同的是grpc的端口号会向前移动1000、1000+1或者向后移动1000举例说明8848端口号 8848 + - 1000、8848+1000+1 就是7848 -- 8848 -- 9848--9849

导致连接超时(因为根本连接不上)

解决问题

CentOS Stream9 添加端口号

## 8848端口已经添加完了 --permanent 永久开放端口号
firewall-cmd --add-port=7848/tcp --permanent
firewall-cmd --add-port=9848/tcp --permanent
firewall-cmd --reload        # 重新加载防火墙
firewall-cmd --list-port    #查看防火墙开放的端口号
## 删除端口(举例说明)
firewall-cmd --remove-port=8080/tcp --permanent

已经可以注册了

Nacos集群

相信你们都应搭建起来自己单机版的Nacos了,下面我们搭建集群,嘎嘎简单!

准备CentOS

克隆我们单机的Nacos的CentOS就行,用几个克隆几个,小白认为服务器个数要是奇数的(不要忘记修改IP地址,反正吧!不修改也不会报错的,但是公司服务器肯定不是同个IP的,模拟也要像一点儿) 不会修改的小白主页中找CentOS Stream 9 修改静态IP就行

修改配置
进入到Nacos的bin目录中

编辑 startup.sh
vi startup.sh

修改 运行内存(如果自己的虚拟机空间够大的话,不用修改,其实小白喜欢内存大的,但是我的虚拟机空间小) 上面说如果是standalong内存是。。。。else(就是说不是单机状态的内存是2g/2g/1g)         

修改,必须修改!我内存一共才设置成2G呀!!!!

i写入模式

ESC : wq 写入并退出

编辑Nacos config
 cd ../conf
修改application.properties
 vi application.properties

对了还要准备一个mysql,一般本地都有开放端口就行了,然后还要在MySQL中创建一个Nacos数据库;创建表 此表有迹可循啊

打开它,赋值它的所有吧!在MySQL中粘贴运行!

修改cluster.conf文件

咦咦咦!!!咋没有尼!纳尼!

cp cluster.conf.example cluster.conf

编辑cluster.conf 添加Nacos集群ip、端口号 Nacos服务的IP地址:端口号

开放端口(关键所在)

每个Nacos服务都要开放Nacos集群成员中的每个Nacos服务的端口(grpc) 我搭建三个Nacos服务,端口号为 8848、8849、8850 所以每个Nacos服务开放的端口加上grpc限制所以端口号为: Nacos1端口号:7848、8848、9848 Nacos2端口号:7849、8849、9849 Nacos3端口号:7850、8850、9850

Nacos1开放的端口号为:

firewall-cmd --add-port=7848/tcp --permanent
firewall-cmd --add-port=8848/tcp --permanent
firewall-cmd --add-port=9848/tcp --permanent
firewall-cmd --add-port=7849/tcp --permanent
firewall-cmd --add-port=8849/tcp --permanent
firewall-cmd --add-port=9849/tcp --permanent
firewall-cmd --add-port=7850/tcp --permanent
firewall-cmd --add-port=8850/tcp --permanent
firewall-cmd --add-port=9850/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port

我的娘啊!晕晕,不怕,小白能解决

# 批量开放端口号,端口号分段添加
firewall-cmd --add-port=7848-7853/tcp --permanent
firewall-cmd --add-port=8848-8853/tcp --permanent
firewall-cmd --add-port=9848-9853/tcp --permanent

# 重新加载
firewall-cmd --reload

# 查看开放的端口号
firewall-cmd --list-port

飞起来!

每台Nacos服务器在不开放所有端口号的情况下,只有本机是在线状态,其他Nacos均是Down机状态

每台Nacos开启所有Nacos端口号

Nginx

nginx官网

nginx官网:nginx newsicon-default.png?t=N7T8https://nginx.org/

nginx官网下载:https://nginx.org/en/download 在这里插入图片描述​ 上传文件到Linux系统上 在这里插入图片描述​ 创建文件夹在/usr/local/etc/(这是小白自己的爱好,可以不用创建文件夹)

cd /usr/local/etc/
mkdir nginx

Nginx压缩文件移动至指定文件夹

# 将Nginx压缩文件移动至指定地址
mv nginx-1.25.4.tar.gz /usr/local/etc/nginx/
# 进入指定的文件夹中
cd /usr/local/etc/nginx/

在这里插入图片描述

解压Nginx文件

解压文件

tar -zxvf nginx-1.25.4.tar.gz

在这里插入图片描述

删除压缩文件

rm -i nginx-1.25.4.tar.gz

在这里插入图片描述

安装Nginx所使用的环境
# 包括 gcc、pcre、zlib 、openssl

yum -y install gcc-c++
​
yum -y install pcre pcre-devel
​
yum -y install zlib zlib-devel
​
yum -y install openssl openssl-devel
​
配置Nginx文件

nginx-1.25.4 configure文件配置及插件

--with-cc=cl
--builddir=objs.msvc8
--with-debug
--prefix=
--conf-path=conf/nginx.conf
--pid-path=logs/nginx.pid
--http-log-path=logs/access.log
--error-log-path=logs/error.log
--sbin-path=nginx.exe
--http-client-body-temp-path=temp/client_body_temp
--http-proxy-temp-path=temp/proxy_temp
--http-fastcgi-temp-path=temp/fastcgi_temp
--http-scgi-temp-path=temp/scgi_temp
--http-uwsgi-temp-path=temp/uwsgi_temp
--with-cc-opt=-DFD_SETSIZE=1024
--with-pcre=objs.msvc8/lib/pcre2-10.39
--with-zlib=objs.msvc8/lib/zlib-1.3.1
--with-http_v2_module
--with-http_realip_module
--with-http_addition_module
--with-http_sub_module
--with-http_dav_module
--with-http_stub_status_module
--with-http_flv_module
--with-http_mp4_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_auth_request_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_slice_module
--with-mail
--with-stream
--with-stream_realip_module
--with-stream_ssl_preread_module
--with-openssl=objs.msvc8/lib/openssl-3.0.13
--with-openssl-opt='no-asm no-tests
-D_WIN32_WINNT=0x0501'
--with-http_ssl_module
--with-mail_ssl_module
--with-stream_ssl_module

配置configure配置文件

#执行命令
# 文件的编译目录和解压目录不能再同一个文件夹
#prefix= 指向安装目录(编译安装)
#sbin-path= 指向Nginx 启动程序
#conf-path= 指向配置文件(nginx.conf)
#error-log-path= 指向错误日志目录
#pid-path= 指向pid文件(nginx.pid)
#http-log-path= 设定access log路径
#with-http_gzip_static_module 启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
#with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
#with-http_ssl_module 启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
#支持http2
#with-http_v2_module
#支持Debug模式
# with-http-Debug
# 安装 Stream
# --with-stream
# nginx 如果整合Nacos2.0+版本需要安装Stream 模块和http-v2 因为要使用grpc就要涉及到端口转移,要用到Stream模块 
​
./configure --prefix=/usr/local/etc/nginx --sbin-path=/usr/local/etc/nginx/install/sbin --conf-path=/usr/local/etc/nginx/install/conf/nginx.conf  --error-log-path=/usr/local/etc/nginx/logs/error.log --pid-path=/usr/local/etc/nginx/logs/nginx.pid  --http-log-path=/usr/local/etc/nginx/logs/access.log --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-http-v2-module --with-stream_realip_module --with-stream_ssl_preread_module --with-http-Debug --with-stream
​
安装Nginx
make
make install
启动Nginx

进入Nginx的sbin文件夹

cd /usr/local/etc/workspace-nginx/nginx-1.25.4/sbin/

启动Nginx

./nginx

在这里插入图片描述

启动命令
# 启动 nginx:
./nginx
# 优雅停止 nginx:
./nginx -s quit
# 快速停止 nginx:
./nginx -s stop
# 重启nginx:
./nginx -s reload

在这里插入图片描述

开放端口号

通过上面控制台输出 端口号是80端口 开放80端口

在这里插入图片描述

​ 重启Nginx

在这里插入图片描述

访问http://+你的IP地址+:80

在这里插入图片描述

配置环境变量
编写profile文件
cd /
vi /etc/profile

i进入写入模式

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
​
# setting Nginx environment
NGINX_HOME=/usr/local/etc/workspace-nginx/nginx-1.25.4
PATH=$PATH:$NGINX_HOME/sbin
export NGINX_HOME PATH

ESC :wq 进行写入

重新加载profile文件
source /etc/profile
编写systemd单元文件管理nginx服务

Nginx作为服务程序,需要为其编写一个单元文件以便systemd能够管理它,在/usr/lib/systemd/system目录下创建一个nginx.service文本文件

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
#自己nginx启动的pid文件自己找到文件目录
PIDFile=/usr/local/etc/nginx/nginx-1.25.4/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/local/etc/nginx/nginx-1.25.4/sbin/nginx -t -c /usr/local/etc/nginx/nginx-1.25.4/conf/nginx.conf
ExecStart=/usr/local/etc/nginx/nginx-1.25.4/sbin/nginx -c /usr/local/etc/nginx/nginx-1.25.4/conf/nginx.conf
​
ExecReload=/usr/local/etc/nginx/nginx-1.25.4/sbin/nginx -s reload
# 默认
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
重新加载system文件

要让systemd重新识别此单元文件,通常执行systemctl daemon-reload命令重载配置,这样就可以使用systemd来管理nginx的启动、重启。

systemctl daemon-reload            # 重新加载
systemctl restart nginx            # 重启Nginx.service
systemctl status nginx.service     # 查看状态

img

可以看到nginx的状态为running~

Nginx搭建Nacos集群

编写Nginx conf文件

vi /usr/local/etc/nginx/install/conf/nginx.conf
# http 和Stream 是同级模块
http {
upstream nacos-cluster {
        # nacos cluster IP port
        server 000.000.000.000:8848;
​
        server 000.000.000.000:8849;
​
        server 000.000.000.000:8850;
​
        server 000.000.000.000:8851;
​
        server 000.000.000.000:8852;
​
    }
     server {
        # listen port
        listen          8888;
        # server name
        server_name     localhost;
        # location configure
        location /nacos/ {
                proxy_pass http://nacos-cluster/nacos/;
        }
    }
}
stream {
    # nacos cluster offset port Nacos集群偏移端口
    upstream nacos-cluster-grpc {
        #grpc nacos server IP port
        server 000.000.000.000:9848;
​
        server 000.000.000.000:9849;
​
        server 000.000.000.000:9850;
​
        server 000.000.000.000:9851;
​
        server 000.000.000.000:9852;
    }
​
    # server proxy offset port
    server {
        listen  9888;
        proxy_pass nacos-cluster-grpc;
    }

重新加载Nginx、重启Nginx

# 重新加载
systemctl daemon-reload
# 重启Nginx
systemctl restart nginx
#查看Nginx运行状态
systemctl status nginx

开放偏移端口号

# 开放端口号
firewall-cmd --add-port=8888/tcp --permanent
firewall-cmd --add-port=9888/tcp --permanent
# 重新加载 防火墙
firewall-cmd --reload
# 产看端口号
firewall-cmd --list-port


http://www.niftyadmin.cn/n/5452988.html

相关文章

Matlab之求直角坐标系下两直线的交点坐标

目的:在直角坐标系下,求两个直线的交点坐标 一、函数的参数说明 输入参数: PointA:直线A上的点坐标; AngleA:直线A的倾斜角,单位度; PointB:直线B上的点坐标&#xf…

EPSON推出的实时时钟模块RX8130CE功耗低至300nA、从容应对各种使用场景

随着科技的进步和消费者需求的不断变化,笔记本电脑市场继续展现出强劲的发展势头一方面移动性和轻薄性成为主流,另外一方面性能在不断提升,功能也日益丰富。实时时钟模组,作为提供时间和定时功能的单元模块,是笔记本电…

速盾:vue可以用cdn吗

Vue可以使用CDN(Content Delivery Network)来引入,这是一种分发网络,可以加速网站或应用的静态资源加载,从而提供更快的用户体验。在使用CDN之前,我们需要了解一些基本概念和步骤。 CDN是一个分布式系统&a…

FastAPI+React全栈开发07 MongoDB数据库的结构

Chapter02 Setting Up the Document Store with MongoDB 02 The structure of a MongoDB database FastAPIReact全栈开发07 MongoDB数据库的结构 MongoDB is arguably the most used NoSQL database today, its power, ease of use, and versatility make it an excellent c…

【Lazy ORM 框架学习】

Gitee 点赞关注不迷路 项目地址 快速入门 模块所属层级描述快照版本正式版本wu-database-lazy-lambdalambda针对不同数据源wu-database-lazy-orm-coreorm 核心orm核心处理wu-database-lazy-sqlsql核心处理成处理sql解析、sql执行、sql映射wu-elasticsearch-starterESESwu-hb…

ABAP - 上传文件模板到SMW0,并从SMW0上下载模板

upload file template to SMW0 and download the template from it 首先上传文件到tcode SMW0 选择新建后,输入文件名和描述,再选择想要上传的文件 上传完成后: 在表WWWPARAMS, WWWDATA里就会有信息存进去 然后就可以程序里写代码了: 屏幕上的效果:

Java项目:77 springboot母婴商城

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本课题后端使用SpringBoot Spring Cloud框架,前端采用html,JQuery,JS,DIVCSS技术进行编程&…

java selenium 元素点击不了

最近做了一个页面爬取,很有意思被机缘巧合下解决了。 这个元素很奇怪,用xpath可以定位元素,但是就是click()不了。 试过了网上搜的一些办法: //尝试一 WebElement a_tag driver.findElement(By.xpath("xxx")); a_tag…