Mysql Innodb 集群

mysql Innodb 集群(Ubuntu20.4操作系统,mysql8.0)

主要参考地址Mysql Innodb cluster集群搭建 - 小时候挺菜 - 博客园

创建了四台虚拟机,一台用来负责管理,另外三台是主从节点,一个主,两个从。

管理节点安装mysql-shell和mysql-router,主从节点三个均安装mysql和mysql-shell

后期名称都改为:manager,master和slave1,slave2

本次操作均使用root最高权限

需要注意将每个服务器的hostname进行修改,分别修改成manager,master和slave1,slave2

在配置mysql的配置文件时,配置内容需要和这里的名称一致

sudo hostnamectl set-hostname 名字

一、更新源

vim /etc/apt/sources.list

#Ubuntu 20.04
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

sudo apt-get update

二、更改服务器系统时间

# 查看时区
date -R
# 默认 Sun, 23 Aug 2020 14:21:29 +0000
# +0800 表示相对于UTC标准时间多了8小时0分0秒, +0000 表示是UTC时间
# 我们应该用+0800

# 查看服务器时间
date "+%Y-%m-%d %H:%M:%S"

# 服务器时间,输入命令进行选择,全部输入数字即可(选择的数字可能会有变动,请根据实际情况变通)
# 4. Asia (亚洲)
# 9. China (中国)
# 1. Beijing Time (北京时间)
# 1. Yes (确认)
tzselect

# 复制生成的配置文件到 /etc/localtime生效
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 再次查看是否生效
date "+%Y-%m-%d %H:%M:%S"

三、安装mysql8.0(Ubuntu20.4默认安装mysql的版本为8.0)

# 安装mysql
sudo apt-get install -y mysql-server
# 初始化设置
sudo mysql_secure_installation
# 输入命令进行选择
# N(选择N,不会继续拿给你密码的强制校验)
# 123456(输入密码。根据实际情况设置)
# 123456(重复输入)
# N(选择N,不删除匿名用户)
# N(选择N,允许root远程连接)
# N(选择N,不删除test数据库)
# Y(选择Y,修改权限立即生效)

如图:

四、添加MySQL APT 存储库

# 进去链接地址下载文件包 https://dev.mysql.com/downloads/repo/apt/
# 参考的文档地址(https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#apt-repo-setup)
sudo dpkg -i /PATH/version-specific-package-name.deb (/PATH/version-specific-package-name.deb为下载的文件名)
sudo apt-get update
sudo apt-get install mysql-apt-config
sudo apt-get install mysql-shell

五、环境准备(所有服务器都要操作)

1.关闭防火墙

1.关闭防火墙,关闭方法因系统不同,所以不列出

2.关闭selinux(Centos),关闭方法因系统不同,所以不列出

2.修改/etc/hosts文件

将四台服务器的ip分别映射成manager,master和slave1,slave2

# 注意本服务器的127.0.0.1可能会出现多条变量,只需要保留127.0.0.1 localhost
# 直接执行以下命令
cat>>/etc/hosts <<EOF
192.168.1.111 manager
192.168.1.129 master
192.168.1.130 slave1
192.168.1.131 slave2
EOF

3.优化配置

提示:未明白其中含义,只是根据网上文档进行了一样的配置

cat>>/etc/sysctl.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 681574400
kernel.shmmax = 137438953472
kernel.shmmni = 4096
kernel.sem = 250 32000 100 200
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
EOF

sysctl -p

cat>>/etc/security/limits.conf <<EOF
mysql soft nproc 65536
mysql hard nproc 65536
mysql soft nofile 65536
mysql hard nofile 65536
EOF

cat>>/etc/pam.d/login <<EOF
session required /lib/security/pam_limits.so
session required pam_limits.so
EOF

cat>>/etc/profile<<EOF
if [ $USER = "mysql" ]; then
ulimit -u 16384 -n 65536
fi
EOF

source /etc/profile

六、设置mysql的密码以及操作权限(所有服务器都要操作)

mysql -uroot -p(默认安装时没有密码,直接回车进入)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
flush privileges;

七、主节点服务器

修改/etc/mysql/mysql.conf.d/mysqld.cnf

# 增加内容
bind-address            = 0.0.0.0(将原来的127.0.0.1修改)
default-time_zone = '+8:00'
sql_mode=''

#复制框架
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
max_connections=200
max_allowed_packet=16M

#组复制设置
#server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
transaction_write_set_extraction=XXHASH64
#告知插件加入或创建组命名,UUID
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
#server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_start_on_boot=off
#告诉插件使用IP地址,端口33061用于接收组中其他成员转入连接
loose-group_replication_local_address="master:33061"
#启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
loose-group_replication_group_seeds="master:33061,slave1:33061,slave2:33061"
loose-group_replication_ip_whitelist="master,slave1,slave2,manager"
loose-group_replication_bootstrap_group=off
# 使用MGR的单主模式
loose-group_replication_single_primary_mode=on
loose-group_replication_enforce_update_everywhere_checks=off
disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE

八、创建cluster集群

1.进到master的服务器,登陆mysql-shell

mysqlsh
shell.connect('root@localhost:3306');
# 连接成功后
# 配置实例
dba.configureLocalInstance();
# 此时会让选择创建管理cluster的用户,我选1,使用root管理,并且允许远程登陆“%”
# 接着查看实例状态
dba.checkInstanceConfiguration("root@localhost:3306");

# 出现以下内容,表示配置成功
You can now use it in an InnoDB Cluster.
{
    "status": "ok"
}

2.进到manager的服务器,登陆mysql-shell,连接master,创建cluster

mysqlsh
# 连接01
shell.connect('root@master:3306');
# 创建一个 cluster,命名为 'myCluster',命名可自定义,并复制给变量cluster,后边根据此变量进行操作
var cluster = dba.createCluster('myCluster'); 
# 创建成功后,查看cluster状态
cluster.status();
# 创建后,可以看到master已经添加进cluster,并且状态是读写
{
    "clusterName": "myCluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "master:3306",
        "status": "OK_NO_TOLERANCE",
        "statusText": "Cluster is NOT tolerant to any failures.",
        "topology": {
            "master:3306": {
                "address": "master:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            }
        }
    }
}

3.进到slave1的服务器,添加slave1节点,和上面一样的方法,先安装好mysql和mysql-shell

注意

配置文件/etc/mysql/mysql.conf.d/mysqld.cnfserver_id需要改成 server_id=2

同时 loose-group_replication_local_address="slave1:33061"

# 登陆shell,执行配置
mysqlsh
shell.connect('root@localhost:3306');
dba.configureLocalInstance();

# 在/etc/mysql/mysql.conf.d/mysqld.cnf增加
loose-group_replication_allow_local_disjoint_gtids_join=ON

# 重启mysql后,通过manager节点的shell,将slave1添加到cluster:
# 添加实例
cluster.addInstance('root@slave1:3306');
# 创建成功后,查看cluster状态
cluster.status();
# 成功后状态:
{
    "clusterName": "myCluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "master:3306",
        "status": "OK_NO_TOLERANCE",
        "statusText": "Cluster is NOT tolerant to any failures.",
        "topology": {
            "master:3306": {
                "address": "master:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "slave1:3306": {
                "address": "slave1:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            }
        }
    }
}

4.添加slave2节点

和slave1一样,添加slave2节点,注意server_id和loose-group_replication_local_address需要修改成3和slave2:33061

九、安装mysqlrouter

# 在manager节点上,安装router
sudo apt-get install -y mysql-router
# 执行命令
mysqlrouter --bootstrap root@master:3306 -d /etc/mysqlrouter/myrouter --user=root
Please enter MySQL password for root: 
# 这里会在etc目录下产生mysqlrouter 目录, 并生成router配置文件,默认通过route连接mysql后, 6446端口连接后可以进行读写操作. 6447端口连接后只能进行只读操作.
# 然后启动mysql-route
./start.sh(我在mysqlrouter执行的)

# 查看route进程
ps -ef|grep myroute
netstat -tunlp

# 这样就可以使用MySQL客户端连接router了.  下面验证下连接router: 
a) 管理节点本机mysql-shell连接:
mysqlsh --uri root@localhost:6446
b) 管理节点本机mysql连接:
mysql -u root -h 127.0.0.1 -P 6446 -p
c) 远程客户机通过route连接mysql
mysql -u root -h manager_ip -P 6446 -p

# 验证cluster集群
# 1.登陆后,新建一个表,往里面写进数据,查看从节点数据会不会同步;
# 2.关闭master的mysql服务,route将主节点自动切换到slave1,slave1从只读变为可读写,重新启动master mysql后,master变为只读模式。

十、备用参数

#无权查看集群状态
#查看创建的集群
cluster=dba.getCluster(); #获取当前集群
cluster.status(); #查看集群状态
查询节点名称()
mysql -uroot -p123456
stop group_replication;
delete from sakura.t1 where id>=121071;
SET GLOBAL group_replication_bootstrap_group = OFF;
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;

总结
以上就是今天要讲的内容,本文简单介绍了Mysql Innodb 集群的安装与使用,希望对您有所帮助。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的菜鸟玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值