共计 8899 个字符,预计需要花费 23 分钟才能阅读完成。
- GreatSQL 社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。
[toc]
本次介绍如何利用 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,欢送大家提出更多改良倡议。
参考资料、文档
- MySQL 8.0 Reference Manual
- 数据库内核开发 – 温正湖
- Group Replication 原理 – 宋利兵
免责申明
因集体程度无限,专栏中不免存在错漏之处,请勿间接复制文档中的命令、办法间接利用于线上生产环境。请读者们务必先充沛了解并在测试环境验证通过前方可正式施行,防止造成生产环境的毁坏或侵害。
Enjoy GreatSQL :)
文章举荐:
GreatSQL 季报(2021.12.26)
https://mp.weixin.qq.com/s/FZ…
技术分享 |sysbench 压测工具用法浅析
https://mp.weixin.qq.com/s/m1…
故障剖析 | linux 磁盘 io 利用率高,剖析的正确姿态
https://mp.weixin.qq.com/s/7c…
技术分享 | 闪回在 MySQL 中的实现和改良
https://mp.weixin.qq.com/s/6j…
万答 #20,索引下推如何进行数据过滤
https://mp.weixin.qq.com/s/pt…
对于 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 交换微信群
QQ 群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 公布!