公司项目要上线项目,买了两台云服务器,需进行环境部署(1台接入公网,一台只能局域网访问),主要部署以下内容

1、服务器之间配置ssh免密

2、离线docker部署

3、docker镜像迁移

4、redis服务

5、minio文件服务

6、kkFileView文件预览服务

7、mysql主从搭建

目录

1、配置两台服务器ssh免密,方便文件传输

2、离线docker部署

 3、docker镜像迁移

docker mysql文件迁移

4、redis服务

5、minio文件服务

6、kkFileView文件预览服务

7、mysql主从搭建

1、mysql主节点

2、mysql从节点

3、出现的问题

1、slave_io_running:connecting解决方法

 2、slave_io_running:no解决方法(可能原因:server-uuid主从节点相同)

3、Slave_SQL_Running: No 



1、配置两台服务器ssh免密,方便文件传输

配置免密

1、更改host 和修改主机名

vim /etc/hosts

  在最下面映射IP,使得配置的node01,映射到192.168.52.100上面 

192.168.52.100 node01
192.168.52.101 node02

vim /etc/hostname 

2、配置免密,生成服务器的公钥私钥

 配置免密如果是root用户则进入 cd  /root/.ssh/ 

ssh-keygen -t rsa

3、把公钥拷贝到node01上去,生成authorized_keys文件包含两个节点的公钥

ssh-copy-id  node01

4、在node01上将,生成的公共密匙authorized_keys拷贝到node02中 

scp authorized_keys node02:$PWD

5、同样的操作在node02上面,此时就可以使用ssh 免密登录了

2、离线docker部署

下载地址:Index of linux/static/stable/x86_64/

我下载的是下面这个

因为我是将下载好的docker文件上传到公网的,然后再 通过局域网上传到宁外的node02服务器上,

scp docker-24.0.4.tgz node02:$PWD

1、解压文件

tar zxf  docker-24.0.4.tgz 

 2、将docker 相关命令拷贝到 /usr/bin

sudo cp docker/* /usr/bin/

3. 启动Docker守护程序

 sudo dockerd &

4、验证是否安装成功,执行docker info命令,若正常打印版本信息则安装成功。

 docker info

5、在 /usr/lib/systemd/system/ 目录下创建docker.service 文件

sudo vi /usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
 
[Install]
WantedBy=multi-user.target
 

6、设置docker开机启动

systemctl enable/disable docker 

 3、docker镜像迁移

因为局域网的docker,不能远程拉取镜像,所以需要,公网拉取镜像文件之后,通过局域网传递目标服务器

1、公网服务器打包镜像(我打包的是mysql)

docker save mysql:5.7 > /home/soft/mysql5.7.tar

2、传递打包的镜像到局域网node02服务器

 scp  mysql5.7.tar node02:$PWD

3、在node02服务器上将压缩包恢复成镜像

docker load < /home/soft/mysql5.7.tar

docker mysql文件迁移

1、进入要迁移的容器

docker exec -it mysql-master /bin/bash

2、将要迁移的数据库,转化为.sql文件

mysqldump -u root -p --databases aviation_dev> aviation_dev.sql 

  -u 用户名

--databases:迁移的数据库,比如我的是aviation_dev

3、拷贝容器生成的SQL文件,到宿主机目录hone目录下面

docker cp mysql-master:/aviation_dev.sql   /home 

 4、我的是在同一宿主机容器,

cd /home

docker cp aviation_dev.sql mysql-new:/aviation_dev.sql

 mysql-new这个是我的新容器的名称

5、进入新容器,恢复迁移的数据

docker exec -it  mysql-new bash

mysql -u root -p < /aviation_dev.sql 

4、redis服务

requirepass:redis密码

docker run -p 6333:6379 --name redis -v /mydata/redis/redis.conf:/etc/redis/redis.conf  -v /mydata/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

5、minio文件服务

拉取最新版本,或者其他版本

docker pull minio/minio

MINIO_ACCESS_KEY:登录用户名

MINIO_ACCESS_KEY:登录用户密码

docker run -p 9000:9000 -p 9090:9090 \
 --name minio \
 -d --restart=always \
 -e "MINIO_ACCESS_KEY=test" \
 -e "MINIO_SECRET_KEY=123456" \
 -v /root/docker/minio/data:/data  \
 -v /root/docker/minio/config:/root/.minio \
 minio/minio  server\
 /data --console-address ":9090" -address ":9000"

6、kkFileView文件预览服务

kkFileView官网:kkFileView - 在线文件预览

# 网络环境方便访问docker中央仓库

docker pull keking/kkfileview:4.1.0

docker run -it -p 8012:8012 keking/kkfileview:4.1.0 

https  KKfile服务 :

nginx如下

     location /file {
        proxy_pass  http://127.0.0.1:8012;
      }

KK_BASE_URL="https://域名/file"

KK_CONTEXT_PATH="/file"

​​​​​​​docker run -it -d -p 8012:8012 -e KK_BASE_URL="https://域名/file" -e KK_CONTEXT_PATH="/file" keking/kkfileview:4.1.0

7、mysql主从搭建

1、mysql主节点

1、部署mysql主节点容器

docker run -p 3333:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql/conf.d \
-e  MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 目录说明:

-v /mydata/mysql-master/conf:/etc/mysql ;将配置文件夹挂载到主机上
-v /mydata/mysql-master/log:/var/log/mysql:将日志文件夹挂载到主机上
-v /mydata/mysql-master/data:/var/lib/mysql:将数据文件夹挂载到主机上

2、 修改主节点my.conf配置

vim /mydata/mysql-master/conf/my.cnf 

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  

##忽略大小写配置

 lower_case_table_names = 1 
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启主节点容器 

 docker restart mysql-master

3、进入主节点容器,新增同步用户账号

docker exec -it mysql-master /bin/bash

mysql -uroot -p123456

创建同步账号 

CREATE USER 'slave' @'%' IDENTIFIED BY '123456';


GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

2、mysql从节点

1、创建从节点容器

docker run -p 3334:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql/conf.d \
-e  MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

2、修改主节点my.conf配置

vim /mydata/mysql-master/conf/my.cnf 

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=122
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

##忽略大小写配置
lower_case_table_names = 1 

重启子节点容器 

docker restart mysql-slave

3、查看主数据库的Position参数,因为已经有了些数据了,所以是5483771,一般刚刚开始时postion是443

show master status;

 4、进入从数据库

docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

 5、在从数据库中查看主从同步状态

show slave status \G

change master to 
master_host='10.0.0.4',master_user='slave',master_password='123456',master_port=3333,
master_log_file='mall-mysql-bin.000002',master_log_pos=684,master_connect_retry=30;

master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

 6、从数据开启服务

start slave;

slave_io_running,负责与主机的io通信;
slave_sql_running,负责自己的slave mysql进程。

两个yes表示成功

3、出现的问题

1、slave_io_running:connecting解决方法

1、网络不通

ping主节点IP看是否能ping通,如果ping不通,就检查安全组或者防火墙是否开放ICMP协议

2、slave账号是否能远程连上主节点服务

docker exec -it mysql-slave /bin/bash

mysql -u slave -p123456 -h10.0.0.4 -P 3333

 3、检查从机点开启服务,命令是否正确,开始的file文件和开始节点是否正确,以及hostIP是否正确

 先停止,再修改,再开启服务

stop slave;

start slave; 

show slave status \G

 2、slave_io_running:no解决方法(可能原因:server-uuid主从节点相同)

1、找到文件位置

find / -iname "auto.cnf"

2、进入文件目录,删除文件

rm auto.cnf

3、 重启子节点服务

stop slave;

start slave; 

show slave status \G

3、Slave_SQL_Running: No 


1.程序可能在slave上进行了写操作

2.也可能是slave机器重起后,事务回滚造成的.

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐