greatsql mysql shell router Linux教程


https://downloads.mysql.com/archives/shell/

https://downloads.mysql.com/archives/router/


mysql shell 

cd /data/site/htmltoo.f/htmltoo.shell/mysql-shell-8.0.25-linux-glibc2.12-x86-64bit/bin/

./mysqlsh root@127.0.0.1:3301 --password=wdqdmm@r


-本地节点

dba.configureLocalInstance()


-检查cluster各个节点是否可用

dba.checkInstanceConfiguration("172.18.0.11:3306");

dba.checkInstanceConfiguration("172.18.0.12:3306");

dba.checkInstanceConfiguration("172.18.0.13:3306");

dba.checkInstanceConfiguration("172.18.0.14:3306");

-配置集群

dba.configureInstance("root@172.18.0.11:3306");

dba.configureInstance("root@172.18.0.12:3306");

dba.configureInstance("root@172.18.0.13:3306");

dba.configureInstance("root@172.18.0.14:3306");

-查看集群状态

shell.connect("172.18.0.11:3306");

shell.connect("172.18.0.12:3306");

shell.connect("172.18.0.13:3306");

shell.connect("172.18.0.14:3306");


-创建集群(默认)

var cluster = dba.createCluster('cluster'); 

-创建集群(多主集群)

var cluster = dba.createCluster('cluster', {'localAddress': '172.18.0.11', 'multiPrimary': true, 'force': true})

-如果现有MGR集群想要搭建InnoDB Cluster的话,可以通过dba.createCluster() 添加adoptFromGR参数,搭建的Cluster基于MGR是否为单写,因此使用adoptFromGR的同时无法使用multiPrimary选项。

var cluster = dba.createCluster('cluster', {adoptFromGR: true});

#获取集群对象

var cluster = dba.getCluster('cluster')

将另外添加进入: 

cluster.addInstance('root@172.18.0.12:3306'); 

cluster.addInstance('root@172.18.0.13:3306'); 

cluster.addInstance('root@172.18.0.14:3306'); 

-查看状态 为ONLINE 说明集群安装成功:

cluster.status()


--集群节点状态

- ONLINE       - 节点状态正常。

- OFFLINE      - 实例在运行,但没有加入任何Cluster。

- RECOVERING   - 实例已加入Cluster,正在同步数据。

- ERROR        - 同步数据发生异常。

- UNREACHABLE  - 与其他节点通讯中断,可能是网络问题,可能是节点crash。

- MISSING      - 节点已加入集群,但未启动group replication


-会列出集群维护的指令
dba.help();
-列出详细指令的用法
dba.help('deploySandboxInstance')
# 日常使用的几个重要命令 (mysqlsh的JS语法)
dba.checkInstanceConfiguration("root@172.18.0.12:3306")     #检查节点配置实例,用于加入cluster之前
dba.rebootClusterFromCompleteOutage('cluster');        #重启 
var cluster = dba.rebootClusterFromCompleteOutage('cluster')     #重启集群	
dba.dropMetadataSchema();     #删除schema,删除集群元数据,当它无法恢复集群。无法撤消。
var cluster = dba.getCluster('cluster')                #获取当前集群
cluster.checkInstanceState("root@172.18.0.12:3306")         #检查cluster里节点状态
cluster.rejoinInstance("root@172.18.0.12:3306")             #重新加入节点,我本地测试的时候发现rejoin一直无效,每次是delete后
cluster.dissolve({force:true})                   #删除集群
cluster.addInstance("root@172.18.0.12:3306")                #增加节点
cluster.removeInstance("root@172.18.0.12:3306")             #删除节点
cluster.removeInstance('root@172.18.0.12:3306',{force:true})    #强制删除节点
cluster.dissolve({force:true})                          #解散集群
cluster.describe();                                 #集群描述
cluster.setPrimaryInstance('172.18.0.12:3306')           #切换指定主节点
-切换到多主模式	
cluster.switchToMultiPrimaryMode()
-切换到单主模式	
cluster.switchToSinglePrimaryMode('root@172.27.8.2:3306')
-更改集群设置	
cluster.setOption('Cluster','cluster')
-更改集群实例设置	
cluster.setInstanceOption('root@172.27.8.2:3306', 'exitStateAction', 'READ_ONLY')
# 节点服务器重启后未加入集群(重新加入集群)(多出现主节点)
-如果查询节点状态为:
 "status": "(MISSING)"
-重新加入命令
shell.connect("root@172.18.0.11:3306");
var cluster = dba.getCluster();
cluster.rejoinInstance("root@172.18.0.11:3306")
cluster.rejoinInstance("root@172.18.0.12:3306")
-如果rejoinInstance失败,提示remove重新添加如下:
cluster.removeInstance('root@172.18.0.12:3306');
cluster.addInstance('root@172.18.0.12:3306');
# 集群中所有服务器重启,所有节点都offline,直接获取集群信息失败
-查询数据库
SELECT * FROM performance_schema.replication_group_members;
-仅显示单机 'MEMBER_STATE' = 'offline'
-使用
SELECT clusters.cluster_id,clusters.cluster_name from mysql_innodb_cluster_metadata.clusters;
-查找集群名称
-恢复集群
+------------+--------------+
| cluster_id | cluster_name |
+------------+--------------+
|          1 | Cluster    |
+------------+--------------+
-指令如下:
shell.connect("root@172.18.0.11:3306");
dba.rebootClusterFromCompleteOutage('cluster');
---停止集群
\sql
stop group_replication;
# 查看线程列表
MySQL  172.16.16.10:3306 ssl  JS > \sql show processlist;


---节点重启后,如果未加入集群,执行下面代码加入

mysqlsh --uri root@172.16.9.51:3306

dba.rebootClusterFromCompleteOutage(cluster)

var cluster = dba.getCluster();

cluster.rescan()


---集群所有节点发生重启

--当集群的所有节点都offline,直接获取集群信息失败,如何重新恢复集群

var cluster=dba.getCluster('cluster')

Dba.getCluster: This function is not available through a session to a standalone instance (RuntimeError)

dba.rebootClusterFromCompleteOutage('cluster')


--问题1

cluster=dba.getCluster(cluster);
Dba.getCluster: An open session is required to perform this operation. (RuntimeError)

-需要先连接到集群实例

shell.connect("root@127.0.0.1:3301");

--问题2

metadata exists, instance belongs to that metadata, but GR is not active

Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active) (RuntimeError)

-此时可尝试重启集群:

dba.rebootClusterFromCompleteOutage(cluster);

-若依然不能解决,则使用cmd方式登录MySQL,然后启动该节点的group replication:

stop group_replication;

set global group_replication_bootstrap_group=on;

start group_replication;

set global group_replication_bootstrap_group=off;

--问题3

metadata exists, instance does not belong to that metadata, and GR is not active

-调用\connect连接到某个从节点,然后var cluster = dba.getCluster()时报:

Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance does not belong to that metadata, and GR is not active) (RuntimeError)

-此时可删除从节点元数据,重新加入集群中:

dba.dropMetadataSchema();

-执行过程中会报一个ERROR,提示是否禁用super_reade_only,输入y即可。

-对于非当前节点报的此错误,首先要\connect连接到错误节点。


mysql-router

cd  /data/site/htmltoo.f/htmltoo.shell/mysql-router-8.0.25-linux-glibc2.12-x86_64/bin

./mysqlrouter --bootstrap root@127.18.0.11:3306 --user=root

---只需要在第一台机器安装mysqlrouter:

rpm -ivh mysql-router-8.0.25-1.el7.x86_64.rpm --nodeps --force 

vim /etc/mysqlrouter/mysqlrouter.conf

-设置连接数: max_connections=1024 

[DEFAULT] 

logging_folder = /var/log/mysqlrouter/ 

plugin_folder = /usr/lib64/mysqlrouter 

runtime_folder = /var/run/mysqlrouter 

config_folder = /etc/mysqlrouter 

[logger] 

level = INFO 

-目前就支持两种 : read-write 和 read-only

-read-write:用于高可用,用于可读可写

-read-only:用于负载均衡,只读

-当一台Master出现故障后另外一台Master或者Slave接管

[routing:ro]
bind_address = 0.0.0.0
bind_port=7001
destinations =172.25.9.1:3306,172.25.9.3:3306,172.25.9.4:3306
routing_strategy = round-robin
[routing:rw]
bind_address=0.0.0.0
bind_port=7002
destinations=172.25.9.1:3306,172.25.9.3:3306,172.25.9.4:3306
routing_strategy = first-available
[routing:read_write] 
bind_address = 10.4.3.66 
bind_port = 7001 
mode = read-write 
destinations = vm001:3306,vm002:3306,vm003:3306
protocol=classic 
max_connections=1024 
[routing:read_only] 
bind_address = 10.4.3.66
bind_port = 7002 
mode = read-only 
destinations = vm001:3306,vm002:3306,vm003:3306 
protocol=classic 
max_connections=1024 
[keepalive] 
interval = 60

#重启mysqlrouter

systemctl restart mysqlrouter 

#设置mysqlrouter开机自启

systemctl enable mysqlrouter


-配置Router

./mysqlrouter --bootstrap root@127.18.0.11:3306 --account=mysqlrouter --user=root

vim /etc/mysqlrouter/mysqlrouter.conf

mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf


-测试集群   

1、宕掉主节点A后,会从另外两个中选择出一个作为主节点,且A恢复后,不会成为主节点。   

2、使用客户端工具Navicat可以连接路由节点,IP:192.168.7.121,端口7001,用户名密码与实例节点一致。   

3、JavaWeb应用程序,连接路由节点,且任意宕掉其中一个或两个实例节点后,应用程序不受影响。

4、在第一台机器创建一个数据库,其余两台会自动创建这个数据库


keepalived

yum install  -y keepalived

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak


vim /etc/keepalived/keepalived.conf

# MASTER节点
global_defs {
   router_id MYSQL_ROUTER					# 各节点统一ID
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_mysqlrouter {
    script "/usr/bin/killall -0 /usr/bin/mysqlrouter"	# 检测mysqlrouter是否在运行
    interval 2
    weight 2
    fall 2
}
vrrp_instance VI_1 {
    state MASTER					# 主节点
    interface ens192			# VIP绑定的网卡
    virtual_router_id 33	# 各节点统一的虚拟ID
    priority 102					# 数越高优先级越高
    advert_int 1					# 检测间隔 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.7.33			# VIP
    }
    track_script {
        check_mysqlrouter	# 检测脚本
    }
}
# BACKUP节点(不同的配置)
    state BACKUP					# 备节点
    priority 101					# 数值低于MASTER


systemctl restart keepalived


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回