mysql集群搭建_mysql高可用集群搭建
環境描述:
Centos6.5
主庫:149
從庫:148
數據庫版本:mariadb-10.0.33
第一步:
安裝數據庫:
這里我采用的是二進制安裝:
創建用戶:
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
修改數據庫目錄所屬:
chown -R mysql:mysql /data/TDserver/mariadb-10.0.33/
拷貝驅動腳本到系統目錄:
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
啟動數據庫:
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)
刷新權限
mysql> flush privileges;
第二步:
配置數據庫的主從復制:
先進行主庫的配置:
說明:此處是接第一步步驟之后進行,配置文件的[mysqld]中新增或者修改以下配置
具體的需求安裝自己的需要調整即可,此處只是給出環境的搭建步驟:
[mysqld]
#設置編碼格式
#character-set-server=utf8
#設置主庫配置
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=需要同步的數據庫名稱1
binlog-do-db=需要同步的數據庫名稱1
binlog-do-db=需要同步的數據庫名稱1
server-id = 185
slave_skip_errors=1062
#主從復制函數開關
log_bin_trust_function_creators=ON
#主庫
#性能
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size = 8G
#lower_case_table_names=1
#以上需要定制化配置選項
配置完成之后,重啟主庫,繼續進行下面的幾步操作:
CREATE USER 'slave'@'從庫IP地址' IDENTIFIED BY 'slavepass'; #創建用戶
GRANT REPLICATION SLAVE ON . TO 'slave'@'從庫IP地址';#分配權限
FLUSH PRIVILEGES;#刷新權限
SHOW MASTER STATUS;#查看master狀態
SHOW PROCESSLIST \G #查看連接
FLUSH TABLES WITH READ LOCK;#鎖定所有表
UNLOCK TABLES;#解鎖表
下面開始從庫的配置和操作:
配置文件的[mysqld]中新增或者修改以下配置:
#設置編碼格式
#character-set-server=utf8
#設置從庫配置
relay-log=relay-log
relay-log-index=relay-log.index
innodb_file_per_table=1
server-id = 101
slave_skip_errors=1062
#需要復制的庫名
#主從復制函數開關
log_bin_trust_function_creators=ON
replicate_do_db=需要同步的數據庫名1
replicate_do_db=需要同步的數據庫名2
replicate_do_db=需要同步的數據庫名3
修改完成之后要重啟數據庫生效
從庫中進行以下操作:
連接主庫:
CHANGE MASTER TO MASTER_HOST='主庫IP地址',MASTER_USER='slave',MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='master-bin.000005', MASTER_LOG_POS=1021;
MASTER_LOG_FILE 對應 master-bin.000005
MASTER_LOG_POS對應194858
開始復制:
start slave;
停止復制:
stop slave;
修改心跳間隔為10s
change master to master_heartbeat_period = 10;
設置25s內沒有數據傳輸則認為網絡超時
set global slave_net_timeout = 25;
查看從庫心跳狀態
show status like 'slave%';
查看從庫連接狀態
show slave status\G
其中的Senconds_Behind_Master的值表示主從復制延時
參考配置鏈接:https://blog.csdn.net/JesseYoung/article/details/42914577
好的,到此為止數據庫的主從復制已經完成,但是這樣遠遠不能滿足生產中對應應用高可用性的要求。
上面配置小伙伴們如果已經配置起來了,下面我們接著進行keepalived的相關配置,
如果你是安照最小化安裝的,再解壓安裝執行之前請務必先安裝以下依賴:
yum -y install openssl-devel
下面我們進行標準的三步曲就可以了:
tar -zxvf keepalived-1.3.7.tar.gz
./configure
make && make install
若無報錯說明已經安裝完成,若是有報錯的伙伴百度相關的錯誤,應該就可輕松解決。
下面是很重要的幾步操作,操作時要看清楚:
我們首先在/etc 目錄下創建keepalived目錄
mkdir /etc/keepalived
進入到解壓的軟件包目錄(你下載的軟件所在目錄),不是編譯安裝的目錄
使用 tree -l 命令可以看到以下文件
分別拷貝到系統的目錄下(我的安裝包存放在/usr目錄下執行命令即可):
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
進入到keepalived的安裝目錄,默認是/usr/local/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
以上一共是拷貝四個文件分別到系統的目錄中,
啟動測試:
service keepalived start
正常啟動會有三個進程
若是可以正常啟動表示已經完成了大半(主庫和從庫都要安裝上),相關的配置文件和腳本下面會給出,小伙伴們直接拿來使用就行
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 主庫IP 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
以上需要注意幾個地方:
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 從庫IP 3306 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
從庫設置注意的地方:
priority 99 這個值要比主庫小
state 這個值要為BACKUP
virtual_router_id 51 這個值要和主一致
check_mysql.sh mysql檢查腳本:
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=數據庫用戶名
MYSQL_PASSWORD=數據庫密碼
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進行整數的運算當然您可以用expr,感覺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 關閉防火墻:
#! /bin/bash
/etc/init.d/iptables stop
restart_jboss.sh 重啟遠程服務器上的jboss
#! /bin/bash
#重啟遠程jboss服務器
/usr/bin/ssh root@遠程IP "/bin/sh /home/sh/restart_jboss.sh"
遠程服務器上腳本:
#! /bin/bash
#重啟jboss
/sbin/service jboss-eap-5Fdating restart
配置完成之后驗證測試,若是遇到相關問題可以留言,或者自行搜索即可。
看似我們的數據庫已經達到生產的要求了,但還是不行,我們對主從同步的數據并不能進行有效的監控,所以我們還需要部署一個監控主從同步狀態的程序, percona-toolkit 閃亮登場,下面我們接著進行percona-toolkit的相關配置。
我們首先先安裝好相關的依賴程序:
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'checksum'@'200.200.6.%' identified by '123456';
mysql> flush privileges;
檢測生成checksum表文件
pt-table-checksum --host=主庫IP --port=3306 --user=checksum --password=123456 --databases=需要檢查的庫名 --create-replicate-table --replicate=需要檢查的庫名.checksums --no-check-binlog-format --nocheck-replication-filters
修復主從不同步的數據:
pt-table-sync --replicate=被檢測的數據庫名.checksums h=主庫IP,u=root,p=123456 h=從庫IP,u=root,p=123456 --print --charset=utf8
--print?:打印,但不執行命令。
--execute?:執行命令。
#自動檢測數據是否一致腳本(進行對應修改即可使用)
#! /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
到此整個數據庫集群環境搭建完成,感謝各位瀏覽和指正,謝謝!
總結
以上是生活随笔為你收集整理的mysql集群搭建_mysql高可用集群搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adapter为null_软件设计精要之
- 下一篇: linux 安装 mysql 5.6_L