Microsoft製 .NETベースの Redis互換キャッシュサーバーの Garnetを Ubuntu Serverにインストールします。
「Garnetインストール(Redis互換) 1」では能書きをたれ、
「Garnetインストール(Redis互換) 2」で C#のソースからビルドして Garnetの実行プログラムができました。
ここではクライアントの Lubuntu上にできあがった実行プログラムを Ubuntu Serverにデプロイしたいと思います。
しかしここで「はて?」となるのでした。
そもそも .NETのコンソールプログラムってどうやってデプロイすんの?と。
その辺を調べながら進めていきたいと思います。
1.とりあえず動作確認
先に以下の手順の「Deploy Garnet Server」の段落にある通り動作確認してみます。
Getting Started
これはビルドを行ったクライアントの Lubuntuでの作業になります。
カレントディレクトリはビルドを行った [~/work/garnet] になっています。
subro@Lubuntu2204:~/work/garnet$ cd main/GarnetServer
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ dotnet run -c Release -f net8.0
_________
/_||___||_\ Garnet 1.0.0 64 bit; standalone mode
'. \ / .' Port: 3278
'.\ /.' https://aka.ms/GetGarnet
'.'
* Ready to accept connections
上手く動いているように見えます。
デフォルトで [3278/tcp] で待ち受けています。
もう一つターミナルを開いてアクセスしてみます。
「Redisインストール」の「4.動作確認」で redis-cliコマンドを使って Redisにアクセスしていますが、Garnetが Redisのプロトコルに準拠しているなら同じことができるはず。
ものは試しでやってみます。
ポートが Redisのデフォルトの [6379/tcp] から変わってしまってますので -pオプションを使って [3278/tcp] を指定しています。
subro@Lubuntu2204:~/work/garnet$ redis-cli -p 3278 set mykey somevalue
OK
subro@Lubuntu2204:~$ redis-cli -p 3278 get mykey
"somevalue"
良さげです。
GarnetサーバープログラムはCtrl+Cで停止しました。
2..NETのプログラムの実行ファイル形式
ビルドした PCからサーバーに配置するにあたり、Javaの Spring Bootが作る FatJarファイルみたいにライブラリを含め必要なファイル全てを 1ファイルに纏めることはできるか、そうだと楽で良いんだけど、という視点で調べてみました。
Microsoft Learnにこのようなドキュメントがありました。
単一ファイルのデプロイ
読んでみると .NETでも 1つに纏めることはできて、以下 2つの形式があるようです。
フレームワークに依存するデプロイモデル | デプロイ先に .NETがインストールされている前提 実行ファイルサイズ小 |
自己完結型アプリケーション | .NETも全部込みにするのでデプロイ先に .NETが インストールされてなくても良い 実行ファイルサイズ大 |
環境構築では、Ubuntu Serverに .NET8をインストールしましたから、フレームワークに依存するデプロイモデルでやってみようと思います。
しかしこの 2種はビルド時に指定するものと思いますが、どこでやるのかというと Garnetのプロジェクトファイル
[~/work/garnet/main/GarnetServer/GarnetServer.csproj] になります。
以下は GitHubからダウンロードしてきたそのまんまです。
(バックスラッシュは Windowsの「¥」を表しているんでしょう。)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<Platforms>AnyCPU</Platforms>
<LangVersion>latest</LangVersion>
<ServerGarbageCollection>true</ServerGarbageCollection>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DefineConstants>DEBUG</DefineConstants>
<DebugType>full</DebugType>
<OutputPath>bin\$(Platform)\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DefineConstants></DefineConstants>
<Optimize>true</Optimize>
<OutputPath>bin\$(Platform)\Release\</OutputPath>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\test\testcerts\testcert.pfx" Link="testcert.pfx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\libs\server\Garnet.server.csproj" />
<ProjectReference Include="..\..\libs\host\Garnet.host.csproj" />
<ProjectReference Include="..\..\libs\storage\Tsavorite\cs\src\devices\AzureStorageDevice\Tsavorite.devices.AzureStorageDevice.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="garnet.conf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
ドキュメントによると、プロパティに [PublishSingleFile]変数を加え、この値を [true] にすれば良いようです。
ですので、上のファイルのうちこの箇所をこう変更してやれば良さげ。
<PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<Platforms>AnyCPU</Platforms>
<LangVersion>latest</LangVersion>
<ServerGarbageCollection>true</ServerGarbageCollection>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
これで単一ファイルになる模様。
更に、上に書いた 2種のうちどちらで作るかは、ビルド時にコマンドオプションで指定するようです。
●フレームワークに依存するデプロイモデルのほう
dotnet publish -r linux-x64 --self-contained false
●自己完結型アプリケーションのほう
dotnet publish -r linux-x64
上の方を実行してみます。
カレントディレクトリは [~/work/garnet/main/GarnetServer] になっていますのでご注意ください。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ dotnet publish -r linux-x64 --self-contained false
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
復元対象のプロジェクトを決定しています...
/home/subro/work/garnet/libs/common/Garnet.common.csproj を復元しました (928 ms)。
/home/subro/work/garnet/metrics/HdrHistogram/HdrHistogram.csproj を復元しました (928 ms)。
/home/subro/work/garnet/libs/storage/Tsavorite/cs/src/devices/AzureStorageDevice/Tsavorite.devices.AzureStorageDevice.csproj を復元しました (84 ms)。
/home/subro/work/garnet/libs/storage/Tsavorite/cs/src/core/Tsavorite.core.csproj を復元しました (26 ms)。
/home/subro/work/garnet/libs/cluster/Garnet.cluster.csproj を復元しました (2.64 sec)。
/home/subro/work/garnet/libs/server/Garnet.server.csproj を復元しました (3.72 sec)。
/home/subro/work/garnet/main/GarnetServer/GarnetServer.csproj を復元しました (2.79 sec)。
/home/subro/work/garnet/libs/host/Garnet.host.csproj を復元しました (3.74 sec)。
/home/subro/work/garnet/libs/client/Garnet.client.csproj を復元しました (38 ms)。
/usr/share/dotnet/sdk/8.0.202/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.CrossTargeting.targets(31,5): error NETSDK1129: ターゲット フレームワークを指定しないと、'Publish' ターゲットはサポートされません。現在のプロジェクトは複数のフレームワークを対象としています。発行するには、 次のフレームワークのうち 1 つを指定する必要があります: net8.0, net7.0, net6.0 [/home/subro/work/garnet/main/GarnetServer/GarnetServer.csproj]
dotnet publishコマンド使用時は、.NETのバージョンを 1つに絞らないといけないようです。
[~/work/garnet/main/GarnetServer/GarnetServer.csproj]ファイルを見ると .NET8・7・6用を作るようになっています。
<PropertyGroup>
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<Platforms>AnyCPU</Platforms>
<LangVersion>latest</LangVersion>
<ServerGarbageCollection>true</ServerGarbageCollection>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
コマンドオプションで .NET8だけを指定して再度パブリッシュします。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ dotnet publish -r linux-x64 --self-contained false --framework net8.0
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
復元対象のプロジェクトを決定しています...
/home/subro/work/garnet/main/GarnetServer/GarnetServer.csproj を復元しました (449 ms)。
9 個中 8 個の復元対象のプロジェクトは最新です。
HdrHistogram -> /home/subro/work/garnet/metrics/HdrHistogram/bin/AnyCPU/Release/net8.0/HdrHistogram.dll
Tsavorite.core -> /home/subro/work/garnet/libs/storage/Tsavorite/cs/src/core/bin/AnyCPU/Release/net8.0/Tsavorite.core.dll
Tsavorite.devices.AzureStorageDevice -> /home/subro/work/garnet/libs/storage/Tsavorite/cs/src/devices/AzureStorageDevice/bin/AnyCPU/Release/net8.0/Tsavorite.devices.AzureStorageDevice.dll
Garnet.common -> /home/subro/work/garnet/libs/common/bin/AnyCPU/Release/net8.0/Garnet.common.dll
Garnet.client -> /home/subro/work/garnet/libs/client/bin/AnyCPU/Release/net8.0/Garnet.client.dll
Garnet.server -> /home/subro/work/garnet/libs/server/bin/AnyCPU/Release/net8.0/Garnet.server.dll
Garnet.cluster -> /home/subro/work/garnet/libs/cluster/bin/AnyCPU/Release/net8.0/Garnet.cluster.dll
GGarnet.host -> /home/subro/work/garnet/libs/host/bin/AnyCPU/Release/net8.0/Garnet.host.dll
GarnetServer -> /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/GarnetServer.dll
GarnetServer -> /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish/
できたようです。
コンソールに出てきたディレクトリ(黄色)は何だろう?と思ったら、これが linux-x64用のパブリッシュ時のデフォルトの出力先のようです。
どうやらこのディレクトリを Ubuntu Serverに持っていけば良い模様。
どんなファイルがあるのか見てみます。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ cd /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish$ ls -l
total 9828
-rw-rw-r-- 1 subro subro 43028 3月 22 21:30 Garnet.client.pdb
-rw-rw-r-- 1 subro subro 100836 3月 22 21:30 Garnet.client.xml
-rw-rw-r-- 1 subro subro 78684 3月 22 21:30 Garnet.cluster.pdb
-rw-rw-r-- 1 subro subro 93172 3月 22 21:30 Garnet.cluster.xml
-rw-rw-r-- 1 subro subro 37668 3月 22 21:29 Garnet.common.pdb
-rw-rw-r-- 1 subro subro 84076 3月 22 21:29 Garnet.common.xml
-rw-rw-r-- 1 subro subro 33180 3月 22 21:30 Garnet.host.pdb
-rw-rw-r-- 1 subro subro 35781 3月 22 21:30 Garnet.host.xml
-rw-rw-r-- 1 subro subro 200228 3月 22 21:30 Garnet.server.pdb
-rw-rw-r-- 1 subro subro 473454 3月 22 21:30 Garnet.server.xml
-rwxr-xr-x 1 subro subro 7710286 3月 24 08:00 GarnetServer
-rw-rw-r-- 1 subro subro 17544 3月 24 08:00 GarnetServer.pdb
-rw-rw-r-- 1 subro subro 11590 3月 24 08:00 GarnetServer.xml
-rw-rw-r-- 1 subro subro 20148 3月 22 21:30 HdrHistogram.pdb
-rw-rw-r-- 1 subro subro 65138 3月 22 21:30 HdrHistogram.xml
-rw-rw-r-- 1 subro subro 210808 3月 22 21:30 Tsavorite.core.pdb
-rw-rw-r-- 1 subro subro 747349 3月 22 21:30 Tsavorite.core.xml
-rw-rw-r-- 1 subro subro 25532 3月 22 21:30 Tsavorite.devices.AzureStorageDevice.pdb
-rw-rw-r-- 1 subro subro 21001 3月 22 21:30 Tsavorite.devices.AzureStorageDevice.xml
-rw-rw-r-- 1 subro subro 1549 3月 22 21:20 garnet.conf
drwxrwxr-x 4 subro subro 4096 3月 24 07:59 runtimes
-rw-rw-r-- 1 subro subro 974 3月 22 21:20 testcert.pfx
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish$ tree
.
├── Garnet.client.pdb
├── Garnet.client.xml
├── Garnet.cluster.pdb
├── Garnet.cluster.xml
├── Garnet.common.pdb
├── Garnet.common.xml
├── Garnet.host.pdb
├── Garnet.host.xml
├── Garnet.server.pdb
├── Garnet.server.xml
├── GarnetServer
├── GarnetServer.pdb
├── GarnetServer.xml
├── HdrHistogram.pdb
├── HdrHistogram.xml
├── Tsavorite.core.pdb
├── Tsavorite.core.xml
├── Tsavorite.devices.AzureStorageDevice.pdb
├── Tsavorite.devices.AzureStorageDevice.xml
├── garnet.conf
├── runtimes
│ ├── linux-x64
│ │ └── native
│ │ └── libnative_device.so
│ └── win-x64
│ └── native
│ ├── native_device.dll
│ └── native_device.pdb
└── testcert.pfx
5 directories, 24 files
う〜ん、ドキュメントを読む限り「フレームワークに依存するデプロイモデル」は DLLの形になっていて、クロスプラットフォーム(Linux & Win)で動かせる認識なんですが、DLLはないんですね。
DLLは [GarnetServer]ファイルに纏められていると思いますけど、何だかんだでファイルが随分あります。
tarコマンドで 1つに纏めてから、Ubuntu Serverに持っていきましょう。
tarコマンドで纏めます。
カレントディレクトリを一つ上(親)に移してから作業しています。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish$ cd ..
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64$ tar -czvf garnet.tgz publish
publish/
publish/Garnet.common.pdb
publish/HdrHistogram.pdb
publish/Tsavorite.core.pdb
publish/Garnet.client.pdb
publish/Garnet.server.xml
publish/Garnet.client.xml
publish/GarnetServer
publish/Garnet.host.xml
publish/Tsavorite.devices.AzureStorageDevice.pdb
publish/Garnet.server.pdb
publish/runtimes/
publish/runtimes/linux-x64/
publish/runtimes/linux-x64/native/
publish/runtimes/linux-x64/native/libnative_device.so
publish/runtimes/win-x64/
publish/runtimes/win-x64/native/
publish/runtimes/win-x64/native/native_device.dll
publish/runtimes/win-x64/native/native_device.pdb
publish/garnet.conf
publish/Garnet.cluster.pdb
publish/testcert.pfx
publish/Garnet.host.pdb
publish/HdrHistogram.xml
publish/Garnet.cluster.xml
publish/GarnetServer.xml
publish/Tsavorite.devices.AzureStorageDevice.xml
publish/GarnetServer.pdb
publish/Tsavorite.core.xml
publish/Garnet.common.xml
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64$ ls -l *.tgz
-rw-rw-r-- 1 subro subro 4131230 3月 24 09:30 garnet.tgz
[garnet.tgz]ファイルができました。
scpコマンドで Ubuntu Serverの [subro]ユーザーのホームディレクトリ以下にある [work]ディレクトリに持っていきます。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64$ scp garnet.tgz subro@UbuntuServer2204-1:~/work
garnet.tgz 100% 4034KB 72.6MB/s 00:00
コピーできました。
3.Ubuntu Serverへ Garnetをデプロイ
次は Ubuntu Serverでの作業です。
sshログインしました。
先程 scpコマンドで Lubuntuからコピーしてきたファイルを確認します。
subro@UbuntuServer2204-1:~/work$ ls -l garnet.tgz
-rw-rw-r-- 1 subro subro 4131230 3月 24 09:48 garnet.tgz
ありました。
tarコマンドで解凍&展開します。
subro@UbuntuServer2204-1:~/work$ tar -xzvf garnet.tgz
publish/
publish/Garnet.common.pdb
publish/HdrHistogram.pdb
publish/Tsavorite.core.pdb
publish/Garnet.client.pdb
publish/Garnet.server.xml
publish/Garnet.client.xml
publish/GarnetServer
publish/Garnet.host.xml
publish/Tsavorite.devices.AzureStorageDevice.pdb
publish/Garnet.server.pdb
publish/runtimes/
publish/runtimes/linux-x64/
publish/runtimes/linux-x64/native/
publish/runtimes/linux-x64/native/libnative_device.so
publish/runtimes/win-x64/
publish/runtimes/win-x64/native/
publish/runtimes/win-x64/native/native_device.dll
publish/runtimes/win-x64/native/native_device.pdb
publish/garnet.conf
publish/Garnet.cluster.pdb
publish/testcert.pfx
publish/Garnet.host.pdb
publish/HdrHistogram.xml
publish/Garnet.cluster.xml
publish/GarnetServer.xml
publish/Tsavorite.devices.AzureStorageDevice.xml
publish/GarnetServer.pdb
publish/Tsavorite.core.xml
publish/Garnet.common.xml
展開できました。
[publish]ディレクトリに移って、Garnetを実行します。
subro@UbuntuServer2204-1:~/work$ cd publish
subro@UbuntuServer2204-1:~/work/publish$ ./GarnetServer
_________
/_||___||_\ Garnet 1.0.0 64 bit; standalone mode
'. \ / .' Port: 3278
'.\ /.' https://aka.ms/GetGarnet
'.'
* Ready to accept connections
ちゃんと動きました。
クライントの Lubuntuから redis-cliコマンドでアクセスしてみます。
-hオプションでホストを指定できます。
([UbuntuServer2204-1] は [/etc/hosts] で名前解決できるようにしています)
subro@Lubuntu2204:~$ redis-cli -h UbuntuServer2204-1 -p 3278 set mykey somevalue
OK
subro@Lubuntu2204:~$ redis-cli -h UbuntuServer2204-1 -p 3278 get mykey
"somevalue"
\(^o^)/
本当に Ubuntu Serverに入れた .NET8を使っているのか?と思い、apt removeコマンドで .NET関係のパッケージを全部消して、dotnetコマンドも無くなった状態で再度実行してみたらエラーになりましたんで、「フレームワークに依存するデプロイモデル」でビルドされたものなんだろうということが想定されます。
subro@UbuntuServer2204-1:~/work/publish$ ./GarnetServer
You must install .NET to run this application.
App: /home/subro/work/publish/GarnetServer
Architecture: x64
App host version: 8.0.3
.NET location: Not found
Learn more:
https://aka.ms/dotnet/app-launch-failed
Download the .NET runtime:
https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=linux-x64&os=ubuntu.22.04&apphost_version=8.0.3
良いんじゃないでしょうか。
4.おまけ:自己完結型アプリケーションも作ってみる
せっかく Ubuntu Serverから .NET8を抜きましたし、.NET含め全部入りという「自己完結型アプリケーション」も作ってみます。
クライアントの Lubuntuでの作業です。
パブリッシュします。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ dotnet publish -r linux-x64 --framework net8.0
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
復元対象のプロジェクトを決定しています...
復元対象のすべてのプロジェクトは最新です。
HdrHistogram -> /home/subro/work/garnet/metrics/HdrHistogram/bin/AnyCPU/Release/net8.0/HdrHistogram.dll
Garnet.common -> /home/subro/work/garnet/libs/common/bin/AnyCPU/Release/net8.0/Garnet.common.dll
Tsavorite.core -> /home/subro/work/garnet/libs/storage/Tsavorite/cs/src/core/bin/AnyCPU/Release/net8.0/Tsavorite.core.dll
Garnet.client -> /home/subro/work/garnet/libs/client/bin/AnyCPU/Release/net8.0/Garnet.client.dll
Tsavorite.devices.AzureStorageDevice -> /home/subro/work/garnet/libs/storage/Tsavorite/cs/src/devices/AzureStorageDevice/bin/AnyCPU/Release/net8.0/Tsavorite.devices.AzureStorageDevice.dll
Garnet.server -> /home/subro/work/garnet/libs/server/bin/AnyCPU/Release/net8.0/Garnet.server.dll
Garnet.cluster -> /home/subro/work/garnet/libs/cluster/bin/AnyCPU/Release/net8.0/Garnet.cluster.dll
Garnet.host -> /home/subro/work/garnet/libs/host/bin/AnyCPU/Release/net8.0/Garnet.host.dll
GarnetServer -> /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/GarnetServer.dll
GarnetServer -> /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish/
パブリッシュできました。
どんなファイルができているか見てみます。
subro@Lubuntu2204:~/work/garnet/main/GarnetServer$ ls -l /home/subro/work/garnet/main/GarnetServer/bin/AnyCPU/Release/net8.0/linux-x64/publish
total 74976
-rw-rw-r-- 1 subro subro 43028 3月 22 21:30 Garnet.client.pdb
-rw-rw-r-- 1 subro subro 100836 3月 22 21:30 Garnet.client.xml
-rw-rw-r-- 1 subro subro 78684 3月 22 21:30 Garnet.cluster.pdb
-rw-rw-r-- 1 subro subro 93172 3月 22 21:30 Garnet.cluster.xml
-rw-rw-r-- 1 subro subro 37668 3月 22 21:29 Garnet.common.pdb
-rw-rw-r-- 1 subro subro 84076 3月 22 21:29 Garnet.common.xml
-rw-rw-r-- 1 subro subro 33180 3月 22 21:30 Garnet.host.pdb
-rw-rw-r-- 1 subro subro 35781 3月 22 21:30 Garnet.host.xml
-rw-rw-r-- 1 subro subro 200228 3月 22 21:30 Garnet.server.pdb
-rw-rw-r-- 1 subro subro 473454 3月 22 21:30 Garnet.server.xml
-rwxr-xr-x 1 subro subro 74422945 3月 24 16:05 GarnetServer
-rw-rw-r-- 1 subro subro 17544 3月 24 08:00 GarnetServer.pdb
-rw-rw-r-- 1 subro subro 11590 3月 24 08:00 GarnetServer.xml
-rw-rw-r-- 1 subro subro 20148 3月 22 21:30 HdrHistogram.pdb
-rw-rw-r-- 1 subro subro 65138 3月 22 21:30 HdrHistogram.xml
-rw-rw-r-- 1 subro subro 210808 3月 22 21:30 Tsavorite.core.pdb
-rw-rw-r-- 1 subro subro 747349 3月 22 21:30 Tsavorite.core.xml
-rw-rw-r-- 1 subro subro 25532 3月 22 21:30 Tsavorite.devices.AzureStorageDevice.pdb
-rw-rw-r-- 1 subro subro 21001 3月 22 21:30 Tsavorite.devices.AzureStorageDevice.xml
-rw-rw-r-- 1 subro subro 1549 3月 22 21:20 garnet.conf
drwxrwxr-x 4 subro subro 4096 3月 24 07:59 runtimes
-rw-rw-r-- 1 subro subro 974 3月 22 21:20 testcert.pfx
[GarnetServer]ファイルのサイズに注目です。
さっきは [7,710,286] 今度は [74,422,945]と 10倍くらいに大きくなりました。
このファイルだけ Ubuntu Serverに持ってきました。
ここから Ubuntu serverでの作業になります。
[~/work]ディレクトリに置いたので、上で使った [~/work/publish]ディレクトリとは無関係になってるはずです。
subro@UbuntuServer2204-1:~/work$ ls -l GarnetServer
-rwxr-xr-x 1 subro subro 74422945 3月 24 16:15 GarnetServer
実行してみます。
subro@UbuntuServer2204-1:~/work$ ./GarnetServer
_________
/_||___||_\ Garnet 1.0.0 64 bit; standalone mode
'. \ / .' Port: 3278
'.\ /.' https://aka.ms/GetGarnet
'.'
* Ready to accept connections
単品ファイルで動いております。
クライアントの Lubuntuからテストしましょう。
subro@Lubuntu2204:~$ redis-cli -h UbuntuServer2204-1 -p 3278 set mykey somevalue
OK
subro@Lubuntu2204:~$ redis-cli -h UbuntuServer2204-1 -p 3278 get mykey
"somevalue"
\(^o^)/
==========
途中から Garnetのインストールより .NETのコンソールアプリのデプロイが主眼になってしまった気もしますが、どうにかやり遂げられました。
本当は Garnetを使って「は、速ぇっ?!」ってやるのが期待される結果なんでしょうけど、所詮サーバーもクライアントも 1つの PC上に構築している貧乏環境ゆえ…
しかし、今回の実験は .NETのデプロイの良いお勉強になりました。
その後オフィシャルのドキュメントを読み進めるに、Garnetは Redisの完全互換を目指しているわけではないとありました。
あくまで Redisからの移行をスムースにするために Redisユーザー用の口も作っている、そんなノリなんですかね。
このシリーズを書いている途中に Redisのライセンスのニュースが入ってきたあたり、Redisのゴタゴタをマイクロソフトは知ってて、Azure Redis for Cacheの代替サービスにするつもりなのかも知れません。
メジャーリリースと言ってもまだ 1.0.0ですし、ドキュメントには今後の開発予定も一杯書いてありましたから、どんどん機能拡充していく計画のようです。
今後 Dragonflyとの闘いがどうなるかに注目ですね。