docker搭建mysql+nacos+nginx集群

docker搭建mysql+nacos+nginx集群

配置2个mysql 主从

3个nacos

nginx反向代理

mysql集群

docker run -di --name=mysql_master -p 33306:3306 -e MYSQL_ROOT_PASSWORD=556798 mysql

–name 代表容器名称可以用来启动停止重启容器

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 向外映射端口 通过linux访问

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

1.2进入创建好MySQL容器,修改配置文件

#同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引
apt-get update
#安装vim
apt-get install -y vim

1.2.2 修改my.cnf文件

#进入刚才创建的容器 mysql_master  是你之前设置的 --name
docker exec -it mysql_master /bin/bash
vim /etc/mysql/my.cnf

新增信息


[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 永久设置时区时间
default-time_zone = '+8:00' 

参考图片 下方图片只是参考 server-id=101 这个才是正确的

docker搭建mysql+nacos+nginx集群_第1张图片

1.3登陆MySQL配置信息

mysql -u root -p #登录

登录输入不显示密码不要以为输入不了

登录之后

MySQL8的默认的密码加密策略发生了变化,之前的一些客户端的软件会出现无法登录的 情况。

解决:

使用mysql原生的命令进去,使用之前的密码加密策略重新修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';


#本地登录(如果用原生的命令行的话,不用改)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '556798';
#远程登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '556798';
#创建同步用户
CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '556798';
#授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'admin'@'%';
#然后修改root权限
use mysql;
#在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
select host, user, authentication_string, plugin from user; 
#授权 root 用户的所有权限并设置远程访问
GRANT ALL ON *.* TO 'root'@'%';
#刷新权限列表
flush privileges;
#查看关键信File和Position字段的值,在后面的操作完成之前,
#需要保证master库不能做任何操作,否则将会引起状#态变化,
#File和Position字段的值变化。 如下图需要记下来在下面2.4步骤需要 下图中的mysql-slave-bin.000001 156


mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-slave-bin.000001
         Position: 156
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

退出容器重启

#退出mysql
exit;
#退出容器
exit;
#再退出到宿主容器查看mysql的映射端口
firewall-cmd --zone=public --list-ports
#将mysql端口的防火墙打开  xxxxx  端口  
firewall-cmd --zone=public --add-port=3363/tcp --permanent
#重新载入
firewall-cmd --reload
docker restart mysql_master

至此,master数据库安装配置完成。

2.创建slave数据库

2.1创建MySQL容器并映射端口和改密码

docker run -di --name=mysql_slave -p 33307:3306 -e MYSQL_ROOT_PASSWORD=556798 mysql
#将mysql端口的防火墙打开  xxxxx  端口  
firewall-cmd --zone=public --add-port=33307/tcp --permanent
#重新载入
firewall-cmd --reload

2.2进入容器内部

docker搭建mysql+nacos+nginx集群_第2张图片

2.3 进入mysql内部,设置主从信息


mysql -uroot -p556798
#本地要用客户端比如navicat连接,设置root的认证方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '556798';
#然后修改root权限
use mysql;
#在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
select host, user, authentication_string, plugin from user; 
#授权 root 用户的所有权限并设置远程访问
GRANT ALL ON *.* TO 'root'@'%';
#刷新权限列表
flush privileges;

2.4设置主从信息

change master to master_host='ip', master_user='root', master_password='556798', master_port=33306, master_log_file='mysql-slave-bin.000001', master_log_pos= 156, master_connect_retry=30,get_master_public_key=1;

参数介绍

master_host:Master的地址,指的是容器的独立IP,可以通过下面命令查询
[root@localhost ~]# docker inspect --format='{
    {.NetworkSettings.IPAddress}}' 5c2 172.17.0.4
master_port: Master的端口,指的是容器的端口号,不是映射端口
master_user:用于数据同步的用户
master_password:用户同步的用户的密码
master_log_file:指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值
master_log_pos:指从哪个Position开始读,即上文中提到的Position字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
备注:之所以设置get_master_public_key=1,是因为开启主从复制的时候可能会报出下方的异常。原因是mysql8默认使用插件caching_sha2_password,有些client连接报这个错误,需要拿到server的public key来加密password

正常情况下,Slave_IO_Running 和 Slave_SQL_Running 都是No,因为我们还没有开启主从复制的过程

2.6开启主从复制docker搭建mysql+nacos+nginx集群_第3张图片

start slave;![在这里插入图片描述](https://img-blog.csdnimg.cn/2020122616343472.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODI1NTgwNw==,size_16,color_FFFFFF,t_70#pic_center)

再次查询主从同步状态

show slave status \G;

然后退出重启容器。其他的slave的安装配置方法和slave的方法一样,区别就是cnf文件中的server-id不能相同罢了

3. 出现异常参考

3.1. 使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于拦截状态,这种情况一般是下面集中原因造成的,可以根据Last_IO_Error提示予以排除。

  • 网络不通

解决办法:检查IP,端口

  • 密码不对

检查是否创建用于同步的用户和用户密码是否正确

  • pos不对

检查master的position

3.2. 如果开启主从复制失败,需要修改和重启,可参考下方提示

停止主从复制

stop slave;

重置之前的配置信息

reset slave;

启动主从复制

start slave;

nacos集群

1.docker 搭建mysql主从

看上面的

2.docker 搭建Nacos-server集群

2.1需要在数据库创建nacos需要的配置数据库

docker搭建mysql+nacos+nginx集群_第4张图片

数据库初始化脚本:https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

2.2docker 集群命令

需要修改ip为自己的ip端口的话 -p 位置左边修改可访问端口 右边修改容器内端口默认8848

docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=ip:38848,ip:38849,ip:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=ip地址 \
-e MYSQL_SERVICE_PORT=33306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=556798 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=ip地址 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38848:8848 \
--name nacos48 \
--restart=always \
nacos/nacos-server
 
docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=ip:38848,ip:38849,ip:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=ip地址 \
-e MYSQL_SERVICE_PORT=33306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=556798 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=ip地址 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38849:8848 \
--name nacos49 \
--restart=always \
nacos/nacos-server
​
docker run -d \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8848 \
-e NACOS_SERVERS=ip:38848,ip:38849,ip:38850 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=ip地址 \
-e MYSQL_SERVICE_PORT=33306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=556798 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=ip地址 \
-e JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m \
-p 38850:8848 \
--name nacos50 \
--restart=always \
nacos/nacos-server

2.3命令参数说明

MODE=cluster 集群模式

NACOS_APPLICATION_PORT=8848 容器nacos端口

NACOS_SERVERS=ip:38848,ip:38849,ip:38850 集群每个nacos-server服务

SPRING_DATASOURCE_PLATFORM=mysql 独立支持mysql

NACOS_SERVER_IP=ip 可选值hostname/ip 默认ip

MYSQL_* 相关

MYSQL_SERVICE_DB_NAME=nacos_config 数据库初始化脚本数据库名称

数据库初始化脚本:https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

JVM_XMS=215m -e JVM_XMX=215m -e JVM_XMN=215m

docker搭建mysql+nacos+nginx集群_第5张图片

-p 38850:8848 38850宿主机端口:8848 nacos访问端口

–restart=always 重启docker服务会启动该容器

nacos/nacos-server:1.3.1 nacos镜像版本

如下直接全部复制进xshell

2.4打开防火墙端口


firewall-cmd --zone=public --add-port=38848/tcp --permanent
firewall-cmd --zone=public --add-port=38849/tcp --permanent
firewall-cmd --zone=public --add-port=38850/tcp --permanent
firewall-cmd --zone=public --add-port=33306/tcp --permanent
firewall-cmd --reload

如果是阿里云服务器要去开启安全组规则

2.5启动成功后 我们就可以访问 nacos 控制台了

访问地址1:http://宿主机IP:38848/nacos
访问地址2:http://宿主机IP:38849/nacos
访问地址3:http://宿主机IP:38850/nacos
默认登录账号密码都是nacos
如图则集群搭建成功

docker搭建mysql+nacos+nginx集群_第6张图片

nacos集群就到这里

错误总结:无法连接

IP地址 ,mysql 账号 密码

nginx反向代理

1. 运行一个示例容器,拷贝配置文件

# 启动
docker run -d --name nginx-test nginx:1.19.0
# 进入容器
docker exec -it nginx-test /bin/bash 
# 进入容器内部后,找到配置文件路径
cd /etc/nginx/conf.d/default.conf
# 查看nginx.conf配置文件

2.创建文件

mkdir -p /home/dockerdata/
#在dockerdata文件下创建log文件件
mkdir log

copy配置文件default.conf到自己创建的文件:

# copy配置文件default.conf到/home/dockerdata
docker cp nginx-test:/etc/nginx/conf.d/default.conf  /home/dockerdata
# 也可以copy前端html到/home/dockerdata
docker cp nginx-test:/usr/share/nginx/html  /home/dockerdata

3 配置集群,实现反向代理

填写自己nacos的IP

#新增,为了演示,故不配置权重
upstream cluster {
     
	server ip:8848;
	server ip:8848;
	server ip:8848;
}

server {
     
    listen       80;
    server_name  localhost;
	#新增,配置nginx的日志级别debug
	#error_log /var/log/nginx/debug.log debug;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    #新增,转向集群配置
	location /nacos {
     
        proxy_pass http://cluster;
    }

    location / {
     
        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;
    }

   
}

4.启动新的Nginx

docker run -d -p 80:80 --name nginx  -v  /home/dockerdata/html:/usr/share/nginx/html -v /home/dockerdata/log:/var/log/nginx -v /home/dockerdata/default.conf:/etc/nginx/conf.d/default.conf nginx:1.19.0

启动命令简要:

docker run -d \
-p 80:80 \ # 主机80端口映射容器80端口
--name nginx \ # 容器名称nginx
--network anet \ # 指定网络,anet
-v /home/dockerdata/html:/usr/share/nginx/html \ # 映射html到主机
-v /home/dockerdata/log:/var/log/nginx  \ # 映射日志文件到主机
-v /home/dockerdata/default.conf:/etc/nginx/conf.d/default.con \ # 映射主机配置文件到nginx
nginx:1.19.0

开发端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

5.验证Nginx配置是否成功

docker搭建mysql+nacos+nginx集群_第7张图片
Nginx反向代理成功
docker搭建mysql+nacos+nginx集群_第8张图片
Nginx反向代理成功

至此,我的nacos集群配置全部完成,实现 Nginx(1台) + Nacos(3台) + Mysql(2台)的配置

你可能感兴趣的:(集群搭建,linux,mysql,java)