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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

高可用mysql笔记_MySQL笔记-高可用方案

發布時間:2023/12/2 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高可用mysql笔记_MySQL笔记-高可用方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL筆記-高可用方案

一、概述

MYSQL高可用方案有多種,本次針對其中部分方案進行實踐。包括主從,雙主,myql+keepalived, mysql+mycat+keepalived。

紙上得來終覺淺,親自實驗一下。

環境信息

注意兩臺機器時間需要保持同步,網絡和端口權限

臨時關閉防火墻:systemctl stop firewalld.service

服務器環境:CentOS7.6

MySQL版本:mysql-community-server-5.7.28-1

mysql, master:192.168.1.100

mysql, slave:192.168.1.101

二、主從復制(一主一從)

2.1、配置參數(my.cnf)

注意修改后需要重啟數據庫服務

mysql主從復制重要配置參數說明(my.cnf)

#通用重要配置

server-id=1 # 不能和其他重復,必須全局唯一

log-bin=mysql-bin

#從庫重要配置

relay_log=mysql-relay-bin

log-slave-updates=1

#其他重要參數

binlog-ignore-db=mysql

replicate-ignore-db=mysql

max_binlog_size=1G

expire_logs_days=15 #日志保留天數

我的Master完整配置(my.cnf)

[mysqld]

server-id=1

#binlog_format=ROW

#log-bin=mysql-bin

log-bin=/var/lib/mysql/mysql-bin

#innodb_flush_log_at_trx_commit=1

#sync_binlog=1

max_binlog_size=1G

expire_logs_days=15 #日志保留天數

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 只同步哪些數據庫,除此之外,其他不同步

# binlog-do-db=testdb

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

max_connections=3000

lower_case_table_names=1

max_allowed_packet=40M

wait_timeout=1800

interactive_timeout=1800

max_connect_errors=3000

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

[mysqldump]

user=local

password=123456

我的Slave完整配置(my.cnf)

[mysqld]

server-id=2

#log-bin=mysql-bin

log-bin=/var/lib/mysql/mysql-bin

log-slave-updates=1 # 在作為從數據庫的時候,有寫入操作也要更新二進制日志文件(主主配置一定要)

#innodb_flush_log_at_trx_commit=1

#sync_binlog=1

max_binlog_size=1G

expire_logs_days=15 #日志保留天數

# 不同步mysql,information_schema,performance_schema和sys庫

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

replicate-ignore-db=sys

relay_log=/var/lib/mysql/mysql-relay-bin

#read_only=1

#Enhanced Multi-Threaded Slave配置

#根據實際情況決定開啟多少個線程用于主從復制

slave_parallel_workers=4

#基于組提交的并行復制方式

slave_parallel_type=LOGICAL_CLOCK

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

max_connections=3000

lower_case_table_names=1

max_allowed_packet=40M

wait_timeout=1800

interactive_timeout=1800

max_connect_errors=3000

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

[mysqldump]

user=local

password=123456

2.2、Master數據庫,創建復制用戶并授權

mysql> create user repl identified by '123456';

Query OK, 0 rows affected (0.03 sec)

mysql> grant replication slave on *.* to repl@'%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.04 sec)

mysql> show master status;

+------------------+----------+--------------+-------------------------------------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+-------------------------------------------------+-------------------+

| mysql-bin.000001 | 1078 | | mysql,information_schema,performance_schema,sys | |

+------------------+----------+--------------+-------------------------------------------------+-------------------+

1 row in set (0.00 sec)

2.3、Slave數據庫,指定Master及啟用slave

mysql> change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1078;

Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.100

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 1078

Relay_Log_File: 0002-relay-bin.000002

Relay_Log_Pos: 320

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB: mysql,information_schema,performance_schema,sys

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1078

Relay_Log_Space: 526

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: 77f466ff-926e-11ea-bbba-408d5c963463

Master_Info_File: /var/lib/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

2.3、驗證主從復制

主庫創建測試庫、表和數據

mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Query OK, 1 row affected (0.03 sec)

mysql> CREATE TABLE `testdb`.`t_user`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NULL,PRIMARY KEY (`id`));

Query OK, 0 rows affected (0.21 sec)

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('jack');

Query OK, 1 row affected (0.07 sec)

mysql> select * from `testdb`.`t_user`;

+----+------+

| id | name |

+----+------+

| 1 | jack |

+----+------+

1 row in set (0.00 sec)

mysql> show master status;

+------------------+----------+--------------+-------------------------------------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+-------------------------------------------------+-------------------+

| mysql-bin.000001 | 1813 | | mysql,information_schema,performance_schema,sys | |

+------------------+----------+--------------+-------------------------------------------------+-------------------+

1 row in set (0.00 sec)

從庫查看同步情況

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Read_Master_Log_Pos: 1813

Relay_Log_File: 0002-relay-bin.000002

Relay_Log_Pos: 1055

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Exec_Master_Log_Pos: 1813

Relay_Log_Space: 1261

...

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| testdb |

+--------------------+

5 rows in set (0.00 sec)

mysql> select * from `testdb`.`t_user`;

+----+------+

| id | name |

+----+------+

| 1 | jack |

+----+------+

1 row in set (0.00 sec)

三、雙主配置

3.1 配置說明

實驗環境:

服務器環境:CentOS7.6

MySQL版本:mysql-community-server-5.7.28-1

mysql,master1:192.168.1.100

mysql,master2:192.168.1.101

雙主與一主一從,配置差不多,區別是:

1.兩臺機器都配置對方為從,即

在master1上執行

change master to master_host='192.168.1.101',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;

在master2上執行

change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;

2.兩方都配置replicate-ignore-db,binlog-ignore-db

3.為保險起見,調整兩方自增ID規則(非必須);把兩個節點的auto_increment_increment(自增步長)和auto_increment_offset(字增起始值)設置成不同值,其目的是為了避免master節點意外宕機時,可能會有部分binlog未能及時復制到slave上被應用,從而會導致slave新寫入數據的自增值和原master上沖突,因此一開始就錯開;

#masterA自增長ID

auto_increment_offset=1

auto_increment_increment=2 #奇數ID

#masterB自增加ID

auto_increment_offset=2

auto_increment_increment=2 #偶數ID

3.2 完整配置(my.cnf),master1

[mysqld]

server-id=1

#binlog_format=ROW

#log-bin=mysql-bin

log-bin=/var/lib/mysql/mysql-bin

#innodb_flush_log_at_trx_commit=1

#sync_binlog=1

max_binlog_size=1G

#日志保留天數

expire_logs_days=15

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 不同步mysql,information_schema,performance_schema和sys庫

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

replicate-ignore-db=sys

auto_increment_offset=1

#奇數ID

auto_increment_increment=2

# 只同步哪些數據庫,除此之外,其他不同步

# binlog-do-db=testdb

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

max_connections=3000

lower_case_table_names=1

max_allowed_packet=40M

wait_timeout=1800

interactive_timeout=1800

max_connect_errors=3000

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

[mysqldump]

user=local

password=123456

3.2 完整配置(my.cnf),master2

[mysqld]

server-id=2

#log-bin=mysql-bin

log-bin=/var/lib/mysql/mysql-bin

log-slave-updates=1 # 在作為從數據庫的時候,有寫入操作也要更新二進制日志文件(主主配置一定要)

#innodb_flush_log_at_trx_commit=1

#sync_binlog=1

max_binlog_size=1G

#日志保留天數

expire_logs_days=15

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 不同步mysql,information_schema,performance_schema和sys庫

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

replicate-ignore-db=sys

auto_increment_offset=2

#偶數ID

auto_increment_increment=2

relay_log=/var/lib/mysql/mysql-relay-bin

#read_only=1

#Enhanced Multi-Threaded Slave配置

#根據實際情況決定開啟多少個線程用于主從復制

slave_parallel_workers=4

#基于組提交的并行復制方式

slave_parallel_type=LOGICAL_CLOCK

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

max_connections=3000

lower_case_table_names=1

max_allowed_packet=40M

wait_timeout=1800

interactive_timeout=1800

max_connect_errors=3000

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[mysql]

default-character-set=utf8mb4

[client]

default-character-set=utf8mb4

[mysqldump]

user=local

password=123456

3.3 配置同步

#master1 (192.168.1.100):

mysql> create user repl identified by '123456';

mysql> grant replication slave on *.* to repl@'%' identified by '123456';

mysql> change master to master_host='192.168.1.101',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;

mysql> start slave;

#master1 (192.168.1.101):

mysql> create user repl identified by '123456';

mysql> grant replication slave on *.* to repl@'%' identified by '123456';

mysql> change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;

mysql> start slave;

3.4 驗證雙主

# 連接 master1 (192.168.1.100):

mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

mysql> CREATE TABLE `testdb`.`t_user`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NULL,PRIMARY KEY (`id`));

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('jack');

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('rose');

# 連接 master2 (192.168.1.101):

mysql> select * from `testdb`.`t_user`;

+----+------+

| id | name |

+----+------+

| 1 | jack |

| 3 | rose |

+----+------+

INSERT INTO `testdb`.`t_user`(`name`) VALUES ('tony');

INSERT INTO `testdb`.`t_user`(`name`) VALUES ('alice');

# 連接 master1 (192.168.1.100):

mysql> select * from `testdb`.`t_user`;

+----+-------+

| id | name |

+----+-------+

| 1 | jack |

| 3 | rose |

| 4 | tony |

| 6 | alice |

+----+-------+

4 rows in set (0.00 sec)

至此,雙主環境配置和驗證完畢

四、基于Keeplived配置雙主高可用

4.1、實驗環境

實驗環境:

基于上述雙主配置,

服務器環境:CentOS7.6

MySQL版本:mysql-community-server-5.7.28-1

mysql,master1:192.168.1.100

mysql,master2:192.168.1.101

虛擬mysql-IP(VIP),192.168.1.102

驗證方式:

通過虛擬IP(192.168.1.102:3306)連接訪問mysql,然后插入記錄,期望記錄ID為奇數;

然后關閉master1,期望通過虛擬IP(192.168.1.102:3306)仍能連接訪問MYSQL服務;

再插入記錄,期望記錄ID為偶數。

4.2、Keepalived安裝

一、yum安裝方式:

yum install keepalived -y

二、編譯安裝方式

# yum -y install gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools

# cd /usr/local/src/

# wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz

# mv keepalived-2.0.20 /usr/local/keepalived

# cd /usr/local/keepalived/

# ./configure

# make && make install

# mkdir /etc/keepalived

# cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

# cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/

# cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# cp /usr/local/sbin/keepalived /usr/sbin/

安裝參考: CentOS安裝Keepalived https://www.cnblogs.com/kingsonfu/p/11392470.html

服務啟動和暫停

# service keepalived start 啟動服務

# service keepalived stop //停止服務

# service keepalived status //查看服務狀態

查看keepalived日志

# tail -f /var/log/message

4.3 mysql-keepalived配置

采用keepalived作為高可用方案時,兩個節點最好都設置成BACKUP模式,避免因為意外情況下相互搶占導致兩個節點內寫入相同的數據而引發沖突;

master1配置(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYSQL_HA

}

vrrp_instance VI_1 {

state BACKUP

interface p4p1

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.102/24

}

}

virtual_server 192.168.1.102 3306 {

delay_loop 6

protocol TCP

real_server 192.168.1.100 3306 {

notify_down "kill -9 $(cat /var/run/keepalived.pid)"

TCP_CHECK {

connect_port 3306

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

master2配置(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYSQL_HA

}

vrrp_instance VI_1 {

state BACKUP

interface p4p1

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.102/24

}

}

virtual_server 192.168.1.102 3306 {

delay_loop 6

protocol TCP

real_server 192.168.1.101 3306 {

notify_down "kill -9 $(cat /var/run/keepalived.pid)"

TCP_CHECK {

connect_port 3306

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

4.4、驗證

-

五、基于Keepalived+MyCat配置雙主高可用

5.1、實驗環境

實驗環境:

基于上述雙主配置環境,

服務器環境:CentOS7.6

MySQL版本:mysql-community-server-5.7.28-1

MyCat版本:Mycat-server-1.6.7.4-release-20200105164103-linux

mysql, master1:192.168.1.100

mysql, master2:192.168.1.101

mycat, mycat1: 192.168.1.102

5.2、安裝配置MyCat

wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

cd mycat

5.3、MyCat配置(最簡)

mycat主要配置 server.xml和schema.xml兩個即可。

這里需要注意:相應mysql用戶需要能其他服務器可訪問

-- 默認root用戶,其他機器無法訪問

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';

/conf/server.xml

123456

testdb

/conf/schema.xml

dbType="mysql" dbDriver="native">

select user()

dataHost標簽上屬性釋義:

balance:負載均衡類型

0:不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上

1:全部的readHost與stand by writeHost參與select語句的負載均衡,

2:所有讀操作都隨機在writeHost、readHost上分發

3:所有讀請求隨機分發到writeHost對應的readHost執行,writeHost不負擔讀壓力

writeType:負載均衡類型

0:所有寫操作發送到配置的第一個writeHost,當第一個writeHost宕機時,切換到第二個writeHost,重新啟動后以切換后的為準,切換記錄在配置文件:dnindex.properties中

1:所有寫操作都隨發送到配置的writeHost

2:尚未實現

switchType:切換方式

-1:不自動切換

1:自動切換(默認)

2:基于MySql主從同步的狀態來決定是否切換

5.4、啟動MyCat

./bin/mycat start

查看日志

logs目錄下 有 mycat.log switch.log wrapper.log

5.5、驗證MyCat

驗證方式:

通過mycat端口8066連接mysql, 插入記錄,期望記錄ID為奇數;

然后停掉192.168.1.100上mysql服務,然后再插入記錄,期望記錄ID為偶數;

第一步:插入3條記錄

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat1');

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat2');

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat3');

mysql> select * from `testdb`.`t_user`;

+----+--------+

| id | name |

+----+--------+

| 1 | jack |

| 3 | rose |

| 4 | tony |

| 6 | alice |

| 7 | mycat1 |

| 9 | mycat2 |

| 11 | mycat3 |

+----+--------+

7 rows in set (0.00 sec)

ID都是奇數,說明請求在master1上

第二步:停止master1,再插入3條記錄

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat4');

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat5');

mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat6');

mysql> select * from `testdb`.`t_user`;

+----+--------+

| id | name |

+----+--------+

| 1 | jack |

| 3 | rose |

| 4 | tony |

| 6 | alice |

| 7 | mycat1 |

| 9 | mycat2 |

| 11 | mycat3 |

| 12 | mycat4 |

| 14 | mycat5 |

| 16 | mycat6 |

+----+--------+

10 rows in set (0.00 sec)

ID都是偶數,說明請求都在master2

至此MyCat驗證完畢

5.7、通過Keepalived配置MyCat高可用

實驗環境:

服務器環境:CentOS7.6

MySQL版本:mysql-community-server-5.7.28-1

MyCat版本:Mycat-server-1.6.7.4-release-20200105164103-linux

mysql, master1:192.168.1.100

mysql, master2:192.168.1.101

mycat, mycat1: 192.168.1.103

mycat, mycat2: 192.168.1.104

虛擬mycat-IP(VIP): 192.168.1.105

基于上面mysql雙主和mycat配置(mycat1,mycat2配置完全相同)

驗證方式:

通過連接 192.168.1.105:8066 訪問MySQL服務,通過切換關閉mycat1、mycat2服務,驗證mycat的高可用性。

5.8、附,mycat的keepalived配置

mycat1-keepalived配置,(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYCAT_HA

}

vrrp_instance VI_1 {

state MASTER

interface p4p1

virtual_router_id 53

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.105/24

}

}

virtual_server 192.168.1.105 8066 {

delay_loop 6

protocol TCP

real_server 192.168.1.103 8066 {

notify_down "kill -9 $(cat /var/run/keepalived.pid)"

TCP_CHECK {

connect_port 8066

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

mycat2-keepalived配置,(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYCAT_HA

}

vrrp_instance VI_1 {

state BACKUP

interface p4p1

virtual_router_id 53

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.105/24

}

}

virtual_server 192.168.1.105 8066 {

delay_loop 6

protocol TCP

real_server 192.168.1.104 8066 {

notify_down "kill -9 $(cat /var/run/keepalived.pid)"

TCP_CHECK {

connect_port 8066

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

六、雙主雙從讀寫分離

dbType="mysql" dbDriver="native">

select user()

七、附,其他一些配置參考

mycat-server.xml

123456

testdb

keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id web1

vrrp_skip_check_adv_addr

# vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script check_mycat {

script "/etc/keepalived/mycat_check.sh"

interval 2

weight 2

}

vrrp_instance VI_1 { //實例,定義虛擬路由

state MASTER //節點的初始狀態,主為master,備為backup

interface ens160 //綁定虛擬ip的網絡接口,必須與本地ip所在接口相同

virtual_router_id 51 //虛擬路由id號,兩個節點必須一樣

priority 100 //節點優先級,master要比backup高

advert_int 1 //兩個節點發送組播信息間隔時間,主備需要設置相同的時間,默認為秒

authentication { //配置認證

auth_type PASS //PASS即為密碼認證

auth_pass 1111 //設置密碼,可自定義

}

track_script {

check_mycat

}

virtual_ipaddress { //設置虛擬ip(VIP),兩個節點需要一樣

192.168.1.105

}

}

------------------

mycat_check.sh

#!/bin/bash

result=`nc -v -z $1 $2`

flag="succeeded"

if [[ $result =~ $flag ]]

then

exit 0

else;

exit 1

fi

mycat_check.sh

#!/bin/bash

result=`nc -v -z $1 $2`

flag="succeeded"

if [[ $result =~ $flag ]]

then

exit 0

else;

exit 1

fi

八、其他MySQL高可用方案

1.MGR(MySQL Group Replication、Galera Cluster,MySQL Cluster、PXC(Percona XtraDB Cluster)

2.客戶端解決方案(應用層):TDDL、 Sharding-Jdbc (常用shardding-jdbc)

3.中間件解決方案(代理層):mysql proxy、mycat、altas ,ProxySQL

4.Canal,Otter

九、相關參考

總結

以上是生活随笔為你收集整理的高可用mysql笔记_MySQL笔记-高可用方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。