本文主要講述了MySQL雙主+keepalived實現故障自動切換的項目基本情況、基礎環境配置和安裝過程。兩臺服務器需要修改主機名并關閉SELinux設置,將下載好的安裝包解壓到/usr/local目錄,然后使用ln -s命令...
Mysql雙主+keepalived實現故障自動切換
一. 項目基本情況
* 項目概述
項目要求: MySQL業務搭建雙主模式服務+keepalived 實現故障自動切換
* 基礎環境信息
主機名VIPIPOS系統CPU內存磁盤系統角色端口安裝軟件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 安裝
* 架構情況
二. 基礎環境配置
需要在兩臺服務器上都執行。
1. 修改主機名
#2臺服務器分別執行:
cat << EOF >> /etc/hosts
10.28.3.195 mysql-01
10.28.3.196 mysql-02
EOF
2. 關閉SELinux
setenforce 0
3. 將下載好的安裝包放在服務器的/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. 創建操作系統用戶
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
#最大連接數
max_connections = 3000
#最大錯誤連接數
max_connect_errors = 10000
#MySQL默認的wait_timeout 值為8個小時, interactive_timeout參數需要同時配置才能生效
interactive_timeout = 3600
wait_timeout = 3600
#字符集
character-set-server = utf8mb4
#只能用IP地址檢查客戶端的登錄,不用主機名
skip_name_resolve = 1
#binlog
binlog_format = ROW
#如果設置為MINIMAL,則會減少記錄日志的內容,只記錄受影響的列,但對于部分update無法flashBack
binlog_row_image = FULL
#一般數據庫中沒什么大的事務,設成1~2M,默認32kb
binlog_cache_size = 4M
#binlog 能夠使用的最大cache 內存大小
max_binlog_cache_size = 2G
#單個binlog 文件大小 默認值是1GB
max_binlog_size = 1G
#binlog 過期天數7
#expire_logs_days = 7
binlog_expire_logs_seconds = 604800
#GTID
gtid_mode = on
enforce_gtid_consistency = 1
#innodb_buffer
#一般設置物理存儲的 50% ~ 70%
innodb_buffer_pool_size = 8G
#當緩沖池大小大于1GB時,將innodb_buffer_pool_instances設置為大于1的值,可以提高繁忙服務器的可伸縮性
innodb_buffer_pool_instances = 8
#雙一刷盤設置
#控制 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設置(1,2) 另一臺設置為 (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
#是否啟用慢查詢日志,1為啟用,0為禁用
slow_query_log = 1
#指定慢查詢日志文件的路徑和名字
slow_query_log_file =/data/mysql/data/slow.log
#慢查詢執行的秒數,必須達到此值可被記錄
long_query_time = 1
#將沒有使用索引的語句記錄到慢查詢日志
log_queries_not_using_indexes = 0
#設定每分鐘記錄到日志的未使用索引的語句數目,超過這個數目后只記錄語句數量和花費的總時間
log_throttle_queries_not_using_indexes = 60
#對于查詢掃描行數小于此參數的SQL,將不會記錄到慢查詢日志中
min_examined_row_limit = 5000
#記錄執行緩慢的管理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. 創建數據目錄 并修改其屬主和組
mkdir -p /data/mysql/data
chown -R mysql.mysql /data/mysql
chown -R mysql.mysql /data/mysql/data
5. 初始化數據庫實例
/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
* 登錄數據庫
/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. 以服務方式啟動
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
# 設置開機自啟動
systemctl enable mysqld
# 重啟mysql 服務
systemctl status mysqld
systemctl restart mysqld
systemctl stop mysqld
systemctl start mysqld
9. 配置環境變量
vim /etc/profile -- 編輯 所有用戶的變量 對所有用戶登錄的環境變量可用
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
10. 登錄數據
[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復制
注意事項:server-id 兩臺服務器一定要設置成不同ID
1. 在主庫建立 數據同步的賬號
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. 在從庫執行 設置主庫命令
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. 開啟 復制 并查看復制狀態
start slave;
show slave status\G;
五.安裝Keepalived
1. yum安裝
yum install -y Keepalived
2. 配置服務
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 {
#這里通過腳本監測
script "/data/keepalived/check_mysql.sh"
interval 5 #腳本執行間隔,每5s檢測一次
weight -5 #腳本結果導致的優先級變更,檢測失敗(腳本返回非0)則優先級 -5
fall 1 #檢測連續2次失敗才算確定是真失敗。會用weight減少優先級(1-255之間)
rise 1 #檢測1次成功就算成功。但不修改優先級
}
# 配置vrrp協議(相互探測 假設有一Keepalived宕機 它會立馬把VIP切換到另一臺機器)
vrrp_instance VI_MYSQL {
# 綁定網卡(所用vip必須是當前機器的網卡所在的網段里的 eth0/eth1里面)
interface eth0
# 狀態master主節點(這里僅僅是一個標記,真正確認VIP的是權重) 主服務器配置為MASTER,從服務器配置為BACKUP
state MASTER
virtual_router_id 50
# 優先級(數字越大 權重越大) 主服務器優先級高于從服務器
priority 100
# 檢測心跳間隔時間
advert_int 1
authentication {
auth_type PASS
auth_pass 123456 # 驗證密碼
}
virtual_ipaddress {
10.28.3.194 # 虛擬IP地址,用于連接數據庫
}
track_script {
check_mysql
}
}
配置監測MYSQL運行腳本/data/keepalived/check_mysql.sh
mkdir -p /data/keepalived/
vim /data/keepalived/check_mysql.sh
#!/bin/bash
# 檢查MySQL服務是否在運行 給一次機會看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 腳本為授權。
chmod u+x /data/keepalived/check_mysql.sh
4. 啟動keepAlived
systemctl start keepalived
5. 驗證keepAlived
# 驗證前提 需要 兩臺服務器 的mysql 和 keepalived 服務 在正常可用的狀態下。
# 在master1上執行。
systemctl stop mysqld
# 在其另一臺執行ip a 看看虛擬ip 是否切換到另外節點
ip a
六.建立管理員賬號
**建立dbadmin賬號 **
CREATE USER 'dbadmin'@'%' IDENTIFIED BY 'xxxxxxxx';
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'%' with GRANT OPTION;
FLUSH PRIVILEGES;
七.賬號密碼信息
密碼信息
賬號 | 密碼 | 是否可修改密碼 | 權限 | 備注 |
---|---|---|---|---|
root | xxxxxxxx | 是 | 本地管理賬號 | 只能本機登錄 |
dbadmin | xxxxxxxx | 是 | 遠程管理員賬號 | 可遠程登錄 |
repl_user | xxxxxxxx | 是 | 主從復制賬號 | 需要停止復制才可以修改密碼,修改后需要重新指定主從賬號密碼。 |
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計