天天看點

mysql主從複制讀寫分離之——proxysql應用

一、說明

ProxySQL是一個開源的MySQL代理伺服器,這意味着它充當MySQL伺服器和通路其資料庫的應用程式之間的中介。ProxySQL可以通過在多個資料庫伺服器池之間配置設定流量來提高性能,并且如果一個或多個資料庫伺服器發生故障,還可以通過自動故障切換到備用資料庫來提高可用性。

系統環境:master1:ubuntu16.04 mysql5.6 192.168.1.10 3307

master2:ubuntu16.04 mysql5.6 192.168.1.20 3307

slave1: ubuntu16.04 mysql5.6 192.168.1.10 3308

slave2: ubuntu16.04 mysql5.6 192.168.1.10 3309

slave3: ubuntu16.04 mysql5.6 192.168.1.20 3308

slave4: ubuntu16.04 mysql5.6 192.168.1.20 3309

【proxysql】:ubuntu16.04 mysql 192.168.1.30 3306

master1與master2為雙主雙從模式。

主從複制前邊文章和網上文章都特别詳細。這裡不做介紹。請參考http://blog.51cto.com/13120271/2140400。

第一步 - 安裝ProxySQL

ProxySQL的開發人員在他們的GitHub版本頁面上為所有ProxySQL版本提供官方Ubuntu軟體包,是以我們将從那裡下載下傳最新的軟體包版本并進行安裝。

您可以在釋出清單中找到最新的軟體包。命名約定是proxysql_version-distribution.deb,其中version類似于版本1.4.4的1.4.4字元串,并且distribution是一個類似于64位Ubuntu 16.04的ubuntu16_amd64字元串。

将最新的官方軟體包(編寫本文時為1.4.4)下載下傳到/tmp目錄中。

cd /tmp

curl -OL https://github.com/sysown/proxysql/releases/download/v1.4.4/proxysql_1.4.4-ubuntu16_amd64.deb

用dpkg安裝包,用于管理.deb軟體包。-i标志表示我們要從指定的檔案安裝。

sudo dpkg -i proxysql_*

此時,您不再需要.deb檔案,是以您可以将其删除。

rm proxysql_*

接下來,我們需要一個MySQL用戶端應用程式來連接配接到ProxySQL執行個體。這是因為ProxySQL内部使用一個MySQL相容的接口來執行管理任務。我們将使用mysql指令行工具,它是mysql-client Ubuntu存儲庫中可用包的一部分。

更新軟體包存儲庫以確定獲得最新的預捆綁版本,然後安裝mysql-client軟體包。

sudo apt-get update

sudo apt-get install mysql-client

您現在滿足運作ProxySQL的所有要求,但該服務在安裝後不會自動啟動,是以請立即手動啟動。

sudo systemctl start proxysql

現在,ProxySQL應該以其預設配置運作。你可以使用systemctl檢視。

systemctl status proxysql

輸出看起來像這樣:

● proxysql.service - LSB: High Performance Advanced Proxy for MySQL

Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)

Active: active (running) since Thu 2017-12-21 19:19:20 UTC; 5s ago

Docs: man:systemd-sysv-generator(8)

Process: 12350 ExecStart=/etc/init.d/proxysql start (code=exited, status=0/SUCCESS)

Tasks: 23

Memory: 30.9M

CPU: 86ms

CGroup: /system.slice/proxysql.service

├─12355 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql

└─12356 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql

Active (running)行表示ProxySQL已安裝并正在運作。

接下來,我們将通過設定用于通路ProxySQL管理界面的密碼來提高安全性。

第二步 - 設定ProxySQL管理者密碼

第一次啟動新的ProxySQL安裝時,它使用程式包提供的配置檔案來初始化其所有配置變量的預設值。初始化後,ProxySQL将其配置存儲在資料庫中,您可以通過指令行進行管理和修改。

要在ProxySQL中設定管理者密碼,我們将連接配接到該配置資料庫并更新相應的變量。

首先,通路管理界面。系統将提示您輸入密碼,在預設安裝時,密碼為admin。

mysql -u admin -p -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
  • -u指定我們要連接配接的使用者,這裡是admin,管理任務的預設使用者,例如更改配置設定。
  • -h 127.0.0.1告訴mysql連接配接到本地ProxySQL執行個體。我們需要明确定義它,因為ProxySQL不會監聽預設情況下mysql假定的socket檔案。
  • -P指定要連接配接的端口。ProxySQL的管理界面監聽6032。
  • --prompt是一個可選标志,用于更改預設提示,通常是mysql>。在這裡,我們将其更改為ProxySQLAdmin>顯示我們已連接配接到ProxySQL管理界面。這将有助于避免以後在我們也将連接配接到複制資料庫伺服器上的MySQL接口時出現混淆。*

    連接配接後,您将看到ProxySQLAdmin>提示:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ProxySQLAdmin>

通過更新(UPDATE)global_variables資料庫中的admin-admin_credentials配置變量來更改管理帳戶密碼。請住将以下指令的password更改為您選擇的強密碼。

UPDATE global_variables SET variable_value='admin:password' WHERE variable_name='admin-admin_credentials';

Query OK, 1 row affected (0.00 sec)

由于ProxySQL的配置系統的工作方式,此更改不會立即生效。它由三個獨立的層組成:

記憶體,在從指令行界面進行修改時會被更改。

運作時,ProxySQL使用它作為有效配置。

磁盤,用于使配置在重新啟動時保持不變。

現在,你所做的改變是在記憶體中。要使更改生效,您必須将記憶體設定複制到運作時領域,然後将它們儲存到磁盤以使其保持不變。

ProxySQLAdmin> LOAD ADMIN VARIABLES TO RUNTIME;

ProxySQLAdmin> SAVE ADMIN VARIABLES TO DISK;

第三步-修改配置檔案

egrep -v '(^$|^#)' /etc/proxysql.cnf

admin_credentials="admin:admin"

mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"

}

mysql_variables=

{

threads=4

max_connections=2048

default_query_delay=0

default_query_timeout=36000000

have_compress=true

poll_timeout=2000

interfaces="0.0.0.0:6033;/tmp/proxysql.sock"

default_schema="information_schema"

stacksize=1048576

server_version="5.5.30"

connect_timeout_server=3000

monitor_username="monitor"

monitor_password="monitor"

monitor_history=600000

monitor_connect_interval=60000

monitor_ping_interval=10000

monitor_read_only_interval=1500

monitor_read_only_timeout=500

ping_interval_server_msec=120000

ping_timeout_server=500

commands_stats=true

sessions_sort=true

connect_retries_on_failure=10

mysql_servers =

(

address = "192.168.1.20" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

port = 3307 # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

hostgroup = 1 # no default, required

status = "ONLINE" # default: ONLINE

weight = 1 # default: 1

compression = 0 # default: 0

max_connections = 200

},

address = "192.168.1.10" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

port = 3308 # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

hostgroup = 2 # no default, required

max_connections = 1000

port = 3309 # no default, required . If port is 0 , address is interpred as a Unix Socket Domain

)

mysql_users:

username = "admin" # no default , required

password = "password" # default: ''

default_hostgroup = 1 # default: 0

max_connections=1000

default_schema="test"

active = 1 # default: 1

mysql_query_rules:

scheduler=

mysql_replication_hostgroups=

writer_hostgroup=1

reader_hostgroup=2

comment="test repl 1"

繼續閱讀