Global_Private_CGN_ip

プライベートIPアドレス Class A: 10.0.0.0 to 10.255.255.255 This range supports a large number of hosts and is often used in very large networks. Class B: 172.16.0.0 to 172.31.255.255 This range is commonly used in medium-sized networks. Class C: 192.168.0.0 to 192.168.255.255 This range is typically used for smaller networks, like home or small business networks. 合計いくつあるのでしょうか? class Aは2^24くらいいけね?つまり? >>> 2**24 16777216 はい、classBは? >>> 16*2**16 1048576 classCは? >>> 2**16 65536 グローバルIPアドレス はい、グローバルIPね。JPNICとか、そのへんによって管理されているやつね。 2^32個ありますね、はい。そこから上のクラスのを抜いていきます 2**32 - 2**24 - 16*2**16 - 2**16 =4277075968 それでも40億箱しているって話ね。しかしだよ。これすごく重要なこと言います。実はまだグローバルに割り当てられていないIPが存在するんです。知ってましたか??(初耳) ...

July 18, 2024 · 1 min · 137 words · Me

Raft

Raftについて 分散システムを勉強するのであれば、必ず必要となる。これだけ覚えておこう。 Replicate And Fault Tolerant Raftの目的 Raftアルゴリズムの目的は、分散システムにおける信頼性の高いリーダー選出とログレプリケーションを通じて、一貫性のある状態を維持することです。具体的には、複数のノードが協調して動作し、一つのノードが故障してもシステム全体としての一貫性と可用性を保つことを目指します。 raft demo site このサイトを見ると、ラフトの動作が詳細までわかることでしょう。 参考文献 youtube 目的を達成する手段 Raftアルゴリズムは、以下の手段を用いて目的を達成します:(これはそのまま、ラフトを開発した研究者のプレゼン(youtubeで見られる)で発表されていたものと同じ) リーダー選出: クラスタ内の一つのノードがリーダーとして選ばれ、他のフォロワーノードに対して命令を発行します。リーダーはクライアントからのリクエストを受け取り、ログにエントリを追加します。 リーダが死んだ際には新たにリーダを選出するようにプロトコルが組まれています ログレプリケーション: リーダーがクライアントからのリクエストを受け取ると、そのリクエストをログに記録し、そのログエントリをフォロワーノードに複製します。フォロワーはリーダーからの指示に従い、同じログを持つことで一貫性を保ちます。 ここは結構大事だけど、クライアントからデータを受け取るのはリーダだけです 安全性の確保: 特定の条件下でのみリーダーが選出されるようにし、ログのコミットが保証されることで、システムの安全性と一貫性を確保します。 例えば、フォロワーの過半数がログエントリを受け取った場合にのみ、そのエントリをコミットと見なします。 また、最新のログ状態を持っているサーバしかリーダになれないようになっています。 リーダーの失敗処理:リーダーが失敗した場合、残りのノードのうち一つが新しいリーダーとして選出されます。この選出プロセスは、タイムアウトと投票を用いて実現されます。 まとめるとこうです。 Leader election Log replication safety では、ここから詳細に写っていこうと思います。 前提知識 エージェント(各サーバの役割) サーバは3つの状態のうちのどれか follower : completely passive. Does no action. But if he doesn’t get heart beat from leader he gets anxious and try to become a leader. He tries to . They expect to get heart beat from leader. candidate: Sends RequestVotes RPCs to get elected as leader. leader: Replicate its log to the followers. Heart beats to maintain its leadershop If candidate or leader discovers higher terms RPC it gets back to follower. ...

July 17, 2024 · 2 min · 244 words · Me

分散システム学習再始動

出会いに感謝 類は友を呼ぶとは言ったものだが、やはり部署が同じ人というのは興味も似てくる。 とはいっても、まさかTiDBやcockroachDBのコントリビュータとお友達になれるとは思わないわけで。 尊敬しかない。自分はあきらめてしまった道を一人で突き進んでいったのだろう。 自分の弱さがふがいない。せっかく先陣を切ってくれた先人がいるのだから、これは後に続こうと思える。 ロールモデルがあると自分も頑張ろうと思えるわけで。こんなところで師匠に出会えるとは、、、最高すぎる。 ということで、もう一度、分散システムに挑んでみようと思う。 とりあえず今日話したことをメモ 今のデータベース、MySQLとかはレプリケーションという技術を使って、一つのデータベースのテーブルを複数のノードにレプリケーションしている。レプリケーションされたデータが存在するノードが読み取り専用になる。マスターと呼ばれるノードは一台で、書き込みはここにだけ行われる。 しかし、これでは書き込み速度がスケールしないという問題点が生じる。そこで、noSQLというやつが出てきたんだよね。しかし、noSQLは整合性を保つのが難しいという課題があったんだよね。 そこで出てきたのがnewSQLというやつだね。tidb等。これを使うとwriteを容易にスケールすることができる。という話だ。 ほほう。なるほど。 ちなみに、俺が大好きなandrew pavloがこんな論文を出している andrew pavlo これによるとnewSQLの必要十分条件は、 NewSQL system’s implementation has to use (1) a lock-free concurrency control scheme and (2) a shared-nothing distributed architecture まじか、これだけでいいのか。 この記事がすごくいい感じに論文をまとめてくれている。 データベースの種類 RDBMS: mysql, postgresqlなど noSQL: cassandra, dynamodb newSQL: TiDB, cochroachDB 自分が過去に書いたデータベース関係の記事を見返したい TiDBについて調べていた時期もありましたねー 流れ まずはraftについてちゃんと理解するのが大事だと思う。実は完全に理解したとはいいがたい。 分散データベースを作るならまずは分散してないデータベースを作れないといけない。ということで、CMUのbustubの講義は受けなおした方がいい。 分散システムを理化するためにデータ志向アプリケーションを読もう。頼んだ。 いきなりだが、TiDBを読み込もう。cochroachDBでもいいと思う。この時にdesign Docsを読むのがいいらしい。 その他の疑問 シャーティングという技術がある。 これは、データを複数のノードに分散して格納することで、検索速度を上げる方法。 RAID0(ストライピング)とはまた別なのね? シャーディング(Sharding) 目的:データを分割して、複数のデータベースサーバに分散させ、スケーラビリティを向上させることです。 特徴: データベース全体を論理的に分割し、それぞれの部分を「シャード」と呼ばれる個別のデータベースに保存します。 各シャードは独立したデータベースとして動作し、特定のデータサブセットを保持します。 シャードは水平分割とも呼ばれ、特定のキー(例:ユーザーID、地域、日時など)に基づいてデータを分割します。 データの分割によって、単一のデータベースサーバにかかる負荷を分散させ、スケーラビリティとパフォーマンスを向上させます。 例: ユーザーIDに基づいて、ユーザーデータをシャードA、シャードB、シャードCに分割する。 ストライピング(Striping) 目的:データを分散してストレージパフォーマンスを向上させることです。主にデータの読み書き速度を向上させるために使用されます。 特徴: 単一のファイルやデータセットを複数のストレージデバイスに均等に分割して保存します。 各ストライプは連続したデータブロックを含み、ストライプ単位で並行して読み書きが行われます。 RAID(Redundant Array of Independent Disks)のコンセプトの一つであり、特にRAID 0が代表的です。 ストライピングは、ディスクI/O性能を向上させるために使用されますが、冗長性やフェールオーバーの機能はありません(特にRAID 0では)。 例: 1GBのファイルを4つのディスクに分割し、各ディスクに256MBずつ書き込む。 まとめ シャーディングは、データベース全体を複数のシャードに分割し、各シャードを異なるサーバに分散させることで、スケーラビリティとパフォーマンスを向上させる手法です。 ストライピングは、データを複数のストレージデバイスに均等に分割して並行して読み書きすることで、ストレージのパフォーマンスを向上させる手法です。 ストライピングとシャーティングの両方を使うことはできますか?

July 16, 2024 · 1 min · 87 words · Me

Mac_cheat_sheet

背景 いや、会社入るまでずっとwindowsユーザだったんですよ。だから最初マック渡されたときはだいぶ戸惑いましたね。 しかし、慣れてくると今度は逆にウィンドウズが気持ち悪くなってくるんですよね。画面の切り替えができないのがマジでつらいということに築きました。 しかし、Macにはまだまだたくさんの裏技があると俺は知っています。ここで全部洗いだしてしまおうと思います。 マックのチートシート まずはよく使うショートカットキー4つを覚えておきたいと思います commandキー optioinキー shiftキー controlキー アプリケーションの切り替え command + tab ページ先頭/末尾に移動する comamnd + 上矢印/下矢印 windowdではctrl + fn + <-/-> クロームでタブを切り替え Command + option 全画面スクショ shift + command + 3 範囲指定スクショ shift + command + 4 chromeタブの切り替え

July 12, 2024 · 1 min · 40 words · Me

GSLB_and_DNS

GSLBとは はい、GSLB(Global Server Load Balancing)について知っています。GSLBは、複数の地理的に分散したサーバー間でネットワークトラフィックを効果的に分散するための技術です。これにより、以下のような利点が得られます。 高可用性: サーバーの障害が発生した場合でも、トラフィックを他の健全なサーバーにリダイレクトすることでサービスの継続性を確保します。 負荷分散: トラフィックを複数のサーバーに分散することで、特定のサーバーに過負荷がかかるのを防ぎます。 低遅延: ユーザーに最も近いサーバーにトラフィックをルーティングすることで、応答時間を短縮します。 災害復旧: 地理的に分散したサーバーを利用することで、特定地域での災害や障害に対する耐性を向上させます。 GSLBは、DNSベースの方法や、アプリケーション層でのルーティングを使用して実現されることが一般的です。具体的な実装方法や製品には、以下のようなものがあります。 DNSラウンドロビン: 最も基本的なGSLBの方法で、DNSサーバーが複数のIPアドレスを順番に返すことで負荷を分散します。 Anycast: 同じIPアドレスを複数の地理的に分散したサーバーに割り当て、最も近いサーバーにトラフィックをルーティングします。 商用製品: F5 NetworksのBIG-IP、CitrixのNetScaler、Amazon Web ServicesのRoute 53など、さまざまな商用ソリューションがあります。 GSLBは、大規模なWebサービスやクラウドサービスでよく利用される技術です。 僕の質問 一般ユーザはDNSを介してどのサーバにアクセスするかがきいまると思います。また、DNSは裏でGSLBと繋がっていて、一般ユーザー>DNS -> GSLBという流れでリクエストが流れると思います。この認識は合っていますか? chatGPTの回答 基本的な認識は合っていますが、もう少し詳細に説明すると、DNSとGSLBの関係は次のようになります。 一般ユーザーのリクエスト: 一般ユーザーがウェブサイトにアクセスしようとすると、まずDNSリクエストが発生します。このリクエストは、ユーザーが入力したドメイン名をIPアドレスに変換するためのものです。 DNSサーバーの役割: DNSサーバーは、このドメイン名に対応するIPアドレスを返します。ここで、GSLBがDNSサーバーに組み込まれているか、もしくはGSLBがDNSサーバーと連携しています。 GSLBの動作: GSLBは、複数の地理的に分散したサーバーの中から最適なサーバーを選択し、そのサーバーのIPアドレスをDNSサーバーに返します。選択基準には、サーバーの負荷、地理的な距離、ネットワークの遅延などが含まれます。 DNSの応答: DNSサーバーは、GSLBから受け取った最適なサーバーのIPアドレスをユーザーに返します。 ユーザーのアクセス: 最終的に、ユーザーのブラウザは返されたIPアドレスを使って直接サーバーにアクセスします。 この流れを図にすると以下のようになります: mermaid sequenceDiagram participant User as 一般ユーザー participant DNS as DNSサーバー participant GSLB as GSLBシステム participant Server as 最適なサーバー User->>DNS: ドメイン名の解決リクエスト DNS->>GSLB: 最適なサーバーのIPアドレスを要求 GSLB->>DNS: 最適なサーバーのIPアドレスを返す DNS->>User: IPアドレスを返す User->>Server: サーバーにアクセス このように、一般ユーザーのリクエストは最終的にはDNSを介してGSLBによって選ばれた最適なサーバーに到達します。DNSはGSLBと連携して動作し、ユーザーに最適なサーバーのIPアドレスを提供します。 ...

July 9, 2024 · 2 min · 276 words · Me

Vim_cheat_sheet

vimのチートシート 基本 行番号の表示:カーソルモード(esc)を押した状態で、 :set nonumber 中堅 I : カーする業の行頭から挿入モードに遷移する gI: カーソル行の行頭から挿入モードに遷移 dd : カーソルがいる行を削除 ndd : カーソルがいる行からn行削除 e.g., 10dd : カーソルがいる行から10行削除 j : to down k : to up h : to the left l : to the right 複数選択 v : visual modeに入ってから、カーソルキーで複数選択。 さらにyをすることでやんく(こぴー)が可能。これは 応用

July 8, 2024 · 1 min · 46 words · Me

screwdriverでci/cdパイプラインを作る

screwdriver.cdでci/cdパイプラインを作成 自動デプロイをしたい。 github actionsを使うとself-hosted runnerを使って自動デプロイができるようになる。 がself-hosted runnerはどうやらプライベートリポジトリにしか使えないみたいなんだよね。 ってことでプライベートリポジトリをscrewdriver.cdと連携して、自分のプロジェクトで使えるようにしたい。 導入方法 公式ホームページに書いてある通りに、 python <(curl -L https://tinyurl.com/sd-in-a-box) を実行する。これをやると This command will run a script that will create a Docker Compose file for you locally, complete with Oauth credentials using a generated JWT and a user-provided Oauth Client ID and secret. If you choose to do so, it will then Docker pull the Screwdriver API, UI, and log store images to bring up an entire Screwdriver instance locally for you to play with. All data written to a database will be stored in a data/ directory. For more configuration details, see our SD-in-a-box documentation. ...

July 8, 2024 · 5 min · 1048 words · Me

LocalLLM

何の記事 ローカルホストにLLMをインストールし、性能を検証。 またapiを介して利用可能にする方法を検証。 最後に、社内のことを学ばせて、こういう質問が来たらこう答えてねってのを教え込ませる。 背景 自宅には計算資源がたくさんある。 それをネットワーク越しに使えるということがわかったので、LLM等の重い処理も自宅で動かして、軽量なフロントエンドと連携させる、 みたいなことが非常に簡単にできるということがわかった。 LLMで何をしたいか??お客さんからの問い合わせに自動で答えるチャットボットを作りたいのよね。 うん、社内の情報とかを学ばせないといけない。その辺のファインチューニングの仕方も知りたい。 参考記事 [ollamaについて] (https://bhrtaym-blog.com/?p=407) [ローカルLLMをGPUで動かす] (https://zenn.dev/giana12th/articles/7fc22c8cbdbb5e) ollama公式サイト ollamaのgithub proxmoxで動かすための下準備 GPUをパススルー必要がある。 あと、一番大きいモデルでは何倍とメモリが必要なんだっけ? 64GB以上あれば問題ないらしい。のでとりあえずそれをインストールしようと思う。 あとは、ProxmoxでGPUをパススルーする方法。 あー、「ホストマシンのBIOSにて、VT-x, VT-d を有効にする。(VT-d は PCI Passthrough で必須)」 する必要があるらしい。 しかし、実はCPUの仮想化をした時点でGPUの仮想化もできるようになってたっぽい。 でした準備は完了した。がメモっておくか proxmoxのコンソールから、add hardware PCIeを選択し、GPUを入れる。 nvidia-driverをインストール nvidia-smiが使えるか確認。認識されているかも確認 ちなみに、ここでcudaのバージョンが出てくるけど、これは対応しているcudaのバージョンを示しているだけで実際にcudaがインストールされたわけではありません。そこを気を付けてください。 cuda(ランタイム)をインストール しかし、これはdocker等で、cudaが入ったコンテナを配ってもらえれば終わる話なので、無視でいいのかな??ちょっと調べてみよう。 proxmoxのCPUのtypeをhostに変える。これをやらないとavx命令が使えない。これゆえGPUが使われなくなってしまう。 ollamaのインストール dockerもある。 ollama on docker これを参考にnvidia-container-toolkitをインストールする感じか。 docker install後の苦戦 docker上のollama上で、llama3を動かすことには成功したんですよ。しかし、どうやらGPUでは動かせていいない。これはなんでかわかりました。 time=2024-07-19T00:29:37.242Z level=WARN source=gpu.go:225 msg="CPU does not have minimum vector extensions, GPU inference disabled" required=avx detected="no vector extensions" CPUがavx命令をサポートしていないとGPUにオフロードされないみたいですね。 ほかのところでも同じことが言われていました。 GPU support requires the AVX instruction set, check your CPU model. つまり、ProxmoxでどうにかしてavxをOnにする必要があるということです。 これのやり方ですが、cpuのtypeをホストにしたら解決するようです。ってことで変えて再起動します。 ...

July 7, 2024 · 1 min · 199 words · Me

Proxmoxサーバ爆誕

何の記事か Proxmoxという仮想マシン専用のマシンを立てる方法。そして遊んでみる。 参考文献 [proxmoxのインストール方法] (https://qiita.com/C_Kenta/items/70ecb32495fce9e1de52) proxmoxを使ってできること Proxmoxとは何か ProxmoxはDebianベースの仮想化プラットフォームです。操作はすべてWeb インターフェースで行うことができ、仮想マシンやLinuxコンテナを簡単に作成することができます。バックアップを簡単に作成でき、修復も非常に容易です。ハードウェアパススルーも可能で、USBカメラ、マウス、キーボードなどのデバイスをVMに渡すことができます。 ひところ えぐい 立てる 手順 公式から proxmoxのisoを持ってくる。以上。 インストール時の注意点 最新のをインストールしようとしたら、waitinig for /dev fully populated 的なのが出てきたけど、それは一個前のどの手段でインストールするかのところでeを押して、カーネルのブートパラメータにnomodesetをつけると解消された。よろぴく 実はVMてハードウェアの動きをソフトウェアでエミュレートする方法と、 もう一つKVMってのがあってね、KVMの方が圧倒的に速いわけですよ。んでね、 KVM hardware virtualizationってのをOFFにすると、ソフトウェアでエミュレートになる。しかし、これは遅いからKVM hardware virtualizationはONにした方がいい。しかし、ONにするにはBIOSでKVMをonにする設定を施さないといけない。それはリモートからではできないって話だな。乙。 BIOSのKVM VirtualizationをOFFにしたままUbuntuを走らせようとしたらこう怒られました。 KVM virtualisation configured, but not available. Either disable in VM configuration or enable in BIOS. advanced setting -> CPU Configuration -> SVM Mode -Enable > Save & reset これをやらないと勝ちで遅すぎて話にならなかった。すべてが遅すぎる。 マジで、CPUの動きをエミュレートする仮想化は、KVMと比べて10倍遅かった。えぐい。 GPUのパススルー これが結構面倒くさい。 VM上でOllama立ててllmを動かそうとしているんだけど、なかなかうまくいかない。 これはchatgptから得た回答だから、確証はないんだけど、参考にしてほしい。 chatgpt曰く、やらないといけないことは二つ Enabling IOMMU Enabling VFIO Enabling IOMMU これは何をやっているかだけど、 ...

July 6, 2024 · 1 min · 161 words · Me

KVM_server_and_ansible

何の記事か LinuxサーバでKVMを使った仮想マシン (VM)を立てられるようにし、 KIMCH を使い、webコンソールからVMを立てられるようにし、さらにansibleでVMにインフラのデプロイ、そしてネットワークなどをいじる記事 雑談 はい、完全に分離された自宅ネットワークでしたが、openVPNを使ったsite2site接続により、外からアクセスできるようになってしまった。これがマジで恐ろしい話や。 再びコンピュータを勉強する気力がわいてきたって話だ。頑張るぞい。 dkong上で動かそうと思う。自宅ネットワークでのdkongのipアドレスは 100.64.1.70や。VPNを使えばいつでもアクセスが可能になる。さらにインターネット上のhugo_serverのnginxでvpnをとおしてプロキシすることもできるので、実質インターネットに接しているdkongってわけだ。ネットワークえぐい。 インストール手順 基本的にはKIMCHここに書いてある通りに進めれば問題ない。 1. Wokのインストール Wokとは Wokのリポジトリをクローン git clone https://github.com/kimchi-project/wok.git wok依存ライブラリやランタイムなどをインストール sudo apt install -y python3-pip sudo -H pip3 install -r requirements-dev.txt sudo apt install -y gcc make autoconf automake git python3-pip python3-requests python3-mock gettext pkgconf xsltproc python3-dev pep8 pyflakes3 python3-yaml sudo apt install -y systemd logrotate python3-psutil python3-ldap python3-lxml python3-websockify python3-jsonschema openssl nginx python3-cherrypy3 python3-cheetah python3-pam python3-m2crypto gettext python3-openssl Wokをビルド and install sudo ./autogen.sh --system make wokを起動 sudo python3 src/wokd wokにブラウザでアクセス https://100.64.1.70:8001/login.html 初期パスワードを入力してログイン これ、ログインクレデンシャル、システムのとおんなじなのがすごい。びっくり! ...

July 6, 2024 · 1 min · 91 words · Me