实验环境
主机名/IP | 角色 |
server01/192.168.1.201 | 主 |
server02/192.168.1.202 | 辅 |
server03/192.168.1.203 | 辅 |
ALL NODES
添加映射
vim /etc/hosts
192.168.1.201 server01
192.168.1.202 server02
192.168.1.203 server03
安装mysql存储库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
dpkg -i mysql-apt-config_0.8.32-1_all.deb
apt update -y
安装mysql
apt install mysql-server -y
注意:避免多主集群发生自动增量冲突的可能性,进行以下操作
vim /etc/mysql/mysql.conf.d/mysql.conf
如果是在单主模式:
[mysqld]
auto_increment_increment = 1;
auto_increment_offset = 2;
如果是在多主模式,但是少于7个的时候:
[mysqld]
auto_increment_increment = 7
auto_increment_offset = 1 + server_id % 7
如果是在多主模式,大于7个时:
[mysqld]
auto_increment_increment = 实例数
auto_increment_offset = 1 + server_id % 实例数
配置允许外部访问mysql
[mysqld]
bind-address=0.0.0.0
重启服务
systemctl restart mysql
安装mysql shell
apt install mysql-shell -y
使用mysql shell连接mysql
mysqlsh mysql://root@localhost:3306
进入js模式查询已连接数据库信息
\js
session;
shell.status();
\quit
执行mysql指令可以使用:
\sql mysql指令
创建集群服务配置账户
mysqlsh mysql://root@localhost:3306
\js
dba.configureInstance('root@localhost:3306',{clusterAdmin:"'clusteradmin'@'%'"});
检查实例是否符合集群要求
dba.checkInstanceConfiguration('clusteradmin@localhost:3306');
server01
创建一个名为testCluster的集群
mysqlsh -u clusteradmin -p
\js
var cluster = dba.createCluster('testCluster')
Tips:这一步之后也可以使用变量cluster调用 setupAdminAccount("用户名") 来创建集群管理员账户
查看集群信息
cluster.status()
将其他两个实例添加到集群
cluster.addInstance('clusteradmin@192.168.1.202:3306')
cluster.addInstance('clusteradmin@192.168.1.203:3306')
Tips:配置集群的时候可以增加参数memberWeight来定义选举主节点的权重,百分比越高越有可能被选择为单主集群中的主节点
var cluster = cluster.createCluster('testCluster',{memberWeight:35})
cluster.addInstance('clusteradmin@192.168.1.202:3306',{memberWeight:25})
从其他节点验证
mysqlsh -u root -p -h 192.168.1.202
\js
var cluster = dba.getCluster('testCluster')
cluster.status()
拓展
重置集群
dba.rebootClusterFromCompleteOutage(instance)
更新集群元数据
cluster.rescan()
强制将某个成员提升成主节点
cluster.setPrimaryInstance(instance)
切换集群模式
#切换成多主
cluster.switchToMultiPrimaryMode(instance)
#切换成单主
cluster.switchToSinglePrimaryMode(instance)
从集群中删除节点
cluster.removeInstance(instance)
解散集群
cluster.dissolve()