---
title: "Galera Load Balancer | grasys blog"
url: "https://blog.grasys.io/post/hirai/galera-load-balancer"
description: "はじめまして、grasys 平井です。 今回、DBバックエンドへの接続にGalera Load Balancerを試したのでその紹介です。 弊社ではDBバックエンドにPercona XtraDB Clusterを使用しています。 Percona XtraDB Clusterでは、クラスタを構成する全ノードがマスタであ…"
---

# Galera Load Balancer

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[hirai](/authors/hirai/)
-   公開日：2018年11月29日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#galeraloadbalancer](/tags/galeraloadbalancer/)

![Galera Load Balancer](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

はじめまして、grasys 平井です。

今回、DBバックエンドへの接続に[Galera Load Balancer](http://galeracluster.com/documentation-webpages/glb.html)を試したのでその紹介です。

弊社ではDBバックエンドに[Percona XtraDB Cluster](https://www.percona.com/software/mysql-database/percona-xtradb-cluster)を使用しています。 Percona XtraDB Clusterでは、クラスタを構成する全ノードがマスタであり、  
全ノードでの書き込み/読み込み、同期的なレプリケーションを実現可能です。

しかし、ノード間での排他ロックが効かないため、同じタイミングで同じレコードを更新した際にデッドロックが発生してしまいます。

そこで、[Galera Load Balancer](http://galeracluster.com/documentation-webpages/glb.html)を使用して読み書きが可能なノードを限定することで、上記問題を解消してみます。

## Install

Galera Load Balancerのソースは、githubからもってきます。  
サクッとコンパイルしてインストール。

Plain textcontent\_copy

```
cd /usr/local/src
git clone https://github.com/codership/glb
cd glb/
./bootstrap.sh
./configure
make
make install
```

## Service Setting

サービスを起動するため、起動スクリプトと設定ファイルを準備します。  
それぞれ`glb/files`配下に入っているので一先ずコピーするだけです。  
configファイルは配置場所がOSによって異なりますが、今回はCentOS7で。

-   service script

Plain textcontent\_copy

```
cp /usr/local/src/glb/files/glbd.sh /etc/init.d/glbd
```

-   configuration file

Plain textcontent\_copy

```
cp /usr/local/src/glb/files/glbd.cfg /etc/sysconfig/glbd
```

公式には、  
RedHat系 ⇨ `/etc/sysconfig/glbd`  
Debian系 ⇨ `/etc/default/glbd`  
とありますが、`/etc/redhat-release`が存在するかどうかで判定していました。

## Configuration

最低限起動に必要そうな設定を集めてみました。  
`OTHER_OPTIONS`は[公式](http://galeracluster.com/documentation-webpages/glbparameters.html#glb-config-options)にまとまっているのでやりたいことに合わせて設定しましょう。  
今回は、読み書きが可能なノードを限定したいので「–single」でOK。

-   LISTEN\_ADDR  
    クライアントからの接続を待ち受けるIPアドレスとポート番号を指定。
-   CONTROL\_ADDR  
    接続を制御する際に利用するIPアドレス(ホスト名)とポート番号を指定。  
    指定しないとコントロールソケットが開かれない。
-   DEFAULT\_TARGETS  
    振り分け先となるDBサーバのIPアドレス(ホスト名)を指定。  
    「IPアドレス(ホスト名):ポート番号:重み付け」
-   OTHER\_OPTIONS  
    振り分け先の決定方法を指定。

Plain textcontent\_copy

```
vi /etc/sysconfig/glbd

# ここから設定内容
LISTEN_ADDR="glb-01:8012"
CONTROL_ADDR="127.0.0.1:8011"
DEFAULT_TARGETS="pxc-01:3306 pxc-02:3306 pxc-03:3306"
OTHER_OPTIONS="--single"
```

### 起動

Plain textcontent\_copy

```
/etc/init.d/glbd start

[Fri Nov  23 06:39:09 UTC 2018] glbd: starting...
glb v1.0.1 (epoll)
Incoming address: <glb-01のIP>:8012, control FIFO: /var/run/glbd.fifo
Control  address:  127.0.0.1:8011
Number of threads: 4, max conn: 32749, nodelay: ON, keepalive: ON, defer accept: OFF, linger: OFF, daemon: YES, lat.count: 0, policy: 'single', top: YES, verbose: NO
Destinations: 3
   0:     <pxc-01のIP>:3306 , w: 1.000
   1:     <pxc-02のIP>:3306 , w: 1.000
   2:     <pxc-03のIP>:3306 , w: 1.000
   INFO: glb_daemon.c:44: Changing effective user to 'daemon'
[Fri Nov  23 06:39:09 UTC 2018] glbd: started, pid=4383
```

### 動作確認

バックエンドに監視用のユーザを作成して簡単な動作確認。 複数クライアントからの接続を1つのサーバに振り分けられて入ればOK。

getinfoで接続状態を確認できます。

Plain textcontent\_copy

```
/etc/init.d/glbd getinfo
Router:
------------------------------------------------------
        Address       :   weight   usage    map  conns
    <pxc-01のIP>:3306  :    1.000   0.000    N/A      0
    <pxc-02のIP>:3306  :    1.000   0.000    N/A      0
    <pxc-03のIP>:3306  :    1.000   0.000    N/A      0
------------------------------------------------------
Destinations: 3, total connections: 0 of 32749 max
```

こんな具合で複数クライアントから接続。

Plain textcontent\_copy

```
mysql -h glb-01 -u glb -pglb
```

再度getinfoすると…

Plain textcontent\_copy

```
/etc/init.d/glbd getinfo
Router:
------------------------------------------------------
        Address       :   weight   usage    map  conns
    <pxc-01のIP>:3306  :    1.000  16.667    N/A     50
    <pxc-02のIP>:3306  :    1.000   0.000    N/A      0
    <pxc-03のIP>:3306  :    1.000   0.000    N/A      0
------------------------------------------------------
Destinations: 3, total connections: 1 of 32749 max
```

## 最後に

Galera Load BalancerではFailoverも自動でやってくれます。

今回は1台にRead/Writeを集中させましたが、分散することも可能なのか等、  
他のプロキシソフトウェアとの性能比較も含め色々探る価値がありそうです。

では、また。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/hirai/)

### [hirai](/authors/hirai/)

hiraiのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/hirai/)