ansible一键安装GreatSQL并构建MGR集群

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
利用ansible一键安装GreatSQL并完成MGR部署。
本次介绍如何利用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

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, Apr2 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/hosts172.16.16.10 mgr1 172.16.16.11 mgr2 172.16.16.12 mgr3

5.2 下载GreatSQL-ansible安装包并解压缩
打开GreatSQL-Ansible项目主页:https://gitee.com/GreatSQL/Gr...
找到页面右侧“发行版”,进入,选择 " GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz" 这个二进制包下载到服务器上:
[root@greatsql ~]# cd /opt/greatsql/; wget -c "https://gitee.com/xxx/GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz"[root@greatsql ~]# tar zxf GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz

特别提醒:上述安装包是我的内部测试版本,不是正式发布的版本。
解压缩后,能看到除了 GreatSQL-8.0.23-14-Linux.x86_64.tar.xz 安装包之外,还有GreatSQL-ansible一键安装相关文件:
[root@greatsql ~]# ls -la -rw-r--r-- 1 root root327 Jul 13 11:26 check_mysql.yml -rw-r--r-- 1 root root 15431496 Jul 13 12:00 GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz -rw-r--r-- 1 root root 15428212 Jul7 12:43 GreatSQL-8.0.23-14-Linux.x86_64.tar.xz -rw-r--r-- 1 root root4393 Jul7 15:33 greatsql.yml -rw-r--r-- 1 root root357 Jul7 15:08 vars.yml

几个文件作用分别介绍下:
  • GreatSQL-8.0.23-14-Linux.x86_64.tar.xz,GreatSQL二进制安装包。
  • greatsql.yml,ansible一键安装脚本。
  • check_mysql.yml,MySQL进程、端口预检查脚本。
  • vars.yml,定义一些变量的脚本,里面的变量名有些需要修改以适应各自不同的安装环境。
5.3 利用ansible安装GreatSQL
开始执行前,需要确认 vars.yml 文件中下面这些相关参数是否要调整:
work_dir: /opt/greatsql extract_dir: /usr/local data_dir: /data/GreatSQL file_name: GreatSQL-8.0.23-14-Linux.x86_64.tar.xz base_dir: /usr/local/GreatSQL-8.0.23-14-Linux.x86_64 my_cnf: /etc/my.cnf mysql_user: mysql mysql_port: 3306 mgr_user: repl mgr_user_pwd: repl4MGR mgr_seeds: '172.16.16.7:33061,172.16.16.10:33061,172.16.16.16:33061' wait_for_start: 60

下面是关于这些参数的解释:
ansible一键安装GreatSQL并构建MGR集群
文章图片

执行下面的命令一键完成GreatSQL的安装、初始化,加入systemd服务、以及MGR初始化等所有工作:
[root@greatsql ~]# ansible-playbook ./greatsql.yml

5.4 检查运行过程输出
安装时会先行检查是否已有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=26changed=13unreachable=0failed=0skipped=0rescued=0ignored=0 172.16.16.11: ok=26changed=13unreachable=0failed=0skipped=0rescued=0ignored=0 172.16.16.12: ok=26changed=13unreachable=0failed=0skipped=0rescued=0ignored=0

5.5 检查安装结果
有 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.23-14-Linux.x86_64/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.23-14-Linux.x86_64/bin/mysqldJul 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.23| | group_replication_applier | ac275d97-def4-11eb-9e49-525400fb993a |mgr2|3306 | ONLINE| SECONDARY| 8.0.23| | group_replication_applier | ac383458-def4-11eb-bf1a-5254002eb6d6 |mgr1|3306 | ONLINE| PRIMARY| 8.0.23| +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

以上ansible脚本已上传到gitee仓库中,详见:https://gitee.com/GreatSQL/Gr...。
相应的测试版二进制包也可以在这里下载:https://gitee.com/GreatSQL/Gr...。
搞定,收工。
水平有限,也请各位读者大人帮忙看看ansible安装脚本里有哪些可以优化的地方,感谢。
Enjoy GreatSQL & Ansible :)
文章推荐: GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6...
万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预
https://mp.weixin.qq.com/s/07...
『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》
https://mp.weixin.qq.com/s/u7...
一条sql语句慢在哪之抓包分析
https://mp.weixin.qq.com/s/AY...
万答#15,都有哪些情况可能导致MGR服务无法启动
https://mp.weixin.qq.com/s/in...
技术分享 | 为什么MGR一致性模式不推荐AFTER
https://mp.weixin.qq.com/s/rN...
关于 GreatSQL GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/Gr...
GitHub:
https://github.com/GreatSQL/G...
Bilibili:
https://space.bilibili.com/13...
微信&QQ群:
可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群
【ansible一键安装GreatSQL并构建MGR集群】QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 发布!

    推荐阅读