日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql集群搭建_mysql高可用集群搭建

發(fā)布時(shí)間:2024/1/23 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql集群搭建_mysql高可用集群搭建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。