本文主要講述了MySQL雙主+keepalived實現(xiàn)故障自動切換的項目基本情況、基礎(chǔ)環(huán)境配置和安裝過程。兩臺服務(wù)器需要修改主機名并關(guān)閉SELinux設(shè)置,將下載好的安裝包解壓到/usr/local目錄,然后使用ln -s命令...
Mysql雙主+keepalived實現(xiàn)故障自動切換
一. 項目基本情況
* 項目概述
項目要求: MySQL業(yè)務(wù)搭建雙主模式服務(wù)+keepalived 實現(xiàn)故障自動切換
* 基礎(chǔ)環(huán)境信息
主機名VIPIPOS系統(tǒng)CPU內(nèi)存磁盤系統(tǒng)角色端口安裝軟件mysql-0110.28.3.19410.28.3.195CentOS Linux 7.9416200master-013306MySQL Servermysql-0210.28.3.19410.28.3.196CentOS Linux 7.9416200master-023306MySQL Server
* 軟件安裝清單
所需要安裝軟件版本下載地址MySQL Server8.0.33downloads.mysqlkeepalived1.3.5yum 安裝
* 架構(gòu)情況
二. 基礎(chǔ)環(huán)境配置
需要在兩臺服務(wù)器上都執(zhí)行。
1. 修改主機名
#2臺服務(wù)器分別執(zhí)行:
cat << EOF >> /etc/hosts
10.28.3.195 mysql-01
10.28.3.196 mysql-02
EOF
2. 關(guān)閉SELinux
setenforce 0
3. 將下載好的安裝包放在服務(wù)器的/usr/local
cd /data/
# 查看安裝包情況
ls -lsrth
-- 解壓到 /usr/local
tar -vxf /data/mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz -C /usr/local/
三. 安裝mysql(二進制安裝)
1. 創(chuàng)建操作系統(tǒng)用戶
groupadd mysql
useradd -g mysql mysql
注意:這里可以是其它用戶名
2. 解壓包建立軟連接
cd /usr/local/
ln -s mysql-8.0.33-linux-glibc2.17-x86_64-minimal/ mysql
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /usr/local/mysql-8.0.33-linux-glibc2.17-x86_64-minimal/
3. 編輯配置文件
vim /etc/my.cnf
增加配置文件
[client]
socket=/data/mysql/data/mysql.sock
port=3306
[mysqld]
#dir
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/data/mysql/data/mysql.sock
log_error=/data/mysql/data/mysql.err
pid-file =/data/mysql/data/mysql.pid
#server_info
server-id=1
user=mysql
log_timestamps=system
#connection_info
#最大連接數(shù)
max_connections = 3000
#最大錯誤連接數(shù)
max_connect_errors = 10000
#MySQL默認的wait_timeout 值為8個小時, interactive_timeout參數(shù)需要同時配置才能生效
interactive_timeout = 3600
wait_timeout = 3600
#字符集
character-set-server = utf8mb4
#只能用IP地址檢查客戶端的登錄,不用主機名
skip_name_resolve = 1
#binlog
binlog_format = ROW
#如果設(shè)置為MINIMAL,則會減少記錄日志的內(nèi)容,只記錄受影響的列,但對于部分update無法flashBack
binlog_row_image = FULL
#一般數(shù)據(jù)庫中沒什么大的事務(wù),設(shè)成1~2M,默認32kb
binlog_cache_size = 4M
#binlog 能夠使用的最大cache 內(nèi)存大小
max_binlog_cache_size = 2G
#單個binlog 文件大小 默認值是1GB
max_binlog_size = 1G
#binlog 過期天數(shù)7
#expire_logs_days = 7
binlog_expire_logs_seconds = 604800
#GTID
gtid_mode = on
enforce_gtid_consistency = 1
#innodb_buffer
#一般設(shè)置物理存儲的 50% ~ 70%
innodb_buffer_pool_size = 8G
#當(dāng)緩沖池大小大于1GB時,將innodb_buffer_pool_instances設(shè)置為大于1的值,可以提高繁忙服務(wù)器的可伸縮性
innodb_buffer_pool_instances = 8
#雙一刷盤設(shè)置
#控制 innodb_flush_log_at_trx_commit redolog 寫磁盤頻率 sync_binlog 默認為1 #控制 binlog 寫磁盤頻率
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
#從庫binlog控制
log_replica_updates = ON
#自增ID設(shè)置(1,2) 另一臺設(shè)置為 (2,2)
auto_increment_offset = 1
auto_increment_increment = 2
# 表名SQL大小寫(是否對sql語句大小寫敏感,1表示不敏感 0 )
lower_case_table_names = 1
#Replication
master_info_repository =TABLE
relay_log_info_repository =TABLE
#super_read_ony =ON
binlog_transaction_dependency_tracking =WRITESET
transaction_write_set_extraction =XXHASH64
#Multi-threaded Replication
replica_parallel_type =LOGICAL_CLOCK
replica_preserve_commit_order =ON
replica_parallel_workers = 4
#是否啟用慢查詢?nèi)罩荆?為啟用,0為禁用
slow_query_log = 1
#指定慢查詢?nèi)罩疚募穆窂胶兔?/p>
slow_query_log_file =/data/mysql/data/slow.log
#慢查詢執(zhí)行的秒數(shù),必須達到此值可被記錄
long_query_time = 1
#將沒有使用索引的語句記錄到慢查詢?nèi)罩?/p>
log_queries_not_using_indexes = 0
#設(shè)定每分鐘記錄到日志的未使用索引的語句數(shù)目,超過這個數(shù)目后只記錄語句數(shù)量和花費的總時間
log_throttle_queries_not_using_indexes = 60
#對于查詢掃描行數(shù)小于此參數(shù)的SQL,將不會記錄到慢查詢?nèi)罩局?/p>
min_examined_row_limit = 5000
#記錄執(zhí)行緩慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等。
log_slow_admin_statements = 0
[mysqldump]
quick
max_allowed_packet = 512M
4. 創(chuàng)建數(shù)據(jù)目錄 并修改其屬主和組
mkdir -p /data/mysql/data
chown -R mysql.mysql /data/mysql
chown -R mysql.mysql /data/mysql/data
5. 初始化數(shù)據(jù)庫實例
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
6. 啟動實例
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
ps -ef |grep mysql
7. 登錄實例
* 找初始實例日志的臨時密碼
grep password /data/mysql/data/mysql.err
* 登錄數(shù)據(jù)庫
/usr/local/mysql/bin/mysql -uroot -p
* 登陸后必須修改密碼
mysql> alter user user() identified by 'xxxxxxxx';
* 安裝密碼策略控件
-- mysql 8.0
select * from mysql.component ;
install component 'file://component_validate_password';
8. 以服務(wù)方式啟動
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
-- modify basedir and datadir
basedir=/usr/local/mysql
datadir=/data/mysql/data
# 重新載入
systemctl daemon-reload
# 設(shè)置開機自啟動
systemctl enable mysqld
# 重啟mysql 服務(wù)
systemctl status mysqld
systemctl restart mysqld
systemctl stop mysqld
systemctl start mysqld
9. 配置環(huán)境變量
vim /etc/profile -- 編輯 所有用戶的變量 對所有用戶登錄的環(huán)境變量可用
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
10. 登錄數(shù)據(jù)
[root@centos7-2 bin]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
四.基于GTID 搭建MySQL復(fù)制
注意事項:server-id 兩臺服務(wù)器一定要設(shè)置成不同ID
1. 在主庫建立 數(shù)據(jù)同步的賬號
CREATE USER 'repl_user'@'10.28.3.19%' IDENTIFIED BY 'XXXXXXXX';
GRANT replication slave ON *.* TO 'repl_user'@'10.28.3.19%';
FLUSH PRIVILEGES;
2. 在從庫執(zhí)行 設(shè)置主庫命令
change master to
master_host='10.28.3.195',
master_port=3306,
master_user='repl_user',
master_password='XXXXXXXX',
master_auto_position=1,
master_connect_retry=30,
get_master_public_key=1;
3. 開啟 復(fù)制 并查看復(fù)制狀態(tài)
start slave;
show slave status\G;
五.安裝Keepalived
1. yum安裝
yum install -y Keepalived
2. 配置服務(wù)
systemctl enable keepalived
systemctl daemon-reload
3. 配置文件修改
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old
vim /etc/keepalived/keepalived.conf
修改配置文件
# 全局配置
global_defs {
# 身份識別(全局唯一)
router_id lb01
}
vrrp_script check_mysql {
#這里通過腳本監(jiān)測
script "/data/keepalived/check_mysql.sh"
interval 5 #腳本執(zhí)行間隔,每5s檢測一次
weight -5 #腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失敗(腳本返回非0)則優(yōu)先級 -5
fall 1 #檢測連續(xù)2次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間)
rise 1 #檢測1次成功就算成功。但不修改優(yōu)先級
}
# 配置vrrp協(xié)議(相互探測 假設(shè)有一Keepalived宕機 它會立馬把VIP切換到另一臺機器)
vrrp_instance VI_MYSQL {
# 綁定網(wǎng)卡(所用vip必須是當(dāng)前機器的網(wǎng)卡所在的網(wǎng)段里的 eth0/eth1里面)
interface eth0
# 狀態(tài)master主節(jié)點(這里僅僅是一個標記,真正確認VIP的是權(quán)重) 主服務(wù)器配置為MASTER,從服務(wù)器配置為BACKUP
state MASTER
virtual_router_id 50
# 優(yōu)先級(數(shù)字越大 權(quán)重越大) 主服務(wù)器優(yōu)先級高于從服務(wù)器
priority 100
# 檢測心跳間隔時間
advert_int 1
authentication {
auth_type PASS
auth_pass 123456 # 驗證密碼
}
virtual_ipaddress {
10.28.3.194 # 虛擬IP地址,用于連接數(shù)據(jù)庫
}
track_script {
check_mysql
}
}
配置監(jiān)測MYSQL運行腳本/data/keepalived/check_mysql.sh
mkdir -p /data/keepalived/
vim /data/keepalived/check_mysql.sh
#!/bin/bash
# 檢查MySQL服務(wù)是否在運行 給一次機會看2后是MYSQL又開始運行
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
sleep 2;
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
killall keepalived
fi
fi
注意 需要給 /data/keepalived/check_mysql.sh 腳本為授權(quán)。
chmod u+x /data/keepalived/check_mysql.sh
4. 啟動keepAlived
systemctl start keepalived
5. 驗證keepAlived
# 驗證前提 需要 兩臺服務(wù)器 的mysql 和 keepalived 服務(wù) 在正常可用的狀態(tài)下。
# 在master1上執(zhí)行。
systemctl stop mysqld
# 在其另一臺執(zhí)行ip a 看看虛擬ip 是否切換到另外節(jié)點
ip a
六.建立管理員賬號
**建立dbadmin賬號 **
CREATE USER 'dbadmin'@'%' IDENTIFIED BY 'xxxxxxxx';
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'%' with GRANT OPTION;
FLUSH PRIVILEGES;
七.賬號密碼信息
密碼信息
賬號 | 密碼 | 是否可修改密碼 | 權(quán)限 | 備注 |
---|---|---|---|---|
root | xxxxxxxx | 是 | 本地管理賬號 | 只能本機登錄 |
dbadmin | xxxxxxxx | 是 | 遠程管理員賬號 | 可遠程登錄 |
repl_user | xxxxxxxx | 是 | 主從復(fù)制賬號 | 需要停止復(fù)制才可以修改密碼,修改后需要重新指定主從賬號密碼。 |
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術(shù)支持:南京博盛藍睿網(wǎng)絡(luò)科技有限公司
南京思必達教育科技有限公司版權(quán)所有 百度統(tǒng)計