SpringCloud-(三)常见分布式环境搭建

本文最后更新于:May 13, 2023 pm

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

目录

MySQL主从复制环境搭建

MySQL的安装:MySQL-Ubuntu20.04安装MySQL8.0以及远程连接

安装并开启远程连接。

主库操作

创建用户

用于从库访问主库。

1
create user 用户名 identified with mysql_native_password by '密码'

设置主库

配置主库,为刚才创建的用户分配一个主从复制的权限。

1
2
grant replication slave on *.* to 用户名;
flush privileges;

查看主库状态

1
show master status;

从库操作

修改配置文件

1
2
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql.service # 重启

找到:server-id;并修改其值,只要保证唯一即可,不要使用默认值。修改完后重启。

修改数据库

执行命令:

1
2
change replication source to
SOURCE_HOST='192.168.0.8',SOURCE_USER='主库创建的用户名称',SOURCE_PASSWORD='密码',SOURCE_LOG_FILE='binlog.000006',SOURCE_LOG_POS=829

注意:HOST为主库的地址;最后两个参数通过在主库执行命令:show master status; 获取。

开启主从复制

1
2
start replica; # 开启
show replica status\G; # 查看状态

可以看见我们刚才的一些信息,其中重要的两个必须为YES才可以:

1
2
Replica_IO_Running: Yes # 负责与主库进行通信,获取二进制日志,暂时放到一个中间表(Realy_Log)中
Replica_SQL_Running: Yes # 将中间表保存的二进制日志信息进行执行,然后插入从库中
  • 当主库挂掉后,前者将会变为Connecting。

测试

完成上述后,在主库中的操作都会同步到从库中。可自行创建库、表进行测试。

重启主库

当主库挂掉,需要重启时。需要先将从库停止复制:

1
stop replica;

然后查看主库的状态:

1
show master status;

如果发生改变,则从从库操作中的 ‘修改数据库’ 操作依次执行。

搭建Nacos集群

这里以搭建一个两个Nacos的小集群,使用Nginx实现负载均衡。

环境安装

JDK8安装

1
apt install openjdk-8-jre-headless # 将8可以改成其他数字,来安装其他jdk版本

还需要进行配置。默认路径:/usr/lib/jvm。可参考:星星之火-服务器部署Springboot+Vue项目以及配置SSL证书

下载上传Nacos

官方地址:https://github.com/alibaba/nacos/releases 。然后解压执行文件 /conf/ 目录下的nacos.mysql.sql。先进入看一眼是哪一个数据库,然后自行创建数据库,再进行执行。压缩包留着,后面要上传服务器。

可能使用Navicat无法完整执行sql文件,可自行使用IDEA或其他工具进行创建。

创建用户

使用工具创建一个用户。

设置密码:

设置权限:

上传服务器

上传到服务器后,进行解压。进入 /conf 目录下。

1
vim application.properties
  • spring.datasource.platform=mysql 的注释去掉。
  • db.num=1 的注释去掉。
  • db.url.0db.user.0db.password.0 注释去掉。这里即为数据库的地址,刚才创建的用户名称和密码。如果后面部署完成后,访问外网IP无法成功连接,则在数据库的url后面拼接上:&allowPublicKeyRetrieval=true,再次访问外网IP即可成功。

然后将 cluster.conf.example 文件复制一份,命名为 cluster.conf:

1
cp cluster.conf.example cluster.conf # 或者使用mv

然后再编辑 cluster.conf 文件:

1
vim cluster.conf

将最下面的一些原有的地址删除,换成自己要搭建的IP和端口。

📢注意:这里的IP是内网IP。 如果是多服务器进行部署,则每台服务器只需要部署自己内网的IP和端口即可。因为数据库都是用的同一个。

如:

1
2
3
192.168.16.101:8847
192.168.16.102
192.168.16.103

修改 /bin 目录下的startup.sh

1
vim startup.sh

找到JVM配置,修改为如下(自行根据实际修改):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改这个,修改大小
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
fi
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"

运行

1
./startup.sh

若提示未安装JDK,可参考:星星之火-服务器部署Springboot+Vue项目以及配置SSL证书

若想前台运行(即运行窗口不能关闭,关闭则服务停止),可参考:SpringCloud-(一)Nacos的安装与启动

显示如下则表示成功启动:

1
2
nacos is starting with cluster
nacos is starting,you can check the /root/nacos/logs/start.out

访问

外网IP:端口

登录名称和密码均为:nacos。

其他可能问题

  • nacos2.1.0 端口号不能连续,一个nacos会占用两端口。

实现负载均衡

现在已经完成了nacos的集群搭建,但是我们不会用两个IP进行使用,而是要找一个代理。这时候就需要使用到Nginx来实现负载均衡了。

Nginx安装

1
sudo apt install nginx

配置文件地址:/etc/nginx/nginx.conf ,在http中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 配置需要代理的地址
upstream nacos-server {
server 10.0.0.12:8801;
server 10.0.0.12:8802;
}

# 监听的地址
server {
listen 80;
server_name 1.14.121.107;

location /nacos {
proxy_pass http://nacos-server;
}
}
  • 只要是访问 1.14.121.107/nacos 的,都会被转发到 upstream。从而实现负载均衡的效果。

然后再重启Nginx:

1
sudo systemctl restart nginx

测试

访问 1.14.121.107/nacos ,然后进行登录,查看集群管理中节点列表。多次请求 1.14.121.107/nacos 或刷新然后看节点IP是否改变。

  • 其他模块的nacos注册地址写 1.14.121.107:80 即可。