Mysql8.0高可用部署

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

准备

主机ip hosts解析 安装程序
192.168.102.212 mgr01 mysql、mgr、Proxysql、keepalived
192.168.102.213 mgr02 mysql、mgr、Proxysql、keepalived
192.168.102.68 mgr03 mysql、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>  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值