网站运营seo,阳东区网络问政平台,贵阳网站建开发,网站建设规划公司首先找到Nacos官网给的Github仓库#xff0c;里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理#xff0c;负载均衡…首先找到Nacos官网给的Github仓库里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理负载均衡1. 配置文件修改2. 运行 一. 脚本概况
我们要运行的脚本是example/cluster-hostname.yaml可以看到里面包含了来自外界的${NACOS_VERSION}和加载外界env文件的env_file条目于是我们可以找到本yaml所依赖的以下文件列表
example/.envenv/mysql.envenv/nacos-hostname.env
二. 自定义修改
1. example/cluster-hostname.yaml
找到mysql-healthcheck-test修改为
mysql:healthcheck:test: [ CMD, mysqladmin ,ping, -h, localhost, -u, root, -p${MYSQL_ROOT_PASSWORD} ]这样做的原因是防止mysql容器测试时一直报错Access denied(password: No)
2. example/.env
在后面运行docker compose时会加载这个文件为环境变量填入${NACOS_VERSION}和${MYSQL_ROOT_PASSWORD}。
NACOS_VERSIONv2.3.0
MYSQL_ROOT_PASSWORD1009NACOS_VERSION的版本选多少可以参考Nacos官方的对照表。 官方指出Nacos有一定向下兼容性所以选择新一点的Nacos版本也没问题同时某些版本的Nacos已被指出存在部分问题。 MYSQL_ROOT_PASSWORD为数据库root密码。
3. env/mysql.env
这是cluster-hostname.yaml中mysql容器使用的env_file
MYSQL_ROOT_PASSWORD1009
MYSQL_DATABASEnacos
MYSQL_USERnacos
MYSQL_PASSWORDnacos
LANGC.UTF-8MYSQL_ROOT_PASSWORD为数据库root密码和上面那个保持一致 MYSQL_DATABASE为数据库名称 MYSQL_USER为数据库用户名 MYSQL_PASSWORD为用户(nacos)密码
4. env/nacos-hostname.env
这是cluster-hostname.yaml中3个nacos容器使用的env_file
PREFER_HOST_MODEhostname
NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848
SPRING_DATASOURCE_PLATFORMmysql
MYSQL_SERVICE_HOSTmysql
MYSQL_SERVICE_DB_NAMEnacos
MYSQL_SERVICE_PORT3306
MYSQL_SERVICE_USERnacos
MYSQL_SERVICE_PASSWORDnacos
MYSQL_SERVICE_DB_PARAMcharacterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseSSLfalseallowPublicKeyRetrievaltrue
NACOS_AUTH_IDENTITY_KEY2222
NACOS_AUTH_IDENTITY_VALUE2xxx
NACOS_AUTH_TOKENSecretKey012345678901234567890123456789012345678901234567890123456789关于docker nacos的环境变量可以参考Nacos官方给的一张表格。 为什么NACOS_SERVERS填的是nacos1nacos2nacos3不是具体的ip地址 为什么MYSQL_SERVICE_HOST(数据库连接地址)填的是mysql 同时MYSQL_SERVICE_PORT应该填mysql容器的端口还是映射到主机的端口 因为三个nacos容器和一个mysql在一个docker compose文件里也就是cluster-hostname.yaml那么在运行这个yaml文件时docker会默认把这个yaml里所有的容器放到一个新的bridge网络中于是四个容器可以通过它们在这个bridge网络里的ip互相访问同时也可以通过hostname互相访问如果没有指明hostname那么默认就是服务的名称(services)比如mysql的就是mysql。同时这四个容器之间互相访问的端口是容器开放的端口而不是映射到主机的端口。 三、运行
在根目录运行docker-compose -f example/cluster-hostname.yaml up 然后浏览器就可以访问localhost:port/nacosport是三个nacos的8848端口映射到主机的三个端口之一。
四、nginx反向代理负载均衡
docker pull nginx:stable下载nginx的稳定版镜像 然后用这个镜像随便启动一个容器把里面的以下文件copy到主机修改后做-v映射。
/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf
1. 配置文件修改
其中nginx.conf无需修改 default.conf参考以下示例
upstream nacos-cluster {server 172.29.0.3:8848;server 172.29.0.4:8848;server 172.29.0.5:8848;
}server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {proxy_pass http://nacos-cluster;# root /usr/share/nginx/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 /usr/share/nginx/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 Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}
}主要注意两个地方一个是
upstream nacos-cluster {server 172.29.0.3:8848;server 172.29.0.4:8848;server 172.29.0.5:8848;
}这里面写明了3个nacos容器的ip和端口其中ip是它们处于docker bridge小局域网中的ip以及port也是容器服务的端口这是因为我们最后会把nginx容器也加入这个bridge网络。
用以下命令查看三个nacos的ip
C:\Users\mumu\IdeaProjects\nacos-dockerdocker network ls
NETWORK ID NAME DRIVER SCOPE
fdfe3fcab913 bigdata bridge local
45d79fa3e39e bridge bridge local
2d784bdacaa1 example_default bridge local
83b9f11eccaa host host local
d138886a8b5b none null local
C:\Users\mumu\IdeaProjects\nacos-dockerdocker network inspect example_default
[.....
]另一个是 location / {proxy_pass http://nacos-cluster;# root /usr/share/nginx/html;# index index.html index.htm;}这里的意思是把/的url请求(/的话基本就是所有请求了)全部转发到上面定义的upstream nacos-cluster服务器集群中。 这里默认是以轮询作为负载均衡的策略。
分配方式Nginx的upstream支持5种分配方式下面将会详细介绍其中前三种为Nginx原生支持的分配方式后两种为第三方支持的分配方式1、轮询 轮询是upstream的默认分配方式即每个请求按照时间顺序轮流分配到不同的后端服务器如果某个后端服务器down掉后能自动剔除。upstream backend {server 192.168.200.131:8848;server 192.168.200.131:8849;server 192.168.200.131:8850;}
2、weight 轮询的加强版即可以指定轮询比率weight和访问几率成正比主要应用于后端服务器异质的场景下。upstream backend {server 192.168.200.131:8848 weight1;server 192.168.200.131:8849 weight2;server 192.168.200.131:8850 weight3;}
3、ip_hash 每个请求按照访问ip即Nginx的前置服务器或者客户端IP的hash结果分配这样每个访客会固定访问一个后端服务器可以解决session一致问题。upstream backend {ip_hash;server 192.168.200.131:8848;server 192.168.200.131:8849;server 192.168.200.131:8850;}
4、fair fair顾名思义公平地按照后端服务器的响应时间rt来分配请求响应时间短即rt小的后端服务器优先分配请求。upstream backend {server 192.168.200.131:8848;server 192.168.200.131:8849;server 192.168.200.131:8850;fair;}
5、url_hash与ip_hash类似但是按照访问url的hash结果来分配请求使得每个url定向到同一个后端服务器主要应用于后端服务器为缓存时的场景下。upstream backend {server 192.168.200.131:8848;server 192.168.200.131:8849;server 192.168.200.131:8850;hash $request_uri;hash_method crc32;}其中hash_method为使用的hash算法需要注意的是此时server语句中不能加weight等参数。
2. 运行
参考以下命令运行(cmd版)
docker run -id --namenacos_nginx ^
-p 80:80 ^
-v C:\Users\mumu\IdeaProjects\nacos-docker\nginx\nginx.conf:/etc/nginx/nginx.conf ^
-v C:\Users\mumu\IdeaProjects\nacos-docker\nginx\conf.d\default.conf:/etc/nginx/conf.d/default.conf ^
-v C:\Users\mumu\IdeaProjects\nacos-docker\nginx\logs:/var/log/nginx ^
-v C:\Users\mumu\IdeaProjects\nacos-docker\nginx\html:/usr/share/nginx/html ^
--network example_default ^
nginx:stable最后访问localhost/nacos就可以访问nginxnginx会通过负载均衡的策略将你的请求重定向到nacos集群中的某一个。