435.md 9.0 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
# Working with the bundled PgBouncer service

> 原文:[https://docs.gitlab.com/ee/administration/high_availability/pgbouncer.html](https://docs.gitlab.com/ee/administration/high_availability/pgbouncer.html)

*   [Operations](#operations)
    *   [Running PgBouncer as part of an HA GitLab installation](#running-pgbouncer-as-part-of-an-ha-gitlab-installation)
    *   [Running PgBouncer as part of a non-HA GitLab installation](#running-pgbouncer-as-part-of-a-non-ha-gitlab-installation)
*   [Enable Monitoring](#enable-monitoring)
    *   [Interacting with PgBouncer](#interacting-with-pgbouncer)
        *   [Administrative console](#administrative-console)
*   [Troubleshooting](#troubleshooting)
    *   [Message: `LOG: invalid CIDR mask in address`](#message-log--invalid-cidr-mask-in-address)
    *   [Message: `LOG: invalid IP mask "md5": Name or service not known`](#message-log--invalid-ip-mask-md5-name-or-service-not-known)

# Working with the bundled PgBouncer service[](#working-with-the-bundled-pgbouncer-service-premium-only "Permalink")

由于它的高可用性堆栈的一部分,GitLab Premium 包含的捆绑版本[PgBouncer](http://www.pgbouncer.org/)可以通过管理`/etc/gitlab/gitlab.rb` . PgBouncer 用于在故障转移方案中在服务器之间无缝迁移数据库连接. 此外,它可以用于非 HA 设置中以建立连接池,从而加快响​​应时间,同时减少资源使用.

在高可用性设置中,建议为每个数据库节点分别运行一个 PgBouncer 节点,并使用一个内部负载均衡器(TCP)相应地为其服务.

## Operations[](#operations "Permalink")

### Running PgBouncer as part of an HA GitLab installation[](#running-pgbouncer-as-part-of-an-ha-gitlab-installation "Permalink")

该内容已移至[新位置](../postgresql/replication_and_failover.html#configuring-the-pgbouncer-node) .

### Running PgBouncer as part of a non-HA GitLab installation[](#running-pgbouncer-as-part-of-a-non-ha-gitlab-installation "Permalink")

1.  使用命令`gitlab-ctl pg-password-md5 pgbouncer`生成 PGBOUNCER_USER_PASSWORD_HASH

2.  使用命令`gitlab-ctl pg-password-md5 gitlab` . 稍后我们还需要输入纯文本 SQL_USER_PASSWORD

3.  在数据库节点上,确保在`/etc/gitlab/gitlab.rb`设置了以下`/etc/gitlab/gitlab.rb`

    ```
    postgresql['pgbouncer_user_password'] = 'PGBOUNCER_USER_PASSWORD_HASH'
    postgresql['sql_user_password'] = 'SQL_USER_PASSWORD_HASH'
    postgresql['listen_address'] = 'XX.XX.XX.Y' # Where XX.XX.XX.Y is the ip address on the node postgresql should listen on
    postgresql['md5_auth_cidr_addresses'] = %w(AA.AA.AA.B/32) # Where AA.AA.AA.B is the IP address of the pgbouncer node 
    ```

4.  Run `gitlab-ctl reconfigure`

    **注意:**如果数据库已经在运行,则需要在重新配置后通过运行`gitlab-ctl restart postgresql`来重新启动数据库.

5.  在运行 PgBouncer 的节点上,确保在`/etc/gitlab/gitlab.rb`设置了以下`/etc/gitlab/gitlab.rb`

    ```
    pgbouncer['enable'] = true
    pgbouncer['databases'] = {
      gitlabhq_production: {
        host: 'DATABASE_HOST',
        user: 'pgbouncer',
        password: 'PGBOUNCER_USER_PASSWORD_HASH'
      }
    } 
    ```

6.  Run `gitlab-ctl reconfigure`

7.  在运行 Puma 的节点上,确保在`/etc/gitlab/gitlab.rb`设置了以下`/etc/gitlab/gitlab.rb`

    ```
    gitlab_rails['db_host'] = 'PGBOUNCER_HOST'
    gitlab_rails['db_port'] = '6432'
    gitlab_rails['db_password'] = 'SQL_USER_PASSWORD' 
    ```

8.  Run `gitlab-ctl reconfigure`

9.  此时,您的实例应通过 PgBouncer 连接到数据库. 如果遇到问题,请参阅" [故障排除"](#troubleshooting)部分

## Enable Monitoring[](#enable-monitoring "Permalink")

在 GitLab 12.0 中[引入](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/3786) .

If you enable Monitoring, it must be enabled on **all** PgBouncer servers.

1.  创建/编辑`/etc/gitlab/gitlab.rb`并添加以下配置:

    ```
    # Enable service discovery for Prometheus
    consul['enable'] = true
    consul['monitoring_service_discovery'] =  true

    # Replace placeholders
    # Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z
    # with the addresses of the Consul server nodes
    consul['configuration'] = {
       retry_join: %w(Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z),
    }

    # Set the network addresses that the exporters will listen on
    node_exporter['listen_address'] = '0.0.0.0:9100'
    pgbouncer_exporter['listen_address'] = '0.0.0.0:9188' 
    ```

2.  运行`sudo gitlab-ctl reconfigure`来编译配置.

### Interacting with PgBouncer[](#interacting-with-pgbouncer "Permalink")

#### Administrative console[](#administrative-console "Permalink")

作为 Omnibus GitLab 的一部分,我们提供了一个`gitlab-ctl pgb-console`命令,以自动连接到 PgBouncer 管理控制台. 请参阅[PgBouncer 文档](https://www.pgbouncer.org/usage.html#admin-console)以获取有关如何与控制台进行交互的详细说明.

要开始会话,请运行

```
# gitlab-ctl pgb-console
Password for user pgbouncer:
psql (11.7, server 1.7.2/bouncer)
Type "help" for help.

pgbouncer=# 
```

将提示您输入的密码是 PGBOUNCER_USER_PASSWORD

要获取有关实例的一些基本信息,请运行

```
pgbouncer=# show databases; show clients; show servers;
        name         |   host    | port |      database       | force_user | pool_size | reserve_pool | pool_mode | max_connections | current_connections
---------------------+-----------+------+---------------------+------------+-----------+--------------+-----------+-----------------+---------------------
 gitlabhq_production | 127.0.0.1 | 5432 | gitlabhq_production |            |       100 |            5 |           |               0 |                   1
 pgbouncer           |           | 6432 | pgbouncer           | pgbouncer  |         2 |            0 | statement |               0 |                   0
(2 rows)

 type |   user    |      database       | state  |   addr    | port  | local_addr | local_port |    connect_time     |    request_time     |    ptr    | link
| remote_pid | tls
------+-----------+---------------------+--------+-----------+-------+------------+------------+---------------------+---------------------+-----------+------
+------------+-----
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44590 | 127.0.0.1  |       6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12444c0 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44592 | 127.0.0.1  |       6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12447c0 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44594 | 127.0.0.1  |       6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x1244940 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44706 | 127.0.0.1  |       6432 | 2018-04-24 22:14:22 | 2018-04-24 22:16:31 | 0x1244ac0 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44708 | 127.0.0.1  |       6432 | 2018-04-24 22:14:22 | 2018-04-24 22:15:15 | 0x1244c40 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44794 | 127.0.0.1  |       6432 | 2018-04-24 22:15:15 | 2018-04-24 22:15:15 | 0x1244dc0 |
|          0 |
 C    | gitlab    | gitlabhq_production | active | 127.0.0.1 | 44798 | 127.0.0.1  |       6432 | 2018-04-24 22:15:15 | 2018-04-24 22:16:31 | 0x1244f40 |
|          0 |
 C    | pgbouncer | pgbouncer           | active | 127.0.0.1 | 44660 | 127.0.0.1  |       6432 | 2018-04-24 22:13:51 | 2018-04-24 22:17:12 | 0x1244640 |
|          0 |
(8 rows)

 type |  user  |      database       | state |   addr    | port | local_addr | local_port |    connect_time     |    request_time     |    ptr    | link | rem
ote_pid | tls
------+--------+---------------------+-------+-----------+------+------------+------------+---------------------+---------------------+-----------+------+----
--------+-----
 S    | gitlab | gitlabhq_production | idle  | 127.0.0.1 | 5432 | 127.0.0.1  |      35646 | 2018-04-24 22:15:15 | 2018-04-24 22:17:10 | 0x124dca0 |      |
  19980 |
(1 row) 
```

## Troubleshooting[](#troubleshooting "Permalink")

如果您遇到通过 PgBouncer 连接的任何问题,则首先检查的始终是日志:

```
# gitlab-ctl tail pgbouncer 
```

另外,您可以在[管理控制台中](#administrative-console)检查`show databases`的输出. 在输出中,您期望在`gitlabhq_production`数据库的`host`字段中看到值. 此外, `current_connections`应该大于 1.

### Message: `LOG: invalid CIDR mask in address`[](#message-log--invalid-cidr-mask-in-address "Permalink")

请参阅[Geo 文档中](../geo/replication/troubleshooting.html#message-log--invalid-cidr-mask-in-address)建议的修复程序.

### Message: `LOG: invalid IP mask "md5": Name or service not known`[](#message-log--invalid-ip-mask-md5-name-or-service-not-known "Permalink")

请参阅[Geo 文档中](../geo/replication/troubleshooting.html#message-log--invalid-ip-mask-md5-name-or-service-not-known)建议的修复程序.