8. 利用Ansible快速构建MGR | 深入浅出MGR
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本次介绍如何利用ansible一键安装GreatSQL并完成MGR部署。
本文介绍的运行环境是CentOS 7.9:
[root@greatsql ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@greatsql ~]# uname -a
Linux greatsql 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
准备好下面三台服务器:
IP | 端口 | 角色 |
---|---|---|
172.16.16.10 | 3306 | Primary |
172.16.16.11 | 3306 | Secondary |
172.16.16.12 | 3306 | Secondary |
1. 安装ansbile
直接用yum安装ansible即可:
[root@greatsql ~]# yum install -y ansible
查看版本号,确认安装成功:
[root@greatsql ~]# ansible --version
ansible 2.9.21
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
这就OK了。
2. 配置ansible
修改 /etc/ansible/hosts
文件,把要安装GreatSQL的服务器IP加进去,例如:
[greatsql_dbs:children]
greatsql_mgr_primary
greatsql_mgr_secondary
[greatsql_mgr_primary]
172.16.16.10
[greatsql_mgr_secondary]
172.16.16.11
172.16.16.12
如果是在本机安装,直接填写本机的内网IP地址或回环地址(127.0.0.1)均可。
上面这个主机列表,分为两个组,一个是选择作为MGR PRIMARY节点的组 greatsql_mgr_primary,只有一个主机。另一组选择作为SECONDARY节点 greatsql_mgr_secondary,有两个主机。两个组也可以合并一起,成为一个新的组 greatsql_dbs。
3. 建立ssh信任
为了简单起见,直接建立ssh信任,方便ansible一键安装。
首先生成ssh key
[root@greatsql ~]# ssh-keygen
使用缺省值,提示输入passphrase时,敲回车使用空的passphrase。
将ssh key复制到目标服务器上:
[root@greatsql ~]# ssh-copy-id root@172.16.16.10
按提示输入口令,完成后测试使用ssh登录不再提示输入口令。如果是在本机安装,那么ssh-copy-id也要对本机执行一遍。或者手动将ssh key复制到远程主机上,写到 ~/.ssh/authorized_keys 文件中(注意不要折行、断行)。
4. 测试ansible
随意执行一个指令,测试ansibile可连接远程主机:
[root@greatsql ~]# ansible greatsql_dbs -a "uptime"
172.16.16.10 | CHANGED | rc=0 >>
15:29:46 up 250 days, 19:40, 2 users, load average: 0.04, 0.08, 0.07
172.16.16.11 | CHANGED | rc=0 >>
15:29:46 up 303 days, 17:57, 3 users, load average: 0.10, 0.13, 0.13
172.16.16.12 | CHANGED | rc=0 >>
15:29:47 up 194 days, 18:08, 2 users, load average: 0.07, 0.13, 0.10
这就表示可以正常运行了。
5. 使用ansible自动安装GreatSQL
5.1 修改 /etc/hosts 设置正确的主机名
修改几个服务器上的 /etc/hosts 文件,加入正确的主机名配置:
[root@greatsql ~]# cat /etc/hosts
172.16.16.10 mgr1
172.16.16.11 mgr2
172.16.16.12 mgr3
5.2 下载GreatSQL-ansible安装包,解压缩
打开GreatSQL-Ansible项目主页:https://gitee.com/GreatSQL/GreatSQL-Ansible
找到页面右侧“发行版”,进入,选择 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal-centos7-ansible.tar.xz 这个二进制包下载到服务器上:
[root@greatsql ~]# cd /opt/greatsql/
[root@greatsql ~]# tar xf GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal-centos7-ansible.tar.xz
解压缩后,能看到除了 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz 安装包之外,还有GreatSQL-ansible一键安装相关文件:
[root@greatsql ~]# ls -la
-rw-------. 1 root root 333 Aug 11 15:22 check_mysql.yml
-rw-------. 1 root root 41817748 Aug 24 22:05 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz
-rw-------. 1 root root 91 Aug 25 10:43 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz.md5
-rw-------. 1 root root 5348 Aug 11 16:14 greatsql.yml
drwxr-xr-x. 3 root root 103 Aug 25 10:43 mysql-support-files
-rw-------. 1 root root 394 Aug 25 10:43 vars.yml
几个目录文件作用分别介绍下:
- GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz,GreatSQL二进制安装包。
- greatsql.yml,ansible一键安装脚本。
- check_mysql.yml,MySQL进程、端口预检查脚本。
- vars.yml,定义一些变量的脚本,里面的变量名有些需要修改以适应各自不同的安装环境。
- mysql-support-files,存放my.cnf模板,systemd服务文件等多个文件。
5.3 利用ansible安装GreatSQL
开始执行前,需要确认 vars.yml 文件中下面这些相关参数是否要调整:
work_dir: /opt/greatsql
extract_dir: /usr/local
data_dir: /data/GreatSQL
file_name: GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz
base_dir: /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal
my_cnf: /etc/my.cnf
mysql_user: mysql
mysql_port: 3306
mgr_user: repl
mgr_user_pwd: repl4MGR
mgr_seeds: '172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061'
wait_for_start: 60
下面是关于这些参数的解释
参数名 | 默认值 | 用途 |
---|---|---|
work_dir | /opt/greatsql | 工作目录,将下载的安装包放在本目录,可根据需要自行调整 |
extract_dir | /usr/local | GreatSQL二进制包解压缩后放在 /usr/local下,【不建议调整】 |
data_dir | /data/GreatSQL | GreatSQL运行时的datadir,【不建议调整】 |
file_name | GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz | GreatSQL二进制包文件名,【不建议调整】 |
base_dir | /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal | GreatSQL的basedir,【不建议调整】 |
my_cnf | /etc/my.cnf | my.cnf配置文件路径,【不建议调整】 |
mysql_user | mysql | 运行GreatSQL对应的user、group,【不建议调整】 |
mysql_port | 3306 | GreatSQL运行时的监听端口,【不建议调整】 |
mgr_user | repl | MGR账户 |
mgr_user_pwd | repl4MGR | MGR账户密码 |
mgr_seeds | 172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061 | 定义MGR运行时各节点的IP+端口列表,【需要自行调整】 |
wait_for_start | 60 | 初次启动时,要先进行一系列数据文件初始化等工作,后面的MGR初始化工作要等待前面的先完成,如果因为等待的时间不够导致安装失败,可以将这个时间加长 |
执行下面的命令一键完成GreatSQL的安装、初始化,加入systemd服务、以及MGR初始化等所有工作:
[root@greatsql ~]# ansible-playbook ./greatsql.yml
5.4 检查Ansible运行过程输出
安装时会先行检查是否已有mysqld进程在运行,或者3306端口上是否已有其他服务,如果是的话,则输出内容可能会是这样的:
PLAY [install GreatSQL] *****************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************
ok: [172.16.16.10]
ok: [172.16.16.11]
ok: [172.16.16.12]
TASK [check mysql port] *****************************************************************************************************************************
changed: [172.16.16.10]
changed: [172.16.16.11]
changed: [172.16.16.12]
TASK [check mysql processor] ************************************************************************************************************************
changed: [172.16.16.10]
changed: [172.16.16.11]
changed: [172.16.16.12]
TASK [modify selinux config file] *******************************************************************************************************************
skipping: [172.16.16.10]
skipping: [172.16.16.11]
skipping: [172.16.16.12]
看到有 skipping 以及 skipped=N 字样。而如果是正常安装,则会输出类似下面的内容:
PLAY [install GreatSQL] *****************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************
ok: [172.16.16.10]
ok: [172.16.16.11]
ok: [172.16.16.12]
TASK [check mysql port] *****************************************************************************************************************************
changed: [172.16.16.10]
changed: [172.16.16.11]
changed: [172.16.16.12]
...
PLAY RECAP ******************************************************************************************************************************************
172.16.16.10 : ok=27 changed=14 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.16.11 : ok=27 changed=14 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.16.12 : ok=27 changed=14 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5.5 检查GreatSQL安装结果
有 ok 以及 skipped=0 字样,这就表示都被正常被执行了,此时应该已经安装成功了,检查一下:
[root@greatsql ~]# systemctl status greatsql
● greatsql.service - GreatSQL Server
Loaded: loaded (/usr/lib/systemd/system/greatsql.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2021-07-06 20:55:33 CST; 45s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 31320 ExecStartPre=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 31348 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/greatsql.service
└─31348 /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal/bin/mysqld
Jul 06 20:55:31 greatsql systemd[1]: Starting GreatSQL Server...
Jul 06 20:55:33 greatsql systemd[1]: Started GreatSQL Server.
检查MGR服务运行状态:
[root@GreatSQL][(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | ac24eab8-def4-11eb-a5e8-525400e802e2 | mgr3 | 3306 | ONLINE | SECONDARY | 8.0.25 |
| group_replication_applier | ac275d97-def4-11eb-9e49-525400fb993a | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.25 |
| group_replication_applier | ac383458-def4-11eb-bf1a-5254002eb6d6 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
这就完成MGR集群的构建了。
6. 小结
本问介绍了如何利用Ansible快速安装GreatSQL并构建MGR集群,以上ansible脚本已上传到gitee仓库中,详见:https://gitee.com/GreatSQL/GreatSQL-Ansible ,欢迎大家提出更多改进建议。
参考资料、文档
免责声明
因个人水平有限,专栏中难免存在错漏之处,请勿直接复制文档中的命令、方法直接应用于线上生产环境。请读者们务必先充分理解并在测试环境验证通过后方可正式实施,避免造成生产环境的破坏或损害。
Enjoy GreatSQL
文章推荐:
GreatSQL季报(2021.12.26)
https://mp.weixin.qq.com/s/FZ_zSBHflwloHtZ38YJxbA
技术分享|sysbench 压测工具用法浅析
https://mp.weixin.qq.com/s/m16LwXWy9bFt0i99HjbRsw
故障分析 | linux 磁盘io利用率高,分析的正确姿势
https://mp.weixin.qq.com/s/7cu_36jfsjZp1EkVexkojw
技术分享|闪回在MySQL中的实现和改进
https://mp.weixin.qq.com/s/6jepwEE0DnYUpjMYO17VtQ
万答#20,索引下推如何进行数据过滤
https://mp.weixin.qq.com/s/pt6mr3Ge1ya2aa6WlrpIvQ
关于 GreatSQL
GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/GreatSQL
GitHub:
https://github.com/GreatSQL/GreatSQL
Bilibili:
https://space.bilibili.com/1363850082/video
微信&QQ群:
可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群
QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 发布!
8. 利用Ansible快速构建MGR | 深入浅出MGR的更多相关文章
- 9. 利用Docker快速构建MGR | 深入浅出MGR
目录 1.安装Docker 2.拉取GreatSQL镜像,并创建容器 2.1 拉取镜像 2.2 创建新容器 2.3 容器管理 3.构建MGR集群 3.1 创建专用子网 3.2 创建3个新容器 3.3 ...
- 利用Nodejs快速构建应用原型
利用Nodejs快速构建应用原型 开发一个应用往往需要快速的构建原型,然后在此基础上设计和改进,前端可能立马能看到效果,但是后端业务逻辑不会那么快,这个时候其实我们需要额只是一些模拟数据,所以不需要真 ...
- 如何利用docker快速构建MySQL主从复制环境
在学习MySQL的过程中,常常会测试各种参数的作用.这时候,就需要快速构建出MySQL实例,甚至主从. 考虑如下场景: 譬如我想测试mysqldump在指定--single-transaction参数 ...
- vue2.x利用脚手架快速构建项目并引入bootstrap、jquery
要使用vue-cli脚手架搭建项目,首先需要安装node.js Node.js官网:https://nodejs.org/en/download/ 选择你对应的系统即可下载,下载完成后傻瓜式安装即可. ...
- 利用MySQL Router构建读写分离MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 部署MySQL Router 2. 启动mysqlrouter服务 3. 确认读写分离效果 4. 确认只读负载 ...
- 不借助 Javascript,利用 SVG 快速构建马赛克效果
之前在公众号转发了好友 Vajoy 的一篇文章 -- 巧用 CSS 把图片马赛克风格化. 核心是利用了 CSS 中一个很有意思的属性 -- image-rendering,它可以用于设置图像缩放算法. ...
- 11. MGR技术架构及数据同步、认证机制 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 目录 1. MGR架构 2. 事务数据同步.认证过程 ...
- 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...
- 利用京东云Serverless服务快速构建5G时代的IoT应用
10月31日,在2019年中国国际信息通信展览会上,工信部宣布:5G商用正式启动.5G商用时代来了! 5G的商用,使得数据传输速度.响应速度.连接数据.数据传输量.传输可靠性等方面都有了显著的提升,这 ...
随机推荐
- 【单片机】使用 sscanf 提取AT命令返回结果中的有效数据
摘要:1. sscanf函数 sscanf是C标准库函数,用于从字符串中读取格式化输入. 头文件: #include <stdio.h>函数原型如下: int sscanf(const c ...
- 用python解决打标签时将xml文件的标签名打错
用python解决打标签时将xml文件的标签名打错 问题描述:再进行达标签时将magnetic_tile的标签名错误的打成了magnetic_title,又不想一张一张的修改 出现问题的xml文件 & ...
- Python Selenium库
Selenium库 自动化测试工具,支持多种游览器 爬虫中主要用来解决JavaScript渲染的问题 安装Selenium pip3 install selenium 安装游览器驱动 下载驱动地址:h ...
- Google搜索为什么不能无限分页?
这是一个很有意思却很少有人注意的问题. 当我用Google搜索MySQL这个关键词的时候,Google只提供了13页的搜索结果,我通过修改url的分页参数试图搜索第14页数据,结果出现了以下的错误提示 ...
- element-ui table组件使用v-if时的问题
element-ui项目中经常遇到需要使用v-if指令来根据情况动态显示隐藏某些列情况,这时就会出现滚动条样式异常.列错乱.列宽错乱等问题 解决办法:在el-table上添加:key="Ma ...
- VmWare安装Centos8注意事项
VmWare安装Centos8注意事项 1.需选择稍后安装操作系统 2.选择操作系统版本 3.修改虚拟机配置 4.配置完成点击开启虚拟机(注意要将鼠标放在屏幕中央,点击一下后才能使用上下键进行选择) ...
- 网络协议之:memcached binary protocol详解
目录 简介 memcached的协议包 memcached命令举例 总结 简介 前面讲到了memcached的文本协议,虽然文本协议看起来非常简单,但是对于客户端来说一般还是会选择效率更高的二进制协议 ...
- 在Visual C++ 6.0中无法使用gets()函数的解决办法
问题 昨晚遇到一个有意思的问题,明明在Visual Studio 2019运行好好的C语言代码,Copy到Visual C++ 6.0中就无法编译通过了,错误提示信息如下: error C2143: ...
- 【Redis】集群请求命令处理
集群请求命令处理 在Redis的命令处理函数processCommand(server.c)中有对集群节点的处理,满足以下条件时进入集群节点处理逻辑中: 启用了集群模式,通过server.cluste ...
- CVE-2022-30190 Follina Office RCE分析【附自定义word钓鱼模板POC】
昨天看了下'Follina' MS-MSDT n-day Microsoft Office RCE 这个漏洞,修改了下chvancooten的脚本,实现可以自定义word模板,便于实战中钓鱼使用,自己 ...