会社のプロジェクトはまもなくオンラインになり、2 つのクラウド サーバーを購入し、環境を展開する必要があります (1 つはパブリック ネットワークにアクセスでき、1 つは LAN 経由でのみアクセス可能)。主な展開は次のとおりです。
1. サーバー間でパスワードなしの ssh を構成する
2. オフライン Docker デプロイメント
3. Dockerイメージの移行
4.redisサービス
5.minioファイルサービス
6. kkFileView ファイルプレビューサービス
7. MySQL マスター/スレーブ構築
目次
1. 2 つのサーバーを暗号化なしで SSH 接続するように構成します。これはファイル転送に便利です。
2.slave_io_running: 解決策なし (考えられる理由:server-uuid マスター ノードとスレーブ ノードが同じ)
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.tar
2. パッケージ化されたイメージをLANノード02サーバーに転送します。
scp mysql5.7.tar ノード02:$PWD
3. 圧縮パッケージをnode02サーバー上のミラーイメージに復元します。
docker ロード < /home/soft/mysql5.7.tar
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> スレーブを開始します。