公司项目要上线项目,买了两台云服务器,需进行环境部署(1台接入公网,一台只能局域网访问),主要部署以下内容
1、服务器之间配置ssh免密
2、离线docker部署
3、docker镜像迁移
4、redis服务
5、minio文件服务
6、kkFileView文件预览服务
7、mysql主从搭建
目录
1、配置两台服务器ssh免密,方便文件传输
2、离线docker部署
3、docker镜像迁移
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、更改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 免密登录了
下载地址: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
因为局域网的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
requirepass:redis密码
docker run --name=redis -p 6333:6379 \
-v /data/redis/data:/data \
-v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis:latest --requirepass 123456 redis-server /usr/local/etc/redis/redis.conf \
--appendonly yes
拉取最新版本,或者其他版本
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"
kkFileView官网:kkFileView - 在线文件预览
# 网络环境方便访问docker中央仓库
docker pull keking/kkfileview:4.1.0
docker run -it -p 8012:8012 keking/kkfileview:4.1.0
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'@'%';
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表示成功
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
1、找到文件位置
find / -iname "auto.cnf"
2、进入文件目录,删除文件
rm auto.cnf
3、 重启子节点服务
stop slave;
start slave;
show slave status \G
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
mysql> stop slave ; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave ;