一、迁移大概流程。

1、观测原始机器的中间件情况,版本、安装方式、路径、配置文件。

2、保证版本的一致性避免出现不确认因数。

3、迁移jumpserver前先启动数据库

二、检查要迁移的服务

2.1、mysql

2.1.1、检查mysql版本

查询包存放路径,可以从配置文件中查看/etc/my.cnf。 默认路径是/var/lib/mysql
rpm -qa | grep mysql 	
查看版本
[root@test mysql]# mysql --version
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

jumpserver迁移_docker

2.1.2、下载安装包

##被迁移机器上的数据库是rpm安装,不是tar包也不是二进制安装。
##经过查询发现是Red Hat系统版本的包,centos7也能用。还是以被迁移机器环境为主。

jumpserver迁移_mysql_02

2、jumpserver

2.2.1、查询jumpserver版本

方法一、在/opt查看包

Linux中/opt是什么意思?

/opt目录用于存放独立的第三方软件包,这些软件包通常不是操作系统的核心组件,也不会与系统自带的软件产生冲突。
它提供了一个标准化和规范化的位置,用于安装那些不属于操作系统发行版或软件包管理系统的软件。 
/opt目录常用于存放一些大型、复杂或商业软件,例如某些专有软件、多个版本的软件或特定用途的工具等。
通过将这些软件安装到/opt目录,可以避免与操作系统或其他软件包的冲突,并使这些软件可以独立地进行管理和更新。
[root@test opt]# ll
total 11453
drwxr-xr-x  7 root root    227 Jun  5 12:12 jumpserver-offline-installer-v2.23.0-amd64-23
-rw-r--r--  1 root root    911 Sep  9  2022 jumpserver-offline-installer-v2.23.0-amd64-23.tar.gz

方法二、docker查看版本

[root@test opt]# docker images
REPOSITORY          TAG        IMAGE ID       CREATED         SIZE
jumpserver/web      v2.23.0    dsfasfafadsd   24 months ago   276MB
jumpserver/koko     v2.23.0    dsfasfafadsd   24 months ago   714MB
jumpserver/lion     v2.23.0    dsfasfafadsd   24 months ago   351MB
jumpserver/core     v2.23.0    dsfasfafadsd   24 months ago   1.93GB
jumpserver/magnus   v2.23.0    dsfasfafadsd   24 months ago   162MB
jumpserver/mysql    5          dsfasfafadsd   2 years ago     448MB
jumpserver/redis    6-alpine   dsfasfafadsd   2 years ago     32.3MB

2.2.2、下载jumpserver包

查看历史安装包

jumpserver迁移_数据库_03

收索指定安装包

jumpserver迁移_mysql_04

选择安装方式,被迁移机器使用的是离线,就选择离线

jumpserver迁移_docker_05


三、部署服务

3.1、部署mysql

3.1.1、解压-执行

tar xf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar
yum -y install mysql-community-*.rpm

安装完后不启动,进行数据同步拷贝

3.1.2、拷贝/etc/my.cof

[mysqld]

datadir=/data/mysql
socket=/data/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin=mysql-bin
server-id=8220
read-only=0
#binlog-do-db=jumpserver
#replicate-do-db=jumpserver  #备份的数据库

#binlog-ignore-db=mysql  #不进行备份
#binlog-ignore-db=information_schema  #不进行备份
#binlog-ignore-db=performance_schema  #不进行备份
#binlog-ignore-db=sys #不进行备份

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

[client]
default-character-set=utf8
socket=/data/mysql/mysql.sock
[mysql]
default-character-set=utf8
socket=/data/mysql/mysql.sock

3.1.3、做免密

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.1
验证
ssh root@192.168.1.

3.1.4、rsync 数据库同步

#将目标数据同步到本地

  • -a:归档模式,保留文件的属性(如时间戳、权限等)。
  • -v:详细模式,显示更多信息。
  • -z:压缩传输,可以加快传输速度。
  • --progress:显示进度条,方便查看同步进度。
rsync -avz --progress  root@192.168.1.1:/var/lib/mysql/ /data/mysql

同步完成后进行权限对比,避免小问题

3.1.5、启动mysql

删除/data/mysql路径下的auto.cnf文件
启动
systemctl start mysqld
##auto.cnf里面是mysql ID 重启重新获取


3.2、部署jumpserver

3.2.1 解压部署包

tar -zxvf jumpserver-offline-installer-v2.23.0-amd64-23.tar.gz
 cd jumpserver-offline-installer-v2.23.0-amd64-23


3.2.2 修改配置文件

修改数据保存路径 
VOLUME_DIR=/data/jumpserver
DOCKER_DIR=/data/docker

修改mysql信息 修改为外部mysql

########################################
USE_EXTERNAL_MYSQL=1
DB_HOST=192.168.1.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=Fit2closd
DB_NAME=jumpserver


cat  config-example.txt

# 以下设置如果为空系统会自动生成随机字符串填入
## 迁移请修改 SECRET_KEY 和 BOOTSTRAP_TOKEN 为原来的设置
## 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/

## 安装配置, 可以使用华为云加速下载, arm64 用户需要注释掉 DOCKER_IMAGE_PREFIX
# DOCKER_IMAGE_PREFIX=-south-1
VOLUME_DIR=/data/jumpserver
DOCKER_DIR=/data/docker
SECRET_KEY=
BOOTSTRAP_TOKEN=
LOG_LEVEL=ERROR

##  MySQL 配置, USE_EXTERNAL_MYSQL=1 表示使用外置 MySQL, 请输入正确的 MySQL 信息
USE_EXTERNAL_MYSQL=1
DB_HOST=192.168.1.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=Fit2closd
DB_NAME=jumpserver

##  Redis 配置, USE_EXTERNAL_REDIS=1 表示使用外置 Redis, 请输入正确的 Redis 信息
USE_EXTERNAL_REDIS=0
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=

## Compose 项目设置, 如果 192.168.250.0/24 网段与你现有网段冲突, 请修改然后重启 JumpServer
COMPOSE_PROJECT_NAME=jms
COMPOSE_HTTP_TIMEOUT=3600
DOCKER_CLIENT_TIMEOUT=3600
DOCKER_SUBNET=192.168.25.0/24

## IPV6 设置, 容器是否开启 ipv6 nat, USE_IPV6=1 表示开启, 为 0 的情况下 DOCKER_SUBNET_IPV6 定义不生效
USE_IPV6=0
DOCKER_SUBNET_IPV6=fc200::/64

## 访问配置
HTTP_PORT=80
SSH_PORT=2222
MAGNUS_MYSQL_PORT=33060
MAGNUS_MARIADB_PORT=33061
MAGNUS_REDIS_PORT=63790

## HTTPS 配置, 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
# USE_LB=1
# HTTPS_PORT=443
# SERVER_NAME=your_domain_name
# SSL_CERTIFICATE=your_cert
# SSL_CERTIFICATE_KEY=your_cert_key

## Nginx 文件上传大小
CLIENT_MAX_BODY_SIZE=4096m

## Task 配置, 是否启动 jms_celery 容器, 单节点必须开启
USE_TASK=1

## XPack, USE_XPACK=1 表示开启, 开源版本设置无效
USE_XPACK=0
RDP_PORT=3389
MAGNUS_POSTGRE_PORT=54320

## Core 配置, Session 定义, SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期, SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示关闭浏览器即 session 过期
# SESSION_COOKIE_AGE=86400
SESSION_EXPIRE_AT_BROWSER_CLOSE=true

## 组件配置
CORE_HOST=http://core:8080
JUMPSERVER_ENABLE_FONT_SMOOTHING=true
TCP_SEND_BUFFER_BYTES=4194304
TCP_RECV_BUFFER_BYTES=6291456

## 终端使用宿主 HOSTNAME 标识
SERVER_HOSTNAME=${HOSTNAME}

## 额外的配置
CURRENT_VERSION=

3.2.3 修改/etc/docker/daemon.json文件

data-root:数据保存路径
"base" : docker网络
###################
将目标机的文件保存到本地
cat /etc/docker/daemon.json
{
        "default-address-pools" : [
        {
                "base" : "172.31.0.0/16",
                "size" : 24
        }
        ],
        "data-root": "/data/docker"
}

3.2.4、启动jumpserver

cd jumpserver-offline-installer-v2.23.0-amd64-23
安装
./ install
启动
./ start
卸载
./ uninstall


mysql主备搭建

1、数据库部署完后,分别将将数据同步到主节点和备节点上。
2、主备都要删除auto.cnf文件,并重启获取自己独有的ID
3、主节点IP 192.168.1.1 备用节点IP 192.168.1.2
#################
#主节点执行的操作#
#################
#创建slave用户,允许192.168.1.2通过slave用户访问
mysql> CREATE USER 'slave'@'192.168.1.2' IDENTIFIED WITH mysql_native_password BY 'Fit2clouxuat';
#授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.2';
#关闭备状态
mysql> stop slave;
#更新数据,更新状态
mysql> flush privileges;
#查看数据库状态
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |  8213300 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#确认File值和Position值在备节点上要使用

#################
#备节点执行的操作#
#################
#重新设置slave
mysql> reset slave;
#执行
CHANGE MASTER TO
    MASTER_HOST='192.168.1.1',
    MASTER_USER='slave',
    MASTER_PASSWORD='Fit2clouxuat',
    MASTER_LOG_FILE='mysql-bin.000008',
    MASTER_LOG_POS=8213300;
#启动数据库
mysql> start slave;
查看备节点状态
show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.1.1
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000008
          Read_Master_Log_Pos: 8213300
               Relay_Log_File: relay-log.000004
                Relay_Log_Pos: 8213516
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 8213300
              Relay_Log_Space: 8213889
              Until_Condition: None

#######################
#都是yes表示没问题
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

########################
#验证
#在主节点上创建数据库,查看备节点是否同步
#查看数据库
show databases;

#创建数据库
create database lizhe;

#删除数据库
DROP DATABASE lizhe;

遇到的问题

删除 jumpserver和mysql 重新部署时遇见如下问题.

问题一:Error: No such image

问题:
Error: No such image: jumpserver/mysql:5

Error: No such image: jumpserver/web:v2.23.0

Error: No such image: jumpserver/core:v2.23.0

Error: No such image: jumpserver/koko:v2.23.0

Error: No such image: jumpserver/lion:v2.23.0

Error: No such image: jumpserver/magnus:v2.23.0

###############
原因:
出现/var/lib/docker/ 下的内容因挂载没删除
[root@test lib]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G   64K  3.9G   1% /dev/shm
tmpfs           3.9G   17M  3.9G   1% /run
/dev/sda1        40G  8.4G   32G  21% /
/dev/sdb1       100G  7.2G   93G   8% /data
tmpfs           783M     0  783M   0% /run/user/0
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/8544ea9c785899aea9ceaf4ca07e96/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/37fea9c57834c6eea9cea9a9c03570/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/308c419750801df8b2eeaa9c680cf1/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/3b4eb9820db4cf55a6000add1564a1/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/b9ea62db0caa6add152047ed1ea727/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/27cbd0ef2ebf8cb00573b2205b3aab/merged
overlay          40G  8.4G   32G  21% /var/lib/docker/overlay2/a13a8b00f805d39095fcd5a02926b7/merged
##############
解决:
取消挂载
umount /var/lib/docker/overlay2/b9ea62db0caa6add152047ed1ea727/merged

取消后就可以热门-rf

问题二:ERROR: cannot create network

问题:
6. Init JumpServer Database
Creating network "jms_net" with driver "bridge"
ERROR: cannot create network 0419bcfd1eb1f34ef2379210b495596a7366709d1c3056878eb2e8637e864178 (br-0419bcfd1eb1): conflicts with network 353fcb517b5aa767498af55d845c0f7b1c8c4948e7addefbb42217a4a5ad2312 (br-353fcb517b5a): networks have overlapping IPv4
Creating network "jms_net" with driver "bridge"
ERROR: cannot create network 75d019738500d27fda896e04aca46666ff6bb681884e6e4fe518972ed00db74f (br-75d019738500): conflicts with network 353fcb517b5aa767498af55d845c0f7b1c8c4948e7addefbb42217a4a5ad2312 (br-353fcb517b5a): networks have overlapping IPv4
Error: No such container: jms_core
[ERROR] Failed to change the table structure!

#################
原因:
jumpservere 卸载时docker的网桥没有删除需要手动删除

37: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:4a:ad:2f:20 brd ff:ff:ff:ff:ff:ff
    inet 172.31.0.1/24 brd 172.31.0.255 scope global docker0
       valid_lft forever preferred_lft forever
38: br-47c2edb68b09: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:03:c0:d5:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.250.1/24 brd 192.168.250.255 scope global br-47c2edb68b09
       valid_lft forever preferred_lft forever
    inet6 fe80::42:3ff:fec0:d55a/64 scope link
       valid_lft forever preferred_lft forever
40: vethe830abc@if39: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-47c2edb68b09 state UP group default
    link/ether 7e:76:ef:68:5f:e1 brd ff:ff:ff:ff:ff:ff link-netnsid 7
    inet6 fe80::7c76:efff:fe68:5fe1/64 scope link
       valid_lft forever preferred_lft forever
44: veth0d2bbf1@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-47c2edb68b09 state UP group default
    link/ether fa:c5:20:47:78:a5 brd ff:ff:ff:ff:ff:ff link-netnsid 8
    inet6 fe80::f8c5:20ff:fe47:78a5/64 scope link
       valid_lft forever preferred_lft forever
46: vethf9e86a8@if45: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-47c2edb68b09 state UP group default
    link/ether c2:48:4b:f0:9d:ad brd ff:ff:ff:ff:ff:ff link-netnsid 9
    inet6 fe80::c048:4bff:fef0:9dad/64 scope link
       valid_lft forever preferred_lft forever
############################
解决:
sudo ip link delete 网络名(docker0)
sudo ip link delete docker0
sudo ip link delete vethe830abc
只保留这原始的

问题三:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

mysql数据同步完成后登录时间出现
问题:[root@test ~]# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'' (2)

########################
原因:根据上面的问题反馈是var/lib/mysql/mysql.sock
但是我这边已经指定过mysql.sock路径,还是出现路径问题

解决:
在/etc/my.conf最后面添加如下

[client]
default-character-set=utf8
socket=/data/mysql/mysql.sock
[mysql]
default-character-set=utf8
socket=/data/mysql/mysql.sock

##############
[root@test mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye


问题四:ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

解决
重新设置slave
mysql> reset slave;

CHANGE MASTER TO
    MASTER_HOST='192.168.1.1',
    MASTER_USER='slave',
    MASTER_PASSWORD='Fit2clouxuat',
    MASTER_LOG_FILE='mysql-bin.000012',
    MASTER_LOG_POS=7318506;

mysql> start slave;

问题五:Slave_IO_Running: NO

mysql 配置文件中的auto.cnf 是rsync过来的需要删除auto.cnf  重启mysql 让他自动获取一下。

问题六:jump连接服务时出现 Connection websocket closed

解决重启jumpserver