概述
目前業界對數據庫性能優化普遍採用集群方式,而oracle集群軟硬件投入昂貴,mysql則比較推薦用mycat去搭建數據庫集群,下面介紹一下怎麼用mycat+haproxy+keepalived搭建一個屬於mysql數據庫的高可用負載均衡。
主要思路:
簡單說,實現mysql主備複製-->利用mycat實現負載均衡。
比較了常用的讀寫分離方式,推薦mycat,社區活躍,性能穩定。
以下基於centos7操作系統進行演示。
架構圖
以下是這次搭建的架構圖。
![詳解mycat+haproxy+keepalived搭建高可用負載均衡mysql集群](http://p2.ttnews.xyz/loading.gif)
主機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集群](http://p2.ttnews.xyz/loading.gif)
2、創建基礎目錄並修改文件夾的屬組
mkdir -p /data/datafile
mkdir -p /data/log
chown -R mysql:mysql /data
3、安裝mysql數據庫,採用rpm安裝方式
3.1卸載自帶包
sudo yum remove -y mariadb*
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
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
4.2、重啟數據庫初始化數據
service mysqld restart
4.3、修改數據庫密碼
4.3.1、查看數據庫默認密碼
#cat /data/log/mysqld.log|grep password
4.3.2、更改密碼
#mysql -u root -p
set global validate_password_policy=0;
SET PASSWORD = PASSWORD('xxxxx');
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
二、配置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
-----------------------------------------配置文件-----------------------------------------
3、查看主服務器狀態
可以查看主服務器當前二進制日誌名和偏移量,這個操作的目的是為了在從數據庫啟動後,從這個點開始進行數據的恢復
mysql> show master status \\G;
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
----------------------------------------配置文件------------------------------------------
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的部分,感興趣的朋友可以關注下~
閱讀更多 波波說運維 的文章