【实战】基于Docker Compose与MySQL主从的Nacos三节点集群高可用部署全攻略
1. 环境准备与规划在开始部署Nacos三节点集群之前我们需要先做好环境规划和准备工作。我建议使用三台物理机或虚拟机每台机器至少4核CPU、8GB内存和50GB磁盘空间。这个配置能够满足中小型生产环境的需求如果业务量较大可以适当增加资源。网络规划是重中之重我遇到过不少因为IP设置不当导致的集群通信问题。建议为每台机器分配固定IP并确保它们之间能够互相ping通。防火墙需要开放8848Nacos服务端口、3306MySQL端口以及集群节点间通信所需的端口。在实际操作中我曾经因为忘记开放7946和4789端口导致容器网络异常排查了半天才发现问题。Docker环境建议使用较新版本我测试过Docker 20.10.x和Docker Compose 1.29.x的组合比较稳定。安装完成后记得配置国内镜像源加速下载否则拉取镜像时会非常慢。可以通过修改/etc/docker/daemon.json文件来配置镜像源{ registry-mirrors: [https://registry.docker-cn.com] }2. MySQL主从数据库搭建2.1 主库配置MySQL主库是整个Nacos集群的数据中枢配置不当会导致严重的数据一致性问题。我推荐使用MySQL 5.7版本因为Nacos官方对这个版本的支持最好。创建mysql-master目录后docker-compose.yml文件可以这样配置version: 3.8 services: mysql: image: nacos/nacos-mysql:5.7 container_name: mysql-master environment: MYSQL_ROOT_PASSWORD: your_secure_password MYSQL_DATABASE: nacos MYSQL_USER: nacos MYSQL_PASSWORD: nacos_password volumes: - ./data:/var/lib/mysql - ./conf/my.cnf:/etc/mysql/my.cnf ports: - 3306:3306 restart: unless-stopped关键的my.cnf配置需要特别注意以下几个参数server-id必须是唯一的我一般用IP最后一段作为IDlog-bin开启二进制日志binlog-format建议使用MIXED模式适当调大max_allowed_packet避免大数据量同步失败2.2 从库配置从库配置与主库类似但有几点关键区别server-id必须不同需要配置relay-log相关参数可以添加read-only1防止误操作我遇到过从库同步延迟的问题后来发现是因为网络带宽不足。建议主从服务器部署在同一个机房或可用区网络延迟控制在1ms以内。2.3 主从同步配置配置主从同步时最容易出错的是master_log_file和master_log_pos的设置。正确的做法是先在主库执行SHOW MASTER STATUS;记录下File和Position值然后在从库执行CHANGE MASTER TO MASTER_HOST主库IP, MASTER_USERrepl, MASTER_PASSWORDrepl_password, MASTER_LOG_FILEmysql-bin.000003, MASTER_LOG_POS154; START SLAVE;验证同步状态时要确保Slave_IO_Running和Slave_SQL_Running都是YesSeconds_Behind_Master为0或很小的值。3. Nacos集群部署3.1 第一个节点配置Nacos节点的配置有几个关键点需要注意必须使用host网络模式或配置正确的容器网络每个节点的hostname必须唯一集群节点列表必须正确配置这是我常用的docker-compose.yml配置version: 3.8 services: nacos: image: nacos/nacos-server:latest container_name: nacos-node1 hostname: nacos-node1 environment: - MODEcluster - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOST主库IP - MYSQL_SERVICE_DB_NAMEnacos - MYSQL_SERVICE_PORT3306 - MYSQL_SERVICE_USERnacos - MYSQL_SERVICE_PASSWORDnacos_password - NACOS_SERVERSnacos-node1:8848 nacos-node2:8848 nacos-node3:8848 - PREFER_HOST_MODEhostname volumes: - ./logs:/home/nacos/logs - ./conf/application.properties:/home/nacos/conf/application.properties ports: - 8848:8848 restart: always3.2 集群节点互联Nacos集群节点间的通信依赖于正确的IP和端口配置。我建议在每台服务器上配置hosts文件或者使用DNS解析确保节点能够互相解析主机名。常见的坑点包括防火墙未开放8848端口节点列表配置错误网络延迟过高导致选举失败可以通过检查日志文件/home/nacos/logs/nacos-cluster.log来排查集群通信问题。3.3 健康检查与监控部署完成后建议配置健康检查脚本定期监控Nacos集群状态。可以使用如下命令检查节点健康状态curl -X GET http://localhost:8848/nacos/v1/ns/operator/health正常情况应该返回{status:UP}。我还推荐配置Prometheus监控Nacos的各项指标便于及时发现性能问题。4. 负载均衡与高可用4.1 Nginx负载均衡配置使用Nginx做负载均衡时upstream配置需要包含所有Nacos节点upstream nacos-cluster { server nacos-node1:8848; server nacos-node2:8848; server nacos-node3:8848; keepalive 64; } server { listen 8848; server_name nacos.example.com; location / { proxy_pass http://nacos-cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }4.2 Keepalived高可用对于生产环境建议使用Keepalived实现Nginx的高可用。配置虚拟IP后客户端只需要连接这个VIP即可后端Nginx故障时会自动切换。Keepalived的配置示例vrrp_script chk_nginx { script /usr/bin/pgrep nginx interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 100 advert_int 1 virtual_ipaddress { 192.168.1.100/24 } track_script { chk_nginx } }4.3 客户端配置建议客户端连接Nacos集群时建议使用如下配置方式spring.cloud.nacos.discovery.server-addr192.168.1.100:8848 spring.cloud.nacos.config.server-addr192.168.1.100:8848这样客户端会通过VIP连接到Nacos集群即使某个Nginx或Nacos节点故障也不会影响服务发现功能。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2549342.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!