Docker のサーバーオフライン展開、イメージ移行、mysql マスター/スレーブ構築およびその他のサービス

会社のプロジェクトはまもなくオンラインになり、2 つのクラウド サーバーを購入し、環境を展開する必要があります (1 つはパブリック ネットワークにアクセスでき、1 つは LAN 経由でのみアクセス可能)。主な展開は次のとおりです。

1. サーバー間でパスワードなしの ssh を構成する

2. オフライン Docker デプロイメント

3. Dockerイメージの移行

4.redisサービス

5.minioファイルサービス

6. kkFileView ファイルプレビューサービス

7. MySQL マスター/スレーブ構築

目次

1. 2 つのサーバーを暗号化なしで SSH 接続するように構成します。これはファイル転送に便利です。

2. オフライン Docker デプロイメント

 3. Dockerイメージの移行

4.redisサービス

5.minioファイルサービス

6. kkFileView ファイルプレビューサービス

7. MySQL マスター/スレーブ構築

1.mysqlマスターノード

2.mysqlスレーブノード

3. 発生する問題

1.slave_io_running:接続ソリューション

 2.slave_io_running: 解決策なし (考えられる理由:server-uuid マスター ノードとスレーブ ノードが同じ)

3、スレーブ_SQL_実行: いいえ 


1. 2 つのサーバーを暗号化なしで SSH 接続するように構成します。これはファイル転送に便利です。

パスワードなしで構成する

1. ホストを変更し、ホスト名を変更します。

vim /etc/hosts

  構成されたnode01が192.168.52.100にマッピングされるように、下部にIPをマッピングします。 

192.168.52.100 ノード01
192.168.52.101 ノード02

vim /etc/ホスト名 

2. パスワード不要の設定を行い、サーバーの公開鍵と秘密鍵を生成します

 root ユーザーの場合は、「cd /root/.ssh/」と入力します。 

ssh-keygen -t rsa

3. 公開キーをnode01にコピーし、2つのノードの公開キーを含むauthorized_keysファイルを生成します。

ssh コピー ID ノード 01

4. 生成された公開キーauthorized_keysをnode01上のnode02にコピーします。 

scp allowed_keys ノード02:$PWD

5. 同じ操作をnode02でも実行すると、sshを使用してパスワードなしでログインできるようになります。

2. オフライン Docker デプロイメント

ダウンロードアドレス: linux/static/stable/x86_64/のインデックス

以下をダウンロードしました

なぜなら、ダウンロードしたdockerファイルをパブリックネットワークにアップロードし、LAN経由で寧外の外にあるnode02サーバーにアップロードしたからです。

scp docker-24.0.4.tgz ノード02:$PWD

1. ファイルを解凍します。

tar zxf docker-24.0.4.tgz 

 2. docker 関連のコマンドを /usr/bin にコピーします。

sudo cp docker/* /usr/bin/

3. Dockerデーモンを起動する

 須藤ドッカードと

4. インストールが成功したかどうかを確認するには、docker info コマンドを実行し、バージョン情報が正常に出力されればインストールは成功です。

 ドッカー情報

5. /usr/lib/systemd/system/ ディレクトリに docker.service ファイルを作成します。

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

[ユニット]
説明=Docker アプリケーション コンテナ エンジン
ドキュメント=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[サービス]
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
 
[インストール]
WantedBy=multi-user.target
 

6. docker を起動するように設定します

systemctl ドッカーを有効/無効にする 

 3. Dockerイメージの移行

LAN上のDockerはリモートでイメージをプルできないため、パブリックネットワークからイメージファイルをプルした後、LAN経由で対象サーバーに転送する必要がある

1.パブリックネットワークサーバーのイメージをパッケージ化します(私はmysqlをパッケージ化しました)

docker save mysql:5.7 > /home/soft/mysql5.7.ta​​r

2. パッケージ化されたイメージをLANノード02サーバーに転送します。

 scp mysql5.7.ta​​r ノード02:$PWD

3. 圧縮パッケージをnode02サーバー上のミラーイメージに復元します。

docker ロード < /home/soft/mysql5.7.ta​​r

4.redisサービス

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

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 サーバー\
 /data --console-address ":9090" -address ":9000"

6. kkFileViewファイルプレビューサービス

kkFileView 公式 Web サイト: kkFileView - オンライン ファイル プレビュー

# ネットワーク環境により、Docker の中央倉庫へのアクセスが容易になります

docker pull keking/kkfileview:4.1.0

docker run -it -p 8012:8012 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] ## サーバー ID を設定します。
同じローカル エリア ネットワーク内で一意の
サーバー ID=101 が必要です
。 ## 同期する必要のないデータベース名を指定します。
binlog-ignore-db=mysql  
## バイナリ ログ関数を有効にします。
log-bin= mall-mysql-bin  
## バイナリ ログが使用するメモリ サイズ (トランザクション) を設定します。
binlog_cache_size=1M  
## 使用するバイナリ ログ形式を設定します (混合、ステートメント、行)
binlog_format=mixed  
## バイナリ ログの有効期限クリーンアップ時間。デフォルト値は 0 で、自動クリーンアップがないことを意味します。
期限切れ_ログ_日数=7  

## ケース構成を無視します

 lower_case_table_names = 1 
## スレーブ側レプリケーションの中断を避けるために、マスター/スレーブ レプリケーションで発生したすべてのエラーまたは指定された種類のエラーをスキップします。
## 例: 1062 エラーは一部の主キーが重複していることを意味し、1032 エラーはマスターとスレーブのデータベース データが矛盾していることを意味します

マスターノードコンテナを再起動します 

 docker restart mysql-master

3. マスターノードコンテナに入り、同期ユーザーアカウントを追加します

docker exec -it mysql-master /bin/bash

mysql -uroot -p123456

同期アカウントを作成する 

ユーザー「スレーブ」@「%」を作成します。「123456」で識別されます。


*.* のレプリケーション スレーブ、レプリケーション クライアントを '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]
## サーバー ID を設定します。同じローカル エリア ネットワーク内では一意の
サーバー ID=122が必要です
。 ## 同期する必要のないデータベース名を指定します。
binlog-ignore-db=mysql  
## 場合に備えてバイナリ ログ機能を有効にしますスレーブは他のデータベース インスタンスのマスターとして使用されます。
log-bin=mall-mysql-slave1-bin  
## バイナリ ログ メモリ サイズ (トランザクション) を設定します。
binlog_cache_size=1M  
## 使用されるバイナリ ログ形式を設定します (混合、ステートメント、行)。
binlog_format=mixed  
## バイナリ ログの有効期限のクリーンアップ時間。デフォルト値は 0 で、自動クリーンアップがないことを意味します。
expire_logs_days=7  
## スレーブ側レプリケーションの中断を避けるために、マスター/スレーブ レプリケーションで発生したすべてのエラーまたは指定された種類のエラーをスキップします。## 例: 1062 エラーは主キーが重複していることを示し、 1032  エラーはマスターとスレーブのデータベース データが矛盾している  
ためです独自のバイナリ ログlog_slave_updates=1   ## スレーブは読み取り専用に設定されています (スーパー権限を持つユーザーを除く)






読み取り専用=1

## 大文字と小文字の設定を無視します
lower_case_table_names = 1 

子ノードコンテナを再起動します 

docker restart mysql-slave

3. メインデータベースの Position パラメータを確認します。すでにデータがあるため、5483771 です。通常、先頭の位置は 443 です。

マスターステータスを表示します。

 4. スレーブデータベースに入る

docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

 5. スレーブデータベースのマスターとスレーブの同期ステータスを表示します。

スレーブのステータスを表示 \G

マスターを 
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. データからサービスを開始する

スレーブを開始します。

smile_io_running はホストとの IO 通信を担当し、
slave_sql_running は独自のスレーブ mysql プロセスを担当します。

2 つの「はい」は成功を意味します

3. 発生する問題

1.slave_io_running:接続ソリューション

1. ネットワーク障害

マスター ノードの IP に ping を実行して、ping が可能かどうかを確認します。ping が失敗した場合は、セキュリティ グループまたはファイアウォールが ICMP プロトコルをオープンしているかどうかを確認します。

2. スレーブアカウントがマスターノードサービスにリモート接続できるかどうか

docker exec -it mysql-slave /bin/bash

mysql -u スレーブ -p123456 -h10.0.0.4 -P 3333

 3. スレーブノードがサービスを開始しているか、コマンドが正しいか、起動ファイルと起動ノードが正しいか、hostIP が正しいかを確認します。

 まずサービスを停止し、変更してから開始します。

スレーブを停止します。

スレーブを開始します。 

スレーブのステータスを表示 \G

 2.slave_io_running: 解決策なし (考えられる理由: server-uuid マスター ノードとスレーブ ノードが同じ)

1. ファイルの場所を見つけます

find / -iname "auto.cnf"

2. ファイルディレクトリを入力し、ファイルを削除します

rm auto.cnf

3. 子ノードサービスを再起動します。

スレーブを停止します。

スレーブを開始します。 

スレーブのステータスを表示 \G

3、スレーブ_SQL_実行: いいえ 


1. プログラムがスレーブに書き込まれた可能性があります

2. スレーブ マシンの再起動後のトランザクションのロールバックが原因である可能性もあります。

mysql> スレーブを停止します。
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
mysql> スレーブを開始します。

おすすめ

転載: blog.csdn.net/weixin_43288858/article/details/131664353