mysql集群搭建_mysql高可用集群搭建
環(huán)境描述:
Centos6.5
主庫(kù):149
從庫(kù):148
數(shù)據(jù)庫(kù)版本:mariadb-10.0.33
第一步:
安裝數(shù)據(jù)庫(kù):
這里我采用的是二進(jìn)制安裝:
創(chuàng)建用戶:
useradd -s /sbin/nologin -M mysql
初始化:
./scripts/mysql_install_db --basedir=/data/mariadb-10.0.33/ --datadir=/data/mariadb-10.0.33/data/ --user=mysql
拷貝配置文件:
cp support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
編輯配置文件:
vim /etc/my.cnf
添加以下配置:
basedir=/data/mariadb-10.0.33-linux-x86_64
datadir=/data/mariadb-10.0.33-linux-x86_64/data
修改數(shù)據(jù)庫(kù)目錄所屬:
chown -R mysql:mysql /data/TDserver/mariadb-10.0.33/
拷貝驅(qū)動(dòng)腳本到系統(tǒng)目錄:
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
啟動(dòng)數(shù)據(jù)庫(kù):
service mysqld start
新增用戶并修改密碼:
mysql> grant all privileges on . to 'root'@'%' identified by '密碼';
mysql> grant all privileges on . to 'root'@'127.0.0.1' identified by '密碼';
Query OK, 0 rows affected (0.00 sec)
刷新權(quán)限
mysql> flush privileges;
第二步:
配置數(shù)據(jù)庫(kù)的主從復(fù)制:
先進(jìn)行主庫(kù)的配置:
說(shuō)明:此處是接第一步步驟之后進(jìn)行,配置文件的[mysqld]中新增或者修改以下配置
具體的需求安裝自己的需要調(diào)整即可,此處只是給出環(huán)境的搭建步驟:
[mysqld]
#設(shè)置編碼格式
#character-set-server=utf8
#設(shè)置主庫(kù)配置
log-bin=master-bin
log-bin-index=master-bin.index
innodb_file_per_table=1
binlog_format=mixed
expire_logs_days=7
binlog-do-db=需要同步的數(shù)據(jù)庫(kù)名稱1
binlog-do-db=需要同步的數(shù)據(jù)庫(kù)名稱1
binlog-do-db=需要同步的數(shù)據(jù)庫(kù)名稱1
server-id = 185
slave_skip_errors=1062
#主從復(fù)制函數(shù)開(kāi)關(guān)
log_bin_trust_function_creators=ON
#主庫(kù)
#性能
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size = 8G
#lower_case_table_names=1
#以上需要定制化配置選項(xiàng)
配置完成之后,重啟主庫(kù),繼續(xù)進(jìn)行下面的幾步操作:
CREATE USER 'slave'@'從庫(kù)IP地址' IDENTIFIED BY 'slavepass'; #創(chuàng)建用戶
GRANT REPLICATION SLAVE ON . TO 'slave'@'從庫(kù)IP地址';#分配權(quán)限
FLUSH PRIVILEGES;#刷新權(quán)限
SHOW MASTER STATUS;#查看master狀態(tài)
SHOW PROCESSLIST \G #查看連接
FLUSH TABLES WITH READ LOCK;#鎖定所有表
UNLOCK TABLES;#解鎖表
下面開(kāi)始從庫(kù)的配置和操作:
配置文件的[mysqld]中新增或者修改以下配置:
#設(shè)置編碼格式
#character-set-server=utf8
#設(shè)置從庫(kù)配置
relay-log=relay-log
relay-log-index=relay-log.index
innodb_file_per_table=1
server-id = 101
slave_skip_errors=1062
#需要復(fù)制的庫(kù)名
#主從復(fù)制函數(shù)開(kāi)關(guān)
log_bin_trust_function_creators=ON
replicate_do_db=需要同步的數(shù)據(jù)庫(kù)名1
replicate_do_db=需要同步的數(shù)據(jù)庫(kù)名2
replicate_do_db=需要同步的數(shù)據(jù)庫(kù)名3
修改完成之后要重啟數(shù)據(jù)庫(kù)生效
從庫(kù)中進(jìn)行以下操作:
連接主庫(kù):
CHANGE MASTER TO MASTER_HOST='主庫(kù)IP地址',MASTER_USER='slave',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='master-bin.000005', MASTER_LOG_POS=1021;
MASTER_LOG_FILE 對(duì)應(yīng) master-bin.000005
MASTER_LOG_POS對(duì)應(yīng)194858
開(kāi)始復(fù)制:
start slave;
停止復(fù)制:
stop slave;
修改心跳間隔為10s
change master to master_heartbeat_period = 10;
設(shè)置25s內(nèi)沒(méi)有數(shù)據(jù)傳輸則認(rèn)為網(wǎng)絡(luò)超時(shí)
set global slave_net_timeout = 25;
查看從庫(kù)心跳狀態(tài)
show status like 'slave%';
查看從庫(kù)連接狀態(tài)
show slave status\G
其中的Senconds_Behind_Master的值表示主從復(fù)制延時(shí)
參考配置鏈接:https://blog.csdn.net/JesseYoung/article/details/42914577
好的,到此為止數(shù)據(jù)庫(kù)的主從復(fù)制已經(jīng)完成,但是這樣遠(yuǎn)遠(yuǎn)不能滿足生產(chǎn)中對(duì)應(yīng)應(yīng)用高可用性的要求。
上面配置小伙伴們?nèi)绻呀?jīng)配置起來(lái)了,下面我們接著進(jìn)行keepalived的相關(guān)配置,
如果你是安照最小化安裝的,再解壓安裝執(zhí)行之前請(qǐng)務(wù)必先安裝以下依賴:
yum -y install openssl-devel
下面我們進(jìn)行標(biāo)準(zhǔn)的三步曲就可以了:
tar -zxvf keepalived-1.3.7.tar.gz
./configure
make && make install
若無(wú)報(bào)錯(cuò)說(shuō)明已經(jīng)安裝完成,若是有報(bào)錯(cuò)的伙伴百度相關(guān)的錯(cuò)誤,應(yīng)該就可輕松解決。
下面是很重要的幾步操作,操作時(shí)要看清楚:
我們首先在/etc 目錄下創(chuàng)建keepalived目錄
mkdir /etc/keepalived
進(jìn)入到解壓的軟件包目錄(你下載的軟件所在目錄),不是編譯安裝的目錄
使用 tree -l 命令可以看到以下文件
分別拷貝到系統(tǒng)的目錄下(我的安裝包存放在/usr目錄下執(zhí)行命令即可):
cp /usr/keepalived-1.3.7/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/keepalived-1.3.7/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp -r /usr/keepalived-1.3.7/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
進(jìn)入到keepalived的安裝目錄,默認(rèn)是/usr/local/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
以上一共是拷貝四個(gè)文件分別到系統(tǒng)的目錄中,
啟動(dòng)測(cè)試:
service keepalived start
正常啟動(dòng)會(huì)有三個(gè)進(jìn)程
若是可以正常啟動(dòng)表示已經(jīng)完成了大半(主庫(kù)和從庫(kù)都要安裝上),相關(guān)的配置文件和腳本下面會(huì)給出,小伙伴們直接拿來(lái)使用就行
keepalived.conf(主)
! Configuration File for keepalived
global_defs {
notification_email {
**@163.com
}
notification_email_from yuchao_cacti@163.com
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_run {
script "/home/sh/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
200.200.6.155/24 dev eth0 label eth0:0
}
track_script {
check_run
}
notify_master /home/sh/close_iptables.sh
notify_backup /home/sh/close_iptables.sh
}
virtual_server 虛擬IP 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 主庫(kù)IP 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
以上需要注意幾個(gè)地方:
keepalived.conf(從)
! Configuration File for keepalived
global_defs {
notification_email {
**@163.com
}
notification_email_from **@163.com
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_run {
script "/home/sh/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
虛擬IP/24 dev eth0 label eth0:0
}
track_script {
check_run
}
notify_master /home/sh/close_iptables.sh
notify_backup /home/sh/close_iptables.sh
}
virtual_server 虛擬IP 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 從庫(kù)IP 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
從庫(kù)設(shè)置注意的地方:
priority 99 這個(gè)值要比主庫(kù)小
state 這個(gè)值要為BACKUP
virtual_router_id 51 這個(gè)值要和主一致
check_mysql.sh mysql檢查腳本:
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=數(shù)據(jù)庫(kù)用戶名
MYSQL_PASSWORD=數(shù)據(jù)庫(kù)密碼
CHECK_TIME=3
#mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_health (){
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
if [ $? = 0 ] ;then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME-=1" ##(小提示這里我們采用的是let進(jìn)行整數(shù)的運(yùn)算當(dāng)然您可以用expr,感覺(jué)let省去了$比較方便)
check_mysql_health
if [ $MYSQL_OK = 1 ] ; then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
/etc/init.d/keepalived stop
exit 1
fi
sleep 1
done
close_iptables.sh 關(guān)閉防火墻:
#! /bin/bash
/etc/init.d/iptables stop
restart_jboss.sh 重啟遠(yuǎn)程服務(wù)器上的jboss
#! /bin/bash
#重啟遠(yuǎn)程jboss服務(wù)器
/usr/bin/ssh root@遠(yuǎn)程IP "/bin/sh /home/sh/restart_jboss.sh"
遠(yuǎn)程服務(wù)器上腳本:
#! /bin/bash
#重啟jboss
/sbin/service jboss-eap-5Fdating restart
配置完成之后驗(yàn)證測(cè)試,若是遇到相關(guān)問(wèn)題可以留言,或者自行搜索即可。
看似我們的數(shù)據(jù)庫(kù)已經(jīng)達(dá)到生產(chǎn)的要求了,但還是不行,我們對(duì)主從同步的數(shù)據(jù)并不能進(jìn)行有效的監(jiān)控,所以我們還需要部署一個(gè)監(jiān)控主從同步狀態(tài)的程序, percona-toolkit 閃亮登場(chǎng),下面我們接著進(jìn)行percona-toolkit的相關(guān)配置。
我們首先先安裝好相關(guān)的依賴程序:
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'checksum'@'200.200.6.%' identified by '123456';
mysql> flush privileges;
檢測(cè)生成checksum表文件
pt-table-checksum --host=主庫(kù)IP --port=3306 --user=checksum --password=123456 --databases=需要檢查的庫(kù)名 --create-replicate-table --replicate=需要檢查的庫(kù)名.checksums --no-check-binlog-format --nocheck-replication-filters
修復(fù)主從不同步的數(shù)據(jù):
pt-table-sync --replicate=被檢測(cè)的數(shù)據(jù)庫(kù)名.checksums h=主庫(kù)IP,u=root,p=123456 h=從庫(kù)IP,u=root,p=123456 --print --charset=utf8
--print?:打印,但不執(zhí)行命令。
--execute?:執(zhí)行命令。
#自動(dòng)檢測(cè)數(shù)據(jù)是否一致腳本(進(jìn)行對(duì)應(yīng)修改即可使用)
#! /bin/bash
NUM=$(/usr/bin/pt-table-checksum?--nocheck-replication-filters --no-check-binlog-format?--replicate=huanqiu.checksums --databases=huanqiu? h=192.168.1.101,u=root,p=123456,P=3306|awk?-F" "?'{print $3}'|sed?-n?'2p')
if?[ $NUM -eq?1 ];then
/usr/bin/pt-table-sync?--replicate=huanqiu.checksums h=192.168.1.101,u=root,p=123456 h=192.168.1.102,u=root,p=123456 --print
/usr/bin/pt-table-sync?--replicate=huanqiu.checksums h=192.168.1.101,u=root,p=123456 h=192.168.1.102,u=root,p=123456 --execute
else
echo?"data is ok"
fi
到此整個(gè)數(shù)據(jù)庫(kù)集群環(huán)境搭建完成,感謝各位瀏覽和指正,謝謝!
總結(jié)
以上是生活随笔為你收集整理的mysql集群搭建_mysql高可用集群搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: adapter为null_软件设计精要之
- 下一篇: linux cmake编译源码,linu