10.02 詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

概述

目前業界對數據庫性能優化普遍採用集群方式,而oracle集群軟硬件投入昂貴,mysql則比較推薦用mycat去搭建數據庫集群,下面介紹一下怎麼用mycat+haproxy+keepalived搭建一個屬於mysql數據庫的高可用負載均衡。


主要思路:

簡單說,實現mysql主備複製-->利用mycat實現負載均衡。

比較了常用的讀寫分離方式,推薦mycat,社區活躍,性能穩定。

以下基於centos7操作系統進行演示。


架構圖

以下是這次搭建的架構圖。

詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

主機1與主機2上的keepalived會為該服務器搶佔vip,搶佔到vip後,對該主機的訪問可以通過原來的ip訪問,也可以直接通過vip訪問,當其中一臺宕機時,vip會漂移到另一臺機器上,當我們訪問VIP時haproxy會根據配置將請求分發到兩臺Mycat上實現負載均衡,並且haproxy會檢測mycat是否存活。

下面先介紹下後端數據庫的搭建部分。


一、安裝部署mysql

1、安裝依賴

yum install tcl gcc perl perl-JSON.noarch perl-Time-HiRes.x86_64 -y
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

2、創建基礎目錄並修改文件夾的屬組

mkdir -p /data/datafile
mkdir -p /data/log
chown -R mysql:mysql /data

3、安裝mysql數據庫,採用rpm安裝方式

3.1卸載自帶包

sudo yum remove -y mariadb*
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

3.2、安裝rpm

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-devel-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-test-5.7.26-1.el7.x86_64.rpm
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

4、mysql數據庫配置

4.1、修改數據庫my.cnf參數(注意server-id參數)

# vi /etc/my.cnf
[mysqld]
datadir=/data/datafile
socket=/var/lib/mysql/mysql.sock
log-error=/data/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character_set_server=utf8
bind-address = 0.0.0.0
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
max_connections=900
max_allowed_packet=500M
#二進制配置
server-id = 1
log-bin = /data/log/mysql-bin.log
log-bin-index =/data/log/binlog.index
log_bin_trust_function_creators=1
expire_logs_days=7
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

4.2、重啟數據庫初始化數據

service mysqld restart

4.3、修改數據庫密碼

4.3.1、查看數據庫默認密碼

#cat /data/log/mysqld.log|grep password
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

4.3.2、更改密碼

#mysql -u root -p
set global validate_password_policy=0;

SET PASSWORD = PASSWORD('xxxxx');
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

4.3.3、創建數據庫和用戶

create schema tms_prod default character set utf8;
set global validate_password_policy=0;
GRANT ALL PRIVILEGES ON *.* TO tms_prod@'%' identified by 'xxx';

4.3.4、重啟mysql數據庫

service mysqld restart
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群


二、配置mysql主從

原理:

詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

在主服務器上,設置一個從數據庫的賬戶,使用REPLICATION SLAVE賦予權限,如:

set global validate_password_policy=0;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'fxxx';

2、修改主數據庫的配置文件my.cnf

開啟BINLOG,並設置server-id的值,修改之後必須重啟Mysql服務。

#vi /etc/my.cnf
-----------------------------------------配置文件-----------------------------------------
#server-id表示在整個Mysql集群中保證唯一
[mysqld]
datadir=/data/datafile
socket=/var/lib/mysql/mysql.sock
log-error=/data/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character_set_server=utf8
bind-address = 0.0.0.0
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
max_connections=900
max_allowed_packet=500M
#二進制配置
server-id = 1
log-bin = /data/log/mysql-bin.log
log-bin-index =/data/log/binlog.index
log_bin_trust_function_creators=1
expire_logs_days=7
-----------------------------------------配置文件-----------------------------------------
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

3、查看主服務器狀態

可以查看主服務器當前二進制日誌名和偏移量,這個操作的目的是為了在從數據庫啟動後,從這個點開始進行數據的恢復

mysql> show master status \\G;
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

4、從服務器mysql配置

修改配置後需重啟數據庫服務器

#vi /etc/my.cnf
---------------------------------------配置文件-------------------------------------------
[mysqld]
datadir=/data/datafile
socket=/var/lib/mysql/mysql.sock
log-error=/data/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character_set_server=utf8
bind-address = 0.0.0.0
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
max_connections=900
max_allowed_packet=500M
#從數據庫二進制配置
server-id = 2
log-bin = /data/log/mysql-bin.log
log-bin-index =/data/log/binlog.index
log_bin_trust_function_creators=1
expire_logs_days=7
----------------------------------------配置文件------------------------------------------
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群

5、從庫開啟同步

5.1 從庫配置同步

配置mysql主從複製時,在從機上需要進行CHANGE MASTER TO操作,以確定需要同步的主機IP,用戶名,密碼,binlog文件,binlog位置等信息。

change master to配置和改變slave服務器用於連接master服務器的參數,以便slave服務器讀取master服務器的binlog及slave服務器的relay log。同時也更新master info及relay log info信息庫。執行該語句前如果從機上slave io及sql線程已經啟動,需要先停止(執行stop slave)。

change master to
MASTER_HOST='xx.xx.xx',
MASTER_USER='repl',
MASTER_PASSWORD='xxxx',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=437;

5.2、開啟主從同步

開啟後注意查看從庫狀態,

當Slave_IO_Running和Slave_SQL_Running都為YES的時候表示主從同步設置成功。

mysql> start slave;
mysql> show slave status \\G
詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群


篇幅有限,這塊就先介紹到這了,後面開始介紹搭建mycat的部分,感興趣的朋友可以關注下~

詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群


分享到:


相關文章: