innodb cluster入门配置

innodb cluster是基于mysql组复制,比主从复制要可靠。从mysql-5.7.17开始有这个功能。

mysqlrouter会配置两个端口,一个读写,一个只读,写入数据必须通过读写端口进行,然后集群会自己同步数据到只读服务器。

服务器信息:

主机名      IP地址              作用
node1 192.168.10.21    mysql-router
node2 192.168.10.22   读写实例
node3 192.168.10.23   只读实例1
node4 192.168.10.24   只读实例2

innodb cluster至少3个节点,1台读写,2台只读。

从mysql官网下载以下二进制软件包:
mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
mysql-shell-1.0.9-linux-glibc2.12-x86-64bit.tar.gz
mysql-router-2.1.3-linux-glibc2.12-x86-64bit.tar.gz

(一)配置主机名及hosts映射

1、配置主机名
依次为node1、node2、node3、node4 过程略

2、配置4台机器的hosts文件

192.168.10.21 node1
192.168.10.22 node2
192.168.10.23 node3
192.168.10.24 node4

3、关闭selinux和iptables(firewalld)

(二)初始化node2、node3、node4,3台机器操作一样
1、安装mysql,过程略。。。
注意:集群中mysql密码必须一致,否则创建集群会失败,因为这个问题,卡了我2天进度。
2、解压mysql-shell,初始化本地mysql为集群节点。

[root@node2 ~]# tar zxvf mysql-shell-1.0.9-linux-glibc2.12-x86-64bit.tar.gz

进入mysql-shell命令行
[root@node2 ~]# mysql-shell-1.0.9-linux-glibc2.12-x86-64bit/bin/mysqlsh
默认会用js配置方法去配置innodb cluster集群,支持sql语法,不过网上没找到资料,只有js配置方法。
mysql-js> dba.configureLocalInstance();
mysql-js> \q  # 这是退出mysql-shell命令行
mysql-js> \h  # 这是查看帮助,可以执行什么命令。

重启mysql服务生效。
配置另外2台机器。

(三)创建集群
配置完2、3、4后,我用node2节点创建集群。
node1执行:

[root@node1 ~]# mysql-shell-1.0.9-linux-glibc2.12-x86-64bit/bin/mysqlsh
mysql-js> shell.connect('root@node2:3306');
Please provide the password for 'root@node2:3306':
Creating a Session to 'root@node2:3306'
Classic Session successfully established. No default schema selected.
mysql-js>
mysql-js> dba.createCluster('st'); #创建一个名字为st的集群。
mysql-js> dba.help(); # 此命令可以看dba支持的函数
mysql-js> dba.getCluster();
<Cluster:st>
可以看到创建的集群

# 添加node3,node4节点
mysql-js> var cluster = dba.getCluster(); # 如果getCluster不加参数,默认取第一个集群。
mysql-js> cluster.addInstance('root@node3:3306');
会提示输入mysql密码
mysql-js> cluster.addInstance('root@node4:3306');
会提示输入mysql密码

# 查看集群状态
mysql-js> cluster.status();
{
    "clusterName": "st",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "node2:3306",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "node2:3306": {
                "address": "node2:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "node3:3306": {
                "address": "node3:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "node4:3306": {
                "address": "node4:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            }
        }
    }
}

(四)配置mysql-router
[root@node1 ~]# tar zxvf mysql-router-2.1.3-linux-glibc2.12-x86-64bit.tar.gz
[root@node1 ~]# mv mysql-router-2.1.3-linux-glibc2.12-x86-64bit /usr/local/
[root@node1 ~]# cd /usr/local/mysql-router/

[root@node1 mysql-router]# mkdir config   # 配置文件文件夹
[root@node1 mysql-router]# mkdir logs      # 日志文件夹

# 创建配置文件
[root@node1 mysql-router]# vi config/default.conf

[DEFAULT]
logging_folder = /usr/local/mysql-router/logs
plugin_folder = /usr/local/mysql-router/lib/mysqlrouter
runtime_folder = /usr/local/mysql-router/run

[logger]
level = INFO

[routing:read_write]
bind_address = 192.168.10.21
bind_port = 7001
mode = read-write
destinations = 192.168.10.22:3306
max_connections = 65535
max_connect_errors = 1000
client_connect_timeout = 3

[routing:read_only]
bind_address = 192.168.10.21
bind_port = 7002
mode = read-only
destinations = 192.168.10.23:3306,192.168.10.24:3306
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 3

[keepalive]
interval = 60

# 启动mysql router

nohup /usr/local/mysql-router/bin/mysqlrouter -c /usr/local/mysql-router/config/default.conf > /usr/local/mysql-router/nohup.out &

测试略。

PS:
innodb cluster 只支持innodb引擎,如果有其它引擎的表导入,会报错。
可以看看官方开发人员视频:http://lefred.be/content/mysql-innodb-cluster-mysql-shell-starter-guide/

评论关闭

jenkins控制台输出及系统管理中乱码

jenkins系统管理中报错:

提示:Your container doesn‘t use UTF-8 to decode URLs. If you use non-ASCII characters as a job name etc, this will cause problems. See Containers and Tomcat i18n for more details.

想修复这个问题,可以在 Tomcat 的服务器配置文件中添加 URIEncoding 属性。
这个文件在下面的路径中可以找到。
$TOMCAT_HOME/conf/server.xml

在Connector段中添加URIEncoding=”UTF-8″
<Connector port=”8080″ URIEncoding=”UTF-8″/>

如下图,重启tomcat即可。

评论关闭

zabbix 自定义脚本短信报警

zabbix版本:Zabbix 3.2.4

zabbix服务端:
# 定义脚本路径
编辑 /usr/local/zabbix/etc/zabbix_server.conf
修改:
AlertScriptsPath=/usr/local/zabbix/alertscripts

# 允许用root运行脚本,否则日志出现permission deny
AllowRoot=1
保存退出,重启zabbix_server

shell脚本内容:
#!/bin/bash
token=”123″
templateid=$2

curl “http://ops.xxx.com/admin/sms.php?id=$templateid&token=$token” >> /tmp/sms.log
保存到AlertScriptsPath目录下。
通过zabbix调用shell,触发短信接口发送短信。

zabbix web中配置:

1、添加媒体类型
“管理” -> “报警媒介类型” -> “创建媒体类型”

点击 “添加” 完成

2、添加用户报警媒介
“管理” -> “用户” -> 点击 “{用户名}”(我这里为admin) -> 选择”报警媒介” -> 点击 “添加”

点击”添加”,添加完成,点击 “更新” 保存

3、通过zabbix的”web监测”功能,如果场景步骤失败,就判断网站异常,发送报警短信。

 

 

 

 

 

这个地方一定要是Failed step of scenario 场景失败次数,否则根据状态码(Response code for step)判断,无法触发。N是失败次数,0为没有失败。
现在关闭www.rootop.org网站nginx服务,监测到无法连接。

再次开启nginx。配置 动作

这个地方的6是我短信接口模板的id(短信接口自己写的)

收到短信通知

 

 

评论关闭