首页 > 数据库 >Mysql8.0高可用部署

Mysql8.0高可用部署

时间:2024-04-08 09:03:46浏览次数:13  
标签:group 可用 部署 proxysql 192.168 MEMBER replication Mysql8.0 mysql

Mysql8.0高可用部署

前言

目前是三台服务器,每台服务器部署mysql、mgr、proxysql、keepalived,mysql8.0是通过mgr的方式来实现mysql服务的高可用,实现故障自动检测及自动切换,发生故障时能自动切换到新的主节点,但是当程序调用的mysql对应的服务宕机后,无法自动切换到正常服务上面,需要进行人工干预,为了解决这一问题,加入了proxysql,主要有两个作用,第一个作用实现简单的读写分离,缓解主数据库的压力,第二个作用当主mysql服务宕掉后,会自动识别新的主mysql,提供服务,但是这样的话,当Proxysql宕掉的话,也无法提供服务,所以加入keepalived对proxysql做高可用,从而实现MySQL的高可用部署。

部署环境及版本

系统版本:CentOS Linux release 7.9.2009
Mysql版本:8.0.26
ProxySQL版本:2.2.0-1
Keepalived版本:v1.3.5

准备

主机iphosts解析安装程序
192.168.102.212mgr01mysql、mgr、Proxysql、keepalived
192.168.102.213mgr02mysql、mgr、Proxysql、keepalived
192.168.102.68mgr03mysql、mgr、Proxysql、keepalived

1、关闭自带防火墙,用iptables,添加hosts文件解析

# 关闭SELinux
setenforce 0 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 关闭Firewalld并禁止自启动
systemctl stop firewalld
systemctl disable firewalld

# 安装iptables
yum install -y iptables-services

# 启动iptables服务,并设置开机自启动(修改规则在/etc/sysconfig/iptables)
systemctl start iptables
systemctl enable iptables.service

# 通过/etc/hosts做域名解析
vim /etc/hosts

192.168.102.212 mgr01
192.168.102.213 mgr02
192.168.102.68 mgr03

2、时间同步

yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
timedatectl set-timezone Asia/Shanghai
ntpdate -u time.nist.gov
ntpdate -u time.nist.gov
date

一、Mysql的部署

1、据库安装目录

mkdir -pv /home/work/mysql/{data,logs,binlog}

2、据库错误日志文件

touch /home/work/mysql/logs/mysqlerr.log

3、mysql压缩包到/home/work目录下

tar xvf mysql-8.0.26-el7-x86_64.tar.gz -C /home/work

4、连接进入/home/work目录下,做软连接

ln -sv mysql-8.0.26-el7-x86_64 mysql

5、创建work用户,并给work目录赋予work用户权限

useradd work
cd /home
chown -R work.work work

6、配置环境变量

echo "export PATH=/home/work/mysql/bin:$PATH" >> /etc/profile
source /etc/profile

7、查看Mysql版本

mysql -V

8、初始化数据库

mysqld --initialize-insecure --user=work --basedir=/home/work/mysql --datadir=/home/work/mysql/data

9、修改配置文件

slave节点配置文件只需要把loose-group_replication_local_address和server_id改成对应的即可
可以使用uuidgen获取一个随机uuid作为复制组的名称。

cat > /etc/my.cnf << EOF
[mysqld]
user=work
datadir=/home/work/mysql/data
basedir=/home/work/mysql
port=3306
socket=/home/work/mysql/mysql.sock
pid-file=/home/work/mysql/mysqld.pid
log-error=/home/work/mysql/logs/mysqlerr.log
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=/home/work/mysql/logs/mysql-slow.log
long_query_time=2
symbolic-links=0
explicit_defaults_for_timestamp=1
default_authentication_plugin=mysql_native_password	#sqlproxy不支持caching_sha2_password,复制用户可以考虑使用,但是也仅限于此,客户端等配置比较麻烦

collation-server=utf8mb4_general_ci
character-set-server=utf8mb4
net_buffer_length=8k
myisam_sort_buffer_size=5M
max_connections=8192
wait_timeout=3600
interactive_timeout=43200
key_buffer_size=32M
max_connect_errors=500
sort_buffer_size=2M
join_buffer_size=2M
max_allowed_packet=48M
thread_cache_size=64
innodb_buffer_pool_size=11000M
innodb_flush_log_at_trx_commit=1
innodb_thread_concurrency=128
innodb_log_buffer_size=128M
innodb_log_file_size=100M
innodb_log_files_in_group=3
read_buffer_size=1M
read_rnd_buffer_size=2M
innodb_flush_method=O_DIRECT



#mysql group replication
log_bin=/home/work/mysql/binlog/mysqlbin
log_bin_index=/home/work/mysql/binlog/mysql-bin.index
binlog_format=row
sync_binlog=1
server_id=212
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="03f43914-7f38-4a00-919f-f748794c04ac"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="192.168.102.212:33061"
loose-group_replication_group_seeds="192.168.102.212:33061,192.168.102.213:33061,192.168.102.68:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=on
loose-group_replication_enforce_update_everywhere_checks= off
[mysql]
socket=/home/work/mysql/mysql.sock
#
#include all files from the config directory
#
!includedir /etc/my.cnf.d

EOF

10、将Mysql加入系统服务

cp /home/work/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld off

11、启动mysql服务

systemctl start mysqld
systemctl status mysqld.service

二、Mysql的MGR部署

1、所有节点更改主机名和hosts解析

hostnamectl set-hostname mgr01
cat >> /etc/hosts << EOF
192.168.102.212 mgr01
192.168.102.213 mgr02
192.168.102.68 mgr03
EOF

2、配置文件见上文

3、在所有主机创建复制用户并安装插件

[root@mgr01 home]# mysql
mysql> set sql_log_bin=0;
mysql> create user repluser@'%' identified by '123456'
mysql> grant replication slave on *.* to repluser@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> install plugin group_replication soname 'group_replication.so';
mysql> select * from information_schema.plugins where plugin_name='group_replication'\G
*************************** 1. row ***************************
           PLUGIN_NAME: group_replication
        PLUGIN_VERSION: 1.1
         PLUGIN_STATUS: ACTIVE
           PLUGIN_TYPE: GROUP REPLICATION
   PLUGIN_TYPE_VERSION: 1.4
        PLUGIN_LIBRARY: group_replication.so
PLUGIN_LIBRARY_VERSION: 1.10
         PLUGIN_AUTHOR: Oracle Corporation
    PLUGIN_DESCRIPTION: Group Replication (1.1.0)
        PLUGIN_LICENSE: GPL
           LOAD_OPTION: ON
# node2、node3步骤同node1 

4、启用第一个节点Primary(引导启动)

[root@mgr01 home]# mysql
mysql> set global group_replication_bootstrap_group=ON;
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=OFF;
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 8d574daf-2e59-11ed-8408-123456789617 | mgr01       |        3306 | ONLINE       | PRIMARY     | 8.0.26         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

5、启用剩余的所有节点Secondary

[root@mgr02 home]# mysql
mysql> change master to master_user='repluser',master_password='123456' for channel 'group_replication_recovery';
mysql> start group_replication;

[root@mgr03 home]# mysql
mysql> change master to master_user='repluser',master_password='123456' for channel 'group_replication_recovery';
mysql> start group_replication;

6、在所有节点都可以查看信息:

mysql>  select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+-
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | 
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+-
| group_replication_applier | 8d574daf-2e59-11ed-8408-123456789617 | mgr01       |        3306 | ONLINE       | PRIMARY     | 
| group_replication_applier | ca11236a-2e5b-11ed-867b-123456789618 | mgr02       |        3306 | ONLINE       | SECONDARY   | 
| group_replication_applier | f421aaf9-2e5c-11ed-b09c-123456789816 | mgr03       |        3306 | ONLINE       | SECONDARY   | 
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------

7、测试

(1) 主节点新增或删除数据库,其他节点查看
[root@mgr01 ~]# mysql
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.26 (ProxySQL)

Copyright (c) 2000, 2021, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| RUNOOB             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.02 sec)

mysql> drop database test;
Query OK, 1 row affected (0.23 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| RUNOOB             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

(2)停掉一个mysql主服务
[root@mgr01 ~]# mysql
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 8d574daf-2e59-11ed-8408-123456789617 | mgr01       |        3306 | ONLINE       | PRIMARY     | 8.0.26         |
| group_replication_applier | ca11236a-2e5b-11ed-867b-123456789618 | mgr02       |        3306 | ONLINE       | SECONDARY   | 8.0.26         |
| group_replication_applier | f421aaf9-2e5c-11ed-b09c-123456789816 | mgr03       |        3306 | ONLINE       | SECONDARY   | 8.0.26         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

[root@mgr02 ~]# mysql
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | ca11236a-2e5b-11ed-867b-123456789618 | mgr02       |        3306 | ONLINE       | PRIMARY     | 8.0.26         |
| group_replication_applier | f421aaf9-2e5c-11ed-b09c-123456789816 | mgr03       |        3306 | ONLINE       | SECONDARY   | 8.0.26         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------

#重新加入后
mysql> select * from performance_schema.replication_group_members; 
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 8d574daf-2e59-11ed-8408-123456789617 | mgr01       |        3306 | ONLINE       | SECONDARY   | 8.0.26         |
| group_replication_applier | ca11236a-2e5b-11ed-867b-123456789618 | mgr02       |        3306 | ONLINE       | PRIMARY     | 8.0.26         |
| group_replication_applier | f421aaf9-2e5c-11ed-b09c-123456789816 | mgr03       |        3306 | ONLINE       | SECONDARY   | 8.0.26         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

8、mysql主服务宕掉,重新加入操作(从服务同理)

[root@mgr01 ~]# systemctl start mysqld
[root@mgr01 ~]# mysql
mysql> change master to master_user='repluser',master_password='123456' for channel 'group_replication_recovery';
mysql> start group_replication;
mysql> select * from performance_schema.replication_group_members;  

注意: 正式环境正式环境很难这样直接加入,很可能slave执行的事务gtid与master不一致,因此就需要停机时间将宕机节点重新同步。如果直接加入的话,后面可以通过查看一张表记录来判断落后多少事务。这个是由ProxySQL需要的脚本创建的表,在部署完成后(addition_to_sys.sql文件执行完后)才可使用

select * from sys.gr_member_routing_candidate_status;

三、ProxySQL部署,读写分离及Mysql高可用实现

注:6032 是 ProxySQL 的管理端口号,6033 是对外服务的端口号。
/etc/init.d/proxysql #proxysql的启动控制文件
/etc/proxysql.cnf #proxysql配置文件

1、安装ProxySQL

yum install -y perl.x86_64
yum install -y libaio.x86_64
yum install -y net-tools.x86_64
yum install -y perl-DBD-MySQL
yum install -y gnutls
cd /server/tools
wget https://repo.proxysql.com/ProxySQL/proxysql-2.2.x/centos/7/proxysql-2.2.0-1-centos7.x86_64.rpm --no-check-certificate
rpm -ivh proxysql-2.2.0-1-centos7.x86_64.rpm

2、创建用户

在MySQL主库添加给ProxySQL使用的监控账号以及管理账号

CREATE USER 'monitor'@'%' IDENTIFIED BY "monitor@1025";
CREATE USER 'proxysql'@'%' IDENTIFIED BY "proxysql@1025";

GRANT ALL PRIVILEGES ON *.* TO 'monitor'@'%' ;
GRANT ALL PRIVILEGES ON *.* TO 'proxysql'@'%' ;
#GRANT USAGE,process,replication slave,replication client ON *.* TO 'monitor'@'%';
#GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO  'proxysql'@'%';

3、配置ProxySQL Cluster

在mgr01、mgr02、mgr03上都修改/etc/proxysql.cnf(修改了admin_variables段、proxysql_servers段、mysql_variables段),修改内容如下:

必要的话可以先备份一个proxysql.cnf文件,cp /etc/proxysql.cnf /etc/proxysql.cnf.bak

admin_variables=
{
	admin_credentials="admin:admin;cluster_demo:123456"
#	mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
	mysql_ifaces="0.0.0.0:6032"
        cluster_username="cluster_demo"
        cluster_password="123456"
        cluster_check_interval_ms=200
        cluster_check_status_frequency=100
        cluster_mysql_query_rules_save_to_disk=true
        cluster_mysql_servers_save_to_disk=true
        cluster_mysql_users_save_to_disk=true
        cluster_proxysql_servers_save_to_disk=true
        cluster_mysql_query_rules_diffs_before_sync=3
        cluster_mysql_servers_diffs_before_sync=3
        cluster_mysql_users_diffs_before_sync=3
        cluster_proxysql_servers_diffs_before_sync=3
#	refresh_interval=2000
#	debug=true
}

proxysql_servers =
(

    {
        hostname="192.168.102.212"
        port=6032
        comment="proxysql212"
    },

    {
        hostname="192.168.102.213"
        port=6032
        comment="proxysql213"
    },
    {
        hostname="192.168.102.68"
        port=6032
        comment="proxysql68"
    }
)

mysql_variables=
{
	threads=4
	max_connections=2048
	default_query_delay=0
	default_query_timeout=36000000
	have_compress=true
	poll_timeout=2000
#	interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
	interfaces="0.0.0.0:6033"
	default_schema="information_schema"
	stacksize=1048576
	server_version="8.0.26"
	connect_timeout_server=3000
# make sure to configure monitor username and password
# https://github.com/sysown/proxysql/wiki/Global-variables#mysql-monitor_username-mysql-monitor_password
	monitor_username="monitor"
	monitor_password="monitor@1025"
	monitor_history=600000
	monitor_connect_interval=60000
	monitor_ping_interval=10000
	monitor_read_only_interval=1500
	monitor_read_only_timeout=500
	ping_interval_server_msec=120000
	ping_timeout_server=500
	commands_stats=true
	sessions_sort=true
	connect_retries_on_failure=10
}

注意:
如果想要让proxysql.cnf文件里的配置在重启proxysql服务后生效(即想要让proxysql重启时读取并解析proxysql.cnf配置文件),则需要先删除/var/lib/proxysql/proxysql.db数据库文件,然后再重启proxysql服务。
这样就相当于初始化启动proxysql服务了,会再次生产一个纯净的proxysql.db数据库文件(如果之前配置了proxysql相关路由规则等,则就会被抹掉)。
如遇上本地proxysql管理连接不上,也需通过重建proxysql.db数据库文件解决。

4、删除proxysql.db库,并重启proxysql

mv  /var/lib/proxysql/proxysql.db  /var/lib/proxysql/proxysql.db.bak
systemctl restart proxysql

5、三个节点都确认一下(这步必须保证没问题,否则下面会有问题)

mysql -uadmin -p -h127.0.0.1 -P6032 --prompt='proxysql> '
proxysql> select * from runtime_proxysql_servers;
+-----------------+------+--------+-------------+
| hostname        | port | weight | comment     |
+-----------------+------+--------+-------------+
| 192.168.102.68  | 6032 | 0      | proxysql68  |
| 192.168.102.213 | 6032 | 0      | proxysql213 |
| 192.168.102.212 | 6032 | 0      | proxysql212 |
+-----------------+------+--------+-------------+

proxysql> select * from proxysql_servers;
+-----------------+------+--------+-------------+
| hostname        | port | weight | comment     |
+-----------------+------+--------+-------------+
| 192.168.102.212 | 6032 | 0      | proxysql212 |
| 192.168.102.213 | 6032 | 0      | proxysql213 |
| 192.168.102.68  | 6032 | 0      | proxysql68  |
+-----------------+------+--------+-------------+

proxysql> select * from stats_proxysql_servers_metrics;
+-----------------+------+--------+-------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| hostname        | port | weight | comment     | response_time_ms | Uptime_s | last_check_ms | Queries | Client_Connections_connected | Client_Connections_created |
+-----------------+------+--------+-------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| 192.168.102.68  | 6032 | 0      | proxysql68  | 92               | 430789   | 19168         | 0       | 0                            | 0                          |
| 192.168.102.213 | 6032 | 0      | proxysql213 | 4                | 80       | 13277         | 0       | 0                            | 0                          |
| 192.168.102.212 | 6032 | 0      | proxysql212 | 2                | 423872   | 19863         | 1       | 0                            | 1                          |
+-----------------+------+--------+-------------+------------------+----------+---------------+---------+------------------------------+----------------------------+


proxysql> select hostname,port,comment,Uptime_s,last_check_ms from stats_proxysql_servers_metrics;
+-----------------+------+-------------+----------+---------------+
| hostname        | port | comment     | Uptime_s | last_check_ms |
+-----------------+------+-------------+----------+---------------+
| 192.168.102.68  | 6032 | proxysql68  | 430829   | 3376          |
| 192.168.102.213 | 6032 | proxysql213 | 100      | 17441         |
| 192.168.102.212 | 6032 | proxysql212 | 423912   | 4022          |
+-----------------+------+-------------+----------+---------------+

注意:select * from runtime_proxysql_servers; 是要看下是否这三个几点都在里面    select * from stats_proxysql_servers_metrics;主要是看response_time_ms和Uptime_s,如果这两个参数有一个为零就存在问题,需要进行排查  

6、添加服务器列表

proxysql> insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.102.212',3306);
proxysql> insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.102.213',3306);
proxysql> insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.102.68',3306);
proxysql> load mysql servers to runtime;
proxysql> save mysql servers to disk;

7、在ProxySQL设置监控账号和应用账号

proxysql> set mysql-monitor_username='monitor';
proxysql> set mysql-monitor_password='monitor@1025';

proxysql> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('proxysql','proxysql@1025',1,10,1);

8、创建ProxySQL监控MGR视图

此操作需要在mysql的主库上执行,下面是8.0版本的视图与5.7视图不通用

USE sys;
 
DELIMITER $$
 
CREATE FUNCTION my_id() RETURNS TEXT(36) DETERMINISTIC NO SQL RETURN (SELECT @@global.server_uuid as my_id);$$
 
CREATE FUNCTION gr_member_in_primary_partition()
    RETURNS VARCHAR(3)
    DETERMINISTIC
    BEGIN
      RETURN (SELECT IF( MEMBER_STATE='ONLINE' AND ((SELECT COUNT(*) FROM
    performance_schema.replication_group_members WHERE MEMBER_STATE NOT IN ('ONLINE', 'RECOVERING')) >=
    ((SELECT COUNT(*) FROM performance_schema.replication_group_members)/2) = 0),
    'YES', 'NO' ) FROM performance_schema.replication_group_members JOIN
    performance_schema.replication_group_member_stats USING(member_id) where member_id=my_id());
END$$
 
CREATE VIEW gr_member_routing_candidate_status AS SELECT
sys.gr_member_in_primary_partition() as viable_candidate,
IF( (SELECT (SELECT GROUP_CONCAT(variable_value) FROM
performance_schema.global_variables WHERE variable_name IN ('read_only',
'super_read_only')) != 'OFF,OFF'), 'YES', 'NO') as read_only,
Count_Transactions_Remote_In_Applier_Queue as transactions_behind, Count_Transactions_in_queue as 'transactions_to_cert' 
from performance_schema.replication_group_member_stats where member_id=my_id();$$

9、设置读写组

主负责写、从负责读,当MGR主库切换后,代理自动识别主从。
ProxySQL代理每一个后端MGR集群时,都必须为这个MGR定义写组10、备写组20、读组30、离线组40

注意:max_transactions_behind 是设置延迟大小,可以给大点,建议去开个并行复制。

proxysql>  insert into mysql_group_replication_hostgroups (writer_hostgroup,backup_writer_hostgroup,reader_hostgroup, offline_hostgroup,active,max_writers,writer_is_also_reader,max_transactions_behind) values (10,20,30,40,1,1,0,100);
proxysql>  load mysql servers to runtime;
proxysql>  save mysql servers to disk;
proxysql>  load mysql users to runtime;
proxysql>  save mysql users to disk;
proxysql>  load mysql variables to runtime;
proxysql>  save mysql variables to disk; 

10、测试ProxySQL是否能自动识别MGR主从切换

手动重启重启主服务器,看是否read_only参数变成YES

proxysql>  select hostgroup_id, hostname, port,status from runtime_mysql_servers;
+--------------+-----------------+------+--------+
| hostgroup_id | hostname        | port | status |
+--------------+-----------------+------+--------+
| 10           | 192.168.102.212 | 3306 | ONLINE |
| 30           | 192.168.102.68  | 3306 | ONLINE |
| 30           | 192.168.102.213 | 3306 | ONLINE |
+--------------+-----------------+------+--------+

proxysql>  select hostname,port,viable_candidate,read_only,transactions_behind,error from mysql_server_group_replication_log order by time_start_us desc limit 6;
+-----------------+------+------------------+-----------+---------------------+-------+
| hostname        | port | viable_candidate | read_only | transactions_behind | error |
+-----------------+------+------------------+-----------+---------------------+-------+
| 192.168.102.68  | 3306 | YES              | YES       | 0                   | NULL  |
| 192.168.102.213 | 3306 | YES              | YES       | 0                   | NULL  |
| 192.168.102.212 | 3306 | YES              | NO        | 0                   | NULL  |
| 192.168.102.68  | 3306 | YES              | YES       | 0                   | NULL  |
| 192.168.102.213 | 3306 | YES              | YES       | 0                   | NULL  |
| 192.168.102.212 | 3306 | YES              | NO        | 0                   | NULL  |
+-----------------+------+------------------+-----------+---------------------+-------+

11、配置读写分离规则

proxysql>  insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)
VALUES (1,1,'^SELECT.*FOR UPDATE$',10,1),
(2,1,'^SELECT',30,1);
proxysql>  load mysql query rules to runtime;
proxysql>  save mysql query rules to disk;
proxysql>  load mysql servers to runtime;
proxysql>  save mysql servers to disk;
proxysql>  load mysql users to runtime;
proxysql>  save mysql users to disk;
proxysql>  load mysql variables to runtime;
proxysql>  save mysql variables to disk;

四、Keepalived部署proxysql高可用

1、安装keepalived和killall

yum install psmisc keepalived -y

2、将原来配置备份,参考下面进行配置

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

#指定proxysql服务检测脚本
vrrp_script chk_proxysql_port  {
script "/usr/bin/killall -0 proxysql"
interval 2 #脚本检测频率
weight -5 #脚本执行成功与否,权重怎么计算
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}


vrrp_instance VI_1 {
state MASTER
interface ens160 #节点IP的网卡
virtual_router_id 215 #同一个instance相同
priority 212 # 优先级,数值越大,优先级越高
advert_int 1
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass Hirain_ha_215
}
virtual_ipaddress { #VIP,自定的,和外网的IP要一个网段
192.168.102.15/24
}

track_script { #指定前面脚本的名字
chk_proxysql_port
}
}

注意:priority不能相同,state 另外一台可以设置为backup,其他配置一致即可 

3、启动keepalived,并查看ip

systemctl start keepalived.service
systemctl enable keepalived.service
[root@mgr02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 12:34:56:78:96:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.102.213/22 brd 192.168.103.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.102.15/24 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::ef48:def0:4499:80ef/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::37bf:4ad7:b805:198a/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::30ad:fb50:af40:6b75/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

4、连接vip进行测试

[root@mgr01 ~]# mysql -uproxysql -pproxysql@1025 -h192.168.102.15 -P6033
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 46
Server version: 8.0.26 (ProxySQL)

Copyright (c) 2000, 2021, 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>

标签:group,可用,部署,proxysql,192.168,MEMBER,replication,Mysql8.0,mysql
From: https://blog.csdn.net/qq_43510111/article/details/137491395

相关文章

  • SpringBoot热部署
    SpringBoot热部署方便开发环境热部署就是不需要停掉服务使修改的代码生效;原来的服务器是独立的,通过配置加载当前运行的项目,现在是内置的,受SpringBoot管控,是SpringBoot的一部分,不能感知到程序的变化了,所以使用一个工具,在spring容器中操作,监控tomcat容器的变化启动热部署的工具......
  • 项目部署的error
    将springboot3项目部署到阿里云服务器运行,发送邮件时报错CouldnotconnecttoSMTPhost:smtp.qq.com,port:25,response:-1原因阿里云服务器出于安全策略的考虑,主动屏蔽了服务器25端口,导致邮件服务无法正常使用。解决办法重新编写自定义JavaMailSenderImpl,并注册为Be......
  • 单节点部署K8S
    K使用Kubeadm搭建单节点安装前注意进行快照,方便多次安装练习。虚拟机基础信息系统:Ubuntu20.04.6LTS内核:5.15.0-67-generic硬盘:60G内存:12GCPU:4C4U本次安装参考博客地址:https://glory.blog.csdn.net/article/details/120606787安装前准备1.关闭防火墙systemctlstat......
  • Springboot计算机毕业设计财务报销微信小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,微信小程序作为一种新型的应用形态,以其便捷、高效的特点受到了广大用户的青睐。在高等教育领域,财务管理是学校运营中不......
  • Springboot计算机毕业设计博物馆预约小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化、数字化日益发展的今天,博物馆作为传承历史文化的重要场所,其管理和服务方式也在不断革新。传统的博物馆参观方式往往受限于开放时间、参观人......
  • 探究MySQL8.0驱动的加载
    探究MySQL8.0驱动的加载大家在连接mysql的时候,启动项目,会警告你推荐使用com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver那么这两者到底有什么区别呢本质区别:com.mysql.jdbc.Driver是mysql-connector-java5中的,需要手动加载驱动com.mysql.cj.jdbc.Driver是mysql......
  • 探究MySQL8.0驱动的加载
    探究MySQL8.0驱动的加载大家在连接mysql的时候,启动项目,会警告你推荐使用com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver那么这两者到底有什么区别呢本质区别:com.mysql.jdbc.Driver是mysql-connector-java5中的,需要手动加载驱动com.mysql.cj.jdbc.Driver是mysql-......
  • Redis的前世今生(内存管理、持久化、高可用、集群 详解)一看就懂
    Redis的诞生:    redis的诞生和mysql脱不了关系,在redis还未出现时,用户的每次请求都是直接访问mysql,渐渐的人们发现,请求大部分都是读操作,而且很多都是重复的数据,磁盘的i/o是很慢的,所以人们就想,能不能学学cpu建立的缓存机制,mysql也搞一个缓存,就这样一个基于内存的数据库......
  • JMeter-分布式压测部署与执行
    一、 主机\从机安装相同版本JDK1、openjdk压缩包解压到C盘,配置环境变量2、 cmd,执行检查是否安装成果:java -version 二、 主机\从机安装相同版本JMeter1、jmeter压缩包解压到C盘,配置环境变量2、  jmeter.bat,发送快捷方式到桌面3、 双击,是否打开成功4、 ......
  • H3C-V7防火墙透明部署案例(华三)
    1.配置需求如下组网图所示,在原有的网络中增加防火墙来提高网络安全性,但又不想对原有网络配置进行改动,所以需要防火墙采用透明模式部署;其中GigabitEthernet1/0/1接口接原有路由器的下联口,GigabitEthernet1/0/3接口接原有的交换机上联口。2.组网图3.配置步骤3.1配置连接路由......