LoginSignup
0
0

More than 1 year has passed since last update.

MySQL RouterにUnixドメインソケットで繋ごうとした

Last updated at Posted at 2021-05-04

MySQL InnoDB Cluster練習 - Qiita
前回の続き

概要

  • MySQL routerは冗長構成にするのではなく、アプリケーションサーバー上でローカルUNIXドメインソケット接続するのが推奨らしい
  • 引き続きRedhat系のAlmaLinux8での検証

結果

  • --conf-use-socketsを付けてbootstrapすることでrouter起動時にsocketファイルが出来上がる
  • ただしそのままだとsocketファイルのパスはsystemdのprivate-tmp内になってしまう
  • mysqlrouterの--directoryオプションで変更は可能だが、設定ファイル等も移動してしまうのでsystemdのmysqlrouterユニットファイル変更が必要になってしまう
  • bootstrap後に/etc/mysqlrouter/mysqlrouter.confを書き換えるのが現状の良さげな解か?
  • config_generator.ccsocketsdirというオプションがあり、これが使えれば書き換えしなくて済みそうだが、引数を受け付ける実装が無いため使えなかった。

設定

--conf-use-socketsを付けてbootstrapすることでsocketファイルが出来上がる

// router
# mysqlrouter --bootstrap root@node1 --user=mysqlrouter --conf-use-sockets 
# cat /etc/mysqlrouter/mysqlrouter.conf  | grep sock
socket=/tmp/mysql.sock
socket=/tmp/mysqlro.sock
socket=/tmp/mysqlx.sock
socket=/tmp/mysqlxro.sock
# systemctl start mysqlrouter

// systemdのprivate-tmpにより実体は以下になる
# ll /tmp/systemd-private-2a0d5074208b46fdbb4fad9862a4b0c4-mysqlrouter.service-WHFHbS/tmp/
total 0
srwxrwxrwx 1 mysqlrouter mysqlrouter 0 May  4 17:35 mysqlro.sock
srwxrwxrwx 1 mysqlrouter mysqlrouter 0 May  4 17:35 mysql.sock
srwxrwxrwx 1 mysqlrouter mysqlrouter 0 May  4 17:35 mysqlxro.sock
srwxrwxrwx 1 mysqlrouter mysqlrouter 0 May  4 17:35 mysqlx.sock

// Unixドメインソケットで接続可だが期待したパスではない
# mysql -u root -p -S /tmp/systemd-private-2a0d5074208b46fdbb4fad9862a4b0c4-mysqlrouter.service-WHFHbS/tmp/mysql.sock
mysql> 

// パスを書き換えてみる
# vi /etc/mysqlrouter/mysqlrouter.conf
-socket=/tmp/mysql.sock
+socket=/var/lib/mysqlrouter/mysql.sock
-socket=/tmp/mysqlro.sock
+socket=/var/lib/mysqlrouter/mysqlro.sock
-socket=/tmp/mysqlx.sock
+socket/var/lib/mysqlrouter/mysqlx.sock
-socket=/tmp/mysqlxro.sock
+socket=/var/lib/mysqlrouter/mysqlxro.sock

# systemctl retart mysqlrouter

# mysql -u root -p -S /var/lib/mysqlrouter/mysql.sock

bootstrap時に変更するオプションがあるようだが、引数を受け付ける実装が無かった。

mysql-8.0.24/router/src/router/src/config_generator.cc
  if (user_options.find("socketsdir") == user_options.end())
    options["socketsdir"] = "/tmp";

MySQL Routerの冗長化について - 2000秒後の私へ
MySQL Routerを使用して、InnoDB Clusterを構成する(MySQL Routerの設定主体) - CLOVER🍀
MySQL :: MySQL Router 8.0 :: 3 Deploying MySQL Router

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0