mysql8.0.26安裝
服務(wù)器優(yōu)化
關(guān)閉大葉內(nèi)存transparent_hugepage
vi /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
chmod +x /etc/rc.local
查看結(jié)果
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never] 括號中是never就沒問題
文件句柄
cat >> /etc/security/limits.conf <<EOF
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 16384
* hard nproc 16384
* soft stack 32768
* hard stack 32768
* soft memlock unlimited
* hard memlock unlimited
EOF
ulimit -n 180000
內(nèi)存優(yōu)化
cat >> /etc/sysctl.conf <<EOF
fs.file-max = 6553600 # 系統(tǒng)所有進程一共可以打開的文件數(shù)量
fs.nr_open = 6553500
vm.swappiness = 5
vm.dirty_ratio = 20 # 臟葉比例達到總內(nèi)存的20%
vm.dirty_background_ratio = 10 # 臟葉比例達到總內(nèi)存的10% 異步刷新
vm.dirty_expire_centisecs=30
net.ipv4.tcp_max_syn_backlog = 65536 # 表示SYN隊列的長度明郭,默認為1024,建議加大隊列的長度為8192或更多簿姨,這樣可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)
net.core.netdev_max_backlog = 32768 # 表示當每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時掏击,允許發(fā)送到隊列的數(shù)據(jù)包最大數(shù)
net.core.somaxconn = 32768 # 該選項默認值是128咱圆,這個參數(shù)用于調(diào)節(jié)系統(tǒng)同時發(fā)起的TCP連接數(shù)睛廊,在高并發(fā)的請求中藐不,默認的值可能會導致鏈接超時或重傳莉兰,因此浅乔,需要結(jié)合并發(fā)請求數(shù)來調(diào)節(jié)此值倔喂。
net.core.wmem_default = 8388608 # 發(fā)送套接字緩沖區(qū)大小的默認值
net.core.rmem_default = 8388608 # 接收套接字緩沖區(qū)大小的默認值
net.core.rmem_max = 16777216 # 接收套接字緩沖區(qū)大小的最大值
net.core.wmem_max = 16777216 # 發(fā)送套接字緩沖區(qū)大小的最大值
net.ipv4.tcp_timestamps = 0 # 關(guān)閉時間戳 啟用了會有問題
net.ipv4.tcp_synack_retries = 2 # 參數(shù)的值決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量。
net.ipv4.tcp_syn_retries = 2 # 表示在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量
net.ipv4.tcp_tw_recycle = 1 # 表示開啟TCP連接中TIME-WAIT sockets的快速回收 服務(wù)器time_wait網(wǎng)絡(luò)狀態(tài)數(shù)量過多設(shè)置的
#net.ipv4.tcp_tw_len = 1 # 用于快速減少在TIME-WAIT狀態(tài)TCP連接數(shù) 共用同一個NAT設(shè)備環(huán)境下有問題不要開
net.ipv4.tcp_tw_reuse = 1 # 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接滴劲,默認值為0攻晒,表示關(guān)閉
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_max_orphans = 3276800 # 用于設(shè)定系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上
net.ipv4.tcp_fin_timeout = 2 # 表示套接字由本端要求關(guān)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間班挖,默認值是60秒
#net.ipv4.tcp_keepalive_time = 1800 # 表示當keepalive起用的時候鲁捏,TCP發(fā)送keepalive消息的頻度。缺省是2小時萧芙,改為30分鐘
net.ipv4.ip_local_port_range = 1024 65535 # 該選項用來設(shè)定允許系統(tǒng)打開的端口范圍给梅,即用于向外連接的端口范圍
net.ipv4.route.gc_timeout = 100 # 路由緩存刷新頻率,當一個路由失敗后多長時間跳到另一個路由双揪,默認是300
net.inet.udp.checksum=1 #防止不正確的udp包的攻擊
net.ipv4.icmp_ignore_bogus_error_responses = 1 # 開啟惡意icmp錯誤消息保護
net.ipv4.icmp_echo_ignore_broadcasts = 1 # 避免放大攻擊
EOF
sysctl -p
說明:
vm.swappiness = 5 內(nèi)存使用還剩5%才開始使用swap
vm.dirty_ratio = 20 內(nèi)存臟葉到達20%時候刷新 異步刷新
vm.dirty_background_ratio = 10 內(nèi)存臟葉到達10%時候強制刷新 強制刷新
IO調(diào)度策略
cat /sys/block/sda/queue/scheduler 如果是noop [deadline] cfq沒問題
選用規(guī)則
SAS 盤: deadline
SSD&PCI-E盤: noop
修改
臨時:
echo deadline >/sys/block/sda/queue/scheduler
永久:
vi /boot/grub/grub.conf
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet
安裝
下載軟件
https://downloads.mysql.com/archives/community/
解壓
tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.26-linux-glibc2.12-x86_64 mysql && mv mysql /usr/local/mysql
添加用戶
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
添加環(huán)境變量
cat >> /etc/profile <<EOF
export PATH=$PATH:/usr/local/mysql/bin
EOF
source /etc/profile
mysql -V
安裝依賴
yum install libaio library numactl -y
創(chuàng)建目錄
mkdir -p /data/3306/data
chown -R mysql.mysql /data/3306
簡單編寫配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
port=3306
server_id=3306
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances=2
gtid-mode=on
enforce-gtid-consistency=true
log_bin=mysql-bin
slow_query_log=1
slow_query_log_file=slow.log
long_query_time=4
log_queries_not_using_indexes
log_error=error.log
innodb_flush_method =O_DIRECT
transaction_isolation=READ-COMMITTED
innodb_flush_log_at_trx_commit=2
sync_binlog =100
log_bin_trust_function_creators=1
default_authentication_plugin=mysql_native_password
max_allowed_packet = 128M
innodb_data_file_path=ibdata1:12M;ibdata2:100M;ibdata3:100M:autoextend
innodb_temp_data_file_path=ibtmp1:12M;ibtmp2:128M:autoextend:max:500M
secure-file-priv=
[mysql]
socket=/tmp/mysql.sock
EOF
初始化數(shù)據(jù)庫
5.7以上無密碼
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data/
注意: mysqld --defaults-file=/etc/my.cnf --initialize-insecure 可以指定配置文件
5.7以上有密碼
mysqld --initialize --user=mysql --basedir=/usr/local/mysql80 --datadir=/data/3306/data/
5.6初始化方法
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf
啟動方式
-
systemctl啟動
cat > /etc/systemd/system/mysqld.service <<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 50000 EOF systemctl daemon-reload systemctl start mysqld systemctl enable mysqld
-
mysqld_safe啟動
# 當mysqld 異常crash會嘗試去啟動mysqld mysqld_safe --defaults-file=/etc/my.cnf & 關(guān)閉: admin -uroot -p123 shutdown 登錄數(shù)據(jù)庫以后執(zhí)行 shutdown;
-
mysqld啟動
# 啟動日志全部會打印到屏幕 ----> 可以進行問題排查 mysqld &
-
/etc/init.d啟動
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld /etc/init.d/mysqld restart # 添加服務(wù) chkconfig --add mysqld systemctl daemon-reload systemctl start mysqld systemctl enable mysqld
備份
db_fullbackup.sh
#/bin/bash
#備份位置
BK_PATH=/db_backup
# 備份命令mysqldump路徑
Mysqldump_dir=/usr/local/mysql/bin/
# 數(shù)據(jù)庫登陸信息
mysql_user=kxmkxm
mysql_pass='Kxm@123456'
ip_addr='127.0.0.1'
# 如果目錄不存在創(chuàng)建目錄
if [ ! -d $BK_PATH ]; then
mkdir -p $BK_PATH
fi
# 開始備份
$Mysqldump_dir/mysqldump -u$mysql_user -p$mysql_pass -h$ip_addr -A -R -E --master-data=2 --single-transaction --triggers > $BK_PATH/full_$(date +%F_%H-%M-%S).sql
# 保留七天的備份
find $BK_PATH -mtime +7 -name "full*.sql" |xargs rm -rf
chmod +x db_fullbackup.sh
主從搭建
資源劃分
角色 | IP | 端口 | server_id |
---|---|---|---|
主庫 | 10.0.0.12 | 3306 | server_id=3306 |
從庫 | 10.0.0.13 | 3306 | server_id=3307 |
注意
2臺以上的MySQL實例具備不同的 server_id, server_uuid动羽,
時間同步
主庫"開啟binlog, 創(chuàng)建復制用戶。
基于position號搭建主從
主庫操作
創(chuàng)建復制用戶和遠程管理用戶
create user repl@'10.0.0.%' identified with mysql_native_password by '123';
grant replication slave on *.* to repl@'10.0.0.%';
備份主庫數(shù)據(jù)
mysqldump -A --source-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
從庫操作
還原主庫數(shù)據(jù)
source /tmp/full.sql
啟動主從復制
CHANGE MASTER TO
MASTER_HOST='10.0.0.12',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1187,
MASTER_CONNECT_RETRY=10;
開啟主從 查看狀態(tài)
start slave;
show slave status \G
基于gtid搭建主從
注意
mysql 8.0.26以后 --master-data=2 改為 --source-data=2
備份時加上參數(shù)--set-gtid-purged=on 在sql文件中有 set @@session.sql_log_bin= 0; 關(guān)閉二進制日志
則在還原時候 不用 設(shè)置gtid_purged 默認--set-gtid-purged=on
主庫操作
創(chuàng)建復制用戶和遠程管理用戶
create user repl@'10.0.0.%' identified with mysql_native_password by '123';
grant replication slave on *.* to repl@'10.0.0.%';
備份主庫數(shù)據(jù)
mysqldump -A --source-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
從庫操作
還原主庫數(shù)據(jù)
source /tmp/full.sql
啟動主從復制
CHANGE MASTER TO
MASTER_HOST='10.0.0.12',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
清除從庫二進制日志從新設(shè)定位置
reset master;
set global gtid_purged = '0f8adf5f-c9c8-11ec-8fbb-000c2944ead6:1-3';
開啟主從 查看狀態(tài)
start slave;
show slave status \G
Clone-plugin搭建主從
介紹
克隆過程中可以發(fā)生DML操作但是不允許發(fā)生DDL操作
克隆過程中把產(chǎn)生的redo歸檔等備份完成把redo拷貝過去CR 屬于物理備份
克隆過程中會把從數(shù)據(jù)庫清空
版本要一致包括小版本
從庫修改啟動方式 mysqld_safe啟動 從庫復制完不需要設(shè)置gtid_purged
主庫操作
# 安裝插件 創(chuàng)建用戶 授權(quán)
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
create user test_s@'%' identified by '123';
grant backup_admin on *.* to test_s@'%';
主庫創(chuàng)建復制用戶
create user repl@'10.0.0.%' identified with mysql_native_password by '123';
grant replication slave on *.* to repl@'10.0.0.%';
從庫操作
從庫修改啟動方式
mysqld_safe --defaults-file=/etc/my.cnf &
# 安裝插件 創(chuàng)建用戶 授權(quán) 設(shè)置主庫白名單
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
create user test_t@'%' identified by '123';
grant clone_admin on *.* to test_t@'%';
SET GLOBAL clone_valid_donor_list='10.0.0.12:3306';
# 開始克隆
CLONE INSTANCE FROM test_s@'10.0.0.12':3306 IDENTIFIED BY '123';
gtid方式構(gòu)建主從
CHANGE MASTER TO
MASTER_HOST='10.0.0.12',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
開啟主從 查看狀態(tài)
start slave;
show slave status \G
查看備份結(jié)果
#bin_log日志信息在這里
SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;
use performance_schema ; select stage,stage from clone_progress;
sq
# 如果是gtid復制
SELECT @@GLOBAL.GTID_EXECUTED;
半同步復制
介紹
主庫發(fā)送二進制日志給從庫,并不關(guān)心從庫是否落盤到relay log中
如果做個限制等從庫把數(shù)據(jù)寫入relay log以后,在確認成功就是半同步復制(ACK的線程完成)loose- 后面的參數(shù) 如果配置有問題就不執(zhí)行
主庫操作
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_wait_for_slave_count=1 # 只要有一個從庫 返回ACK就認為 成功了
# 配置文件添加
loose-rpl_semi_sync_master_enabled = 1
查看是否加載成功:
show plugins;
show status like '%Rpl_semi_sync_master_status%';
從庫操作
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
# 配置文件添加
rpl_semi_sync_slave_enabled = 1
查看是否加載成功:
show status like 'Rpl_semi_sync_slave_status';
重啟從庫上的IO線程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
增強半同步復制
介紹
增強半同步復制 也是在從庫 relay log 返回ACK后 主庫才提交成功 ,區(qū)別是等待ack的時機不一樣
主庫commit 提交 redo日志落地,然后binlog日志落地,然后開始等待從庫 relay log 收到消息后返回ack
如果從庫 正常返回ack 則主庫在binlog處打標記, 更新事務(wù)狀態(tài) 執(zhí)行成功
如果從庫 未收到?jīng)]返回ack 則主庫 binlog 未打標記, 不更新事務(wù)狀態(tài) ,事務(wù)回滾
主庫操作
# 配置文件添加
rpl_semi_sync_master_wait_point=AFTER_SYNC
rpl_semi_sync_master_timeout=10000 # 默認為10秒 半同步復制超過10秒還沒收到ACK就切換為異步復制
rpl_semi_sync_master_wait_for_slave_count=1 # 只要有一個從庫 返回ACK就認為 成功了
# 查看
show variables like '%wait_point%';
從庫操作
過濾復制
介紹
前提: 主從已經(jīng)搭建好
過濾復制 可以限制主庫也可以限制從庫,一般限制從庫
限制從庫,其實日志也過來了 只是從庫sql線程沒執(zhí)行而已
主庫操作
從庫操作
vi /etc/my.cnf
解決跨庫更新的問題
loose-replicate_wild_do_table=world.% # 白名單 只復制world庫下的所有表
loose-replicate_wild_ignore_table=world.t1 # 黑名單 不復制world.t1表
重啟數(shù)據(jù)庫
systemctl restart mysqld
延時從庫
介紹
前提: 主從已經(jīng)搭建好
主庫操作
從庫操作
stop slave;
CHANGE MASTER TO MASTER_DELAY = 300; # 延時300秒=5分鐘
start slave;
延時故障恢復
關(guān)掉延時
stop slave;
CHANGE MASTER TO MASTER_DELAY = 0;
查看relaylog 找到誤刪除position號-比如是10 localhost-relay-bin.000002在數(shù)據(jù)目錄
show relaylog events in "localhost-relay-bin.000002";
恢復到誤刪除之前 gtid號 圖上info位置 創(chuàng)建完t5表,
START SLAVE UNTIL SQL_BEFORE_GTIDS = '5f4c68b1-efac-11eb-af07-000c294497d3:9';
多源復制(MSR)5.7+
兩個主庫中的數(shù)據(jù) 復制到 一個從庫中, 默認不會復制系統(tǒng)庫 包括用戶(mysql)庫
8.0以后支持 主庫指定那個庫 復制到從庫 ,其他庫不復制過去
從庫GTID會有3個 兩個主庫的和自己一個
如果有定時任務(wù) 則從庫 定時任務(wù)是禁用狀態(tài) 主庫開啟從庫也不會開啟
IP規(guī)劃
主機名 | IP | 端口 | 角色 |
---|---|---|---|
db01 | 10.0.0.11 | 3306 | master |
db02 | 10.0.0.12 | 3306 | master |
db03 | 10.0.0.13 | 3306 | slave |
準備配置文件
必須開啟這個否則主庫數(shù)據(jù)不會同步過去
log-slave-updates=1 # 從庫是否將復制線程執(zhí)行的內(nèi)容記錄到binlog
主庫1
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
server_id=6
socket=/tmp/mysql.sock
log_bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency
log-slave-updates=1
secure-file-priv=/tmp
innodb_flush_method=O_DIRECT
slow_query_log=ON
slow_query_log_file=/data/3306/data/db01-slow.log
long_query_time=2
log_queries_not_using_indexes
master_info_repository=TABLE
relay_log_info_repository=TABLE
[client]
socket=/tmp/mysql.sock
[mysql]
prompt=db01 [\\d]>
socket=/tmp/mysql.sock
EOF
主庫2
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
server_id=7
socket=/tmp/mysql.sock
log_bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency
log-slave-updates=1
secure-file-priv=/tmp
innodb_flush_method=O_DIRECT
slow_query_log=ON
slow_query_log_file=/data/3306/data/db01-slow.log
long_query_time=2
log_queries_not_using_indexes
master_info_repository=TABLE
relay_log_info_repository=TABLE
[client]
socket=/tmp/mysql.sock
[mysql]
prompt=db02 [\\d]>
socket=/tmp/mysql.sock
EOF
從庫
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
server_id=8
socket=/tmp/mysql.sock
log_bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency
log-slave-updates=1
secure-file-priv=/tmp
innodb_flush_method=O_DIRECT
slow_query_log=ON
slow_query_log_file=/data/3306/data/db01-slow.log
long_query_time=2
log_queries_not_using_indexes
master_info_repository=TABLE
relay_log_info_repository=TABLE
[client]
socket=/tmp/mysql.sock
[mysql]
prompt=db03 [\\d]>
socket=/tmp/mysql.sock
EOF
啟動數(shù)據(jù)庫
# 初始化數(shù)據(jù) 啟動數(shù)據(jù)庫
pkill mysqld
rm -rf /data/3306/data/*
mysqld --initialize-insecure --user=mysql -- basedir=/usr/local/mysql --datadir=/data/3306/data
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start
mysql
2個主節(jié)點操作
創(chuàng)建復制用戶 用戶名 repl 密碼 123
set sql_log_bin=0;
create user repl@'10.0.0.%' identified with mysql_native_password by '123';
grant replication slave on *.* to repl@'10.0.0.%' ;
set sql_log_bin=1;
從節(jié)點操作
# 連接 12
CHANGE MASTER TO
MASTER_HOST='10.0.0.11',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1 FOR CHANNEL 'Master_1';
# 連接 13
CHANGE MASTER TO
MASTER_HOST='10.0.0.12',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1 FOR CHANNEL 'Master_2';
啟動主從
start slave for CHANNEL 'Master_1';
start slave for CHANNEL 'Master_2';
多源復制監(jiān)控 13上
SHOW SLAVE STATUS FOR CHANNEL 'Master_1'\G
SHOW SLAVE STATUS FOR CHANNEL 'Master_2'\G
select * from replication_connection_configuration\G
SELECT * FROM replication_connection_status WHERE CHANNEL_NAME='master_1'\G
select * from performance_schema.replication_applier_status_by_worker;
多源復制配置過濾
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.%') FOR CHANNEL "master_1"; # FOR CHANNEL "master_1"; 是8.0以后才有
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db2.%') FOR CHANNEL "master_2"; # FOR CHANNEL "master_2"; 是8.0以后才有
keepalived
介紹
創(chuàng)建vip 當主庫宕機可以切換到從庫繼續(xù)提供服務(wù)
當主庫mysql宕機 停主庫keealived vip漂移到從庫 渔期,當主庫修復完成 啟動主庫 啟動keepalived此時vip還會漂移回來(可以修改優(yōu)先級不讓漂移)
涉及到: vip 檢測腳本 vrrp通信端口
資源劃分
角色 | IP | 端口 | 安裝軟件 |
---|---|---|---|
主庫 | 10.0.0.12 | 3306 | keepalived运吓,mysql |
從庫 | 10.0.0.13 | 3306 | keepalived,mysql |
vip | 10.0.0.10 |
主庫配置
安裝keepalived
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
vrrp_script chk {
script "/root/jiaoben"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.13/24 dev eth0 label eth0:1
}
track_script {
chk
}
}
vi /root/jiaoben
#!/bin/bash
count=`ps -ef |grep -c '[m]ysqld'`
if [ $count -lt 2 ];then
systemctl stop keepalived.service
fi
從庫配置
安裝keepalived
yum install keepalived -y
vim /etc/keepalived/keepalived.conf
vrrp_script chk {
script "/root/jiaoben"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.13/24 dev eth0 label eth0:1
}
track_script {
chk
}
}
vi /root/jiaoben
#!/bin/bash
count=`ps -ef |grep -c '[m]ysqld'`
if [ $count -lt 2 ];then
systemctl stop keepalived.service
fi
1 網(wǎng)卡名字etho對應修改
2 virtual_router_id 51 主從要一樣
3 state MASTER (主庫修好還會自動切回來) 疯趟, state BACKUP(兩邊都是backup 主庫修好也不會切換)
4 10.0.0.13/24 dev eth0 label eth0:1 是vip地址
5 interval 2 腳本每2秒檢測一次
6 script "/root/jiaoben" 腳本路徑