Centos7 搭建MySQL8.0 MGR集群

1. 安装MySQL

1.1 MySQL 下载

1.2 安装MySQL8.0

在三个节点均执行以下操作:

  • 查看mariadb并移除
# 1、查看 mariadb 的安装包
rpm -qa | grep mariadb </pre>
# 2、卸载mariadb 需要管理员权限,否在会报错
rpm -e XXXXXX  --nodeps
# 3、再次查看
rpm -qa | grep mariadb
  • 安装mysql
# 1、在/usr/local(存放本地的共享资源)目录下创建mysql文件夹,通过ll查看目录结构
cd /usr/local
mkdir mysql
ll 
# 2、上传下载的mysql压缩包文件到mysql文件下
# 3、解压文件
tar -xvf mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar</pre>
# 4、安装common,libs, client,server
rpm -ivh mysql-community-common-8.0.23-1.el7.x86_64.rpm  --nodeps --force
rpm -ivh mysql-community-libs-8.0.23-1.el7.x86_64.rpm  --nodeps --force
rpm -ivh mysql-community-client-8.0.23-1.el7.x86_64.rpm  --nodeps --force
rpm -ivh mysql-community-server-8.0.23-1.el7.x86_64.rpm  --nodeps --force
# 5、检查mysql安装情况
rpm -qa | grep mysql

1.3 配置MySQL相关信息

# 1、初始化和配置mysql
mysqld --initialize;
chown mysql:mysql /var/lib/mysql -R;
systemctl start mysqld.service;
systemctl enable mysqld;
# 2、查看数据库密码
cat /var/log/mysqld.log | grep password
# 3、登录mysql密码直接复制粘贴上面随机的密码
mysql -uroot -p
# 4、修改mysql密码为123456
 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 5、进行远程访问的授权
create user 'root'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
# 6、修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
flush privileges;
exit; # 提出mysql登录

1.4 Navicat连接数据库

# 1、尝试用navicat连接数据库,但需要关闭firewall
systemctl stop firewalld.service;
systemctl disable firewalld.service;
systemctl mask firewalld.service;
# 2、安装 iptables 防火墙
 yum -y install iptables-services  
# 3、启动设置防火墙
systemctl enable iptables;
systemctl start iptables;
# 4、命令编辑防火墙 添加端口
vim /etc/sysconfig/iptables  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 33061 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 33062 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 33063 -j ACCEPT
# 5、重启防火墙使配置生效
systemctl restart iptables.service
# 6、设置防火墙开机启动
systemctl enable iptables.service 
# 7、ifconfig 命令查看 ip
使用navicat本地测试连接

2. 搭建MGR群

2.1 环境信息

  • 服务器基本信息
主机 操作系统 IP与HostName映射
服务器1 Centos7 172.20.10.14 node1.mgr.com
服务器2 Centos7 172.20.10.13 node2.mgr.com
服务器3 Centos7 172.20.10.2 node3.mgr.com
  • 设置hostname和ip映射信息
# 在三个节点每个虚拟机上均要配置
vi /etc/hosts
172.20.10.14  node1.mgr.com
172.20.10.13 node2.mgr.com
172.20.10.2  node3.mgr.com 
  • 修改mysql配置文件信息(三个节点均需配置)
    修改每个节点的配置,3个节点除了server_id、loose-group_replication_local_address参数不一样外,其他保持一致。注意:其中33061,33062,33063并非mysql服务端口号。
# 打开编辑配置文件
vim /etc/my.cnf
# 具体配置信息内容如下(以第一个节点为例):
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE

log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "node1.mgr.com:33061"
loose-group_replication_group_seeds= "node1.mgr.com:33061,node2.mgr.com:33062,node3.mgr.com:33063"
loose-group_replication_bootstrap_group=OFF

第二个节点修改内容如下:
server_id=2
loose-group_replication_local_address= "node2.mgr.com:33062"
第三个节点修改内容如下:
server_id=3
loose-group_replication_local_address= "node3.mgr.com:330</pre>

2.2 创建复制环境

  • 创建复制账号(三个节点均需配置)
# 设置复制账号
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER repl@'%' IDENTIFIED BY 'repl';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
  • 安装MGR插件
# 安装插件
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
-- 查看group replication组件
mysql> show plugins;

2.3 启动MGR单主模式

2.3.1 启动MGR
  • 主节点执行命令
# 1、启动MGR,在主库(172.20.10.14)上执行
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
# 2、查看MGR组信息
mysql> SELECT * FROM performance_schema.replication_group_members;

在 START GROUP_REPLICATION时,报错如下:
[Repl] Plugin group_replication reported: '[GCS] Error connecting to the local group communication engine instance.'
[Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'

解决措施如下:
1.关闭SELinux,不太安全,不特别推荐
setenforce 0
2.开放通讯端口(推荐)
yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 33061

  • 从节点执行命令
# 1、其他节点加入MGR,在从库(172.20.10.13,172.20.10.2)上执行
mysql> START GROUP_REPLICATION;
# 2、查看MGR组信息
mysql> SELECT * FROM performance_schema.replication_group_members;

此中方式在查看MGR组信息时,2个从节点状态一直处于RECOVING状态,通过cat /var/log/mysqld.log查看报错信息如下:
[ERROR] [MY-010584] [Repl] Slave I/O for channel 'group_replication_recovery': error connecting to master 'repl@node1.mgr.com:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
[ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.'
[ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'

解决措施如下:
mysql8.0之后加密规则变成 caching_sha2_password,需打开公钥访问(在每个从节点执行)
mysql> set global group_replication_recovery_get_public_key=on;
mysql> start group replication;
再次查看mgr信息
mysql>SELECT * FROM performance_schema.replication_group_members;

3个节点状态为online,并且主节点为node1.mgr.com,只有主节点可以写入,其他节点只读,MGR单主模式搭建成功。

2.3.2 简单测试
  1. node1.mgr.com上创建测试库、表,并添加数据,测试从库是否能同步数据;在从节点node2.mgr.com,node3.mgr.com写入数据是否可以写入。
# 1、在node1.mgr.com点执行
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');
# 2、在3个节点查看均可查看到相同结果均有数据表和数据
mysql> select * from test.t1;
# 3、在从节点测试写入,验证不支持写入操作
  1. node1.mgr.com上创建测试库、表,并添加数据,测试新节点接入到组中后,是否同步数据。
# 1、在node2.mgr.com上执行,从mgr组中去除
mysql> stop group_replication;
# 2、在node1.mgr.com或node3.mgr.com查看,仅剩2个节点
mysql> SELECT * FROM performance_schema.replication_group_members;
# 3、在node1.mgr.com进行写操作,此时查看node2.mgr.com数据库信息并没有信息同步
# 4、将node2.mgr.com加入mgr组,在node2.mgr.com执行,之后在查看信息,数据库信息已同步
mysql> start group_replication;

2.4 切换MGR模式(单到多,多到单)

2.4.1 切换多主模式

MGR切换模式需要重新启动组复制,在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。

# 1、停止组复制(所有节点执行):
mysql> stop group_replication;
mysql> set global group_replication_single_primary_mode=OFF;
mysql> set global group_replication_enforce_update_everywhere_checks=ON;

# 2、随便选择某个节点执行
mysql> SET GLOBAL group_replication_bootstrap_group=ON; 
mysql> START GROUP_REPLICATION; 
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

# 3、其他节点执行
mysql> START GROUP_REPLICATION; 

# 4、查看组信息,所有节点的 MEMBER_ROLE 都为 PRIMARY
mysql> SELECT * FROM performance_schema.replication_group_member

可以看到所有节点状态都是online,角色都是PRIMARY,MGR多主模式搭建成功。

2.4.1.1 简单测试
# 1、在任意节点均可执行写操作
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');
# 2、在3个节点查看均可查看到相同结果
mysql> select * from test.t1;

2.4.2 切换单主模式

# 1、所有节点执行
mysql> stop group_replication;
mysql> set global group_replication_enforce_update_everywhere_checks=OFF;
mysql> set global group_replication_single_primary_mode=ON;
# 2、主节点(172.20.10.14)执行
SET GLOBAL group_replication_bootstrap_group=ON; 
START GROUP_REPLICATION; 
SET GLOBAL group_replication_bootstrap_group=OFF;
# 3、从节点(172.20.10.13、172.20.10.2)执行
START GROUP_REPLICATION; 
# 4、查看MGR组信息
mysql> SELECT * FROM performance_schema.replication_group_members;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容