溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

proxysql+mysql實現主從復制讀寫分離

發布時間:2020-05-08 15:30:27 來源:億速云 閱讀:437 作者:三月 欄目:MySQL數據庫

本文主要給大家介紹proxysql+mysql實現主從復制讀寫分離,文章內容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下proxysql+mysql實現主從復制讀寫分離吧。

一、說明
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為雙主雙從模式。
主從復制前邊文章和網上文章都特別詳細。這里不做介紹。請參考https://blog.51cto.com/13120271/2140400。
第一步 - 安裝ProxySQL
ProxySQL的開發人員在他們的GitHub版本頁面上為所有ProxySQL版本提供官方Ubuntu軟件包,因此我們將從那里下載最新的軟件包版本并進行安裝。

proxysql+mysql實現主從復制讀寫分離

您可以在發布列表中找到最新的軟件包。命名約定是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 = 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.20" # 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
status = "ONLINE"     # default: ONLINE
weight = 1            # default: 1
compression = 0       # default: 0
max_connections = 1000
},
{
address = "192.168.1.20" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
port = 3309           # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
hostgroup = 2           # no default, required
status = "ONLINE"     # default: ONLINE
weight = 1            # default: 1
compression = 0       # default: 0
max_connections = 1000
},
{
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
status = "ONLINE"     # default: ONLINE
weight = 1            # default: 1
compression = 0       # default: 0
max_connections = 1000
},
{
address = "192.168.1.10" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
port = 3309           # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
hostgroup = 2           # no default, required
status = "ONLINE"     # default: ONLINE
weight = 1            # default: 1
compression = 0       # default: 0
max_connections = 1000
}
)
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"
}
)

從新啟動proxysql。

sudo systemctl restart proxysql
然后我們登錄上去驗證一下。
mysql -u admin -p -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
mysql > show databases;
mysql> show databases;
+--------------------+| Database           |
+--------------------+| information_schema || mysql              || performance_schema || study              || sys                |

以上stats,monitor,main都從配置文件中獲取的數據庫;可以通過類似mysql運行時修改;而不需要重啟;更多命令行的配置請參考github;
至此我們基于proxysql主從復制讀寫分離架構已經完成;
雙主或多主模型是無須實現讀寫分離,僅需要負載均衡:haproxy, nginx, lvs等;
proxysql并沒有解決,當主數據巖機時的問題;此時就需要量MHA來解決。

看完以上關于proxysql+mysql實現主從復制讀寫分離,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業知識信息 ,可以持續關注我們的行業資訊欄目的。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女