ansible-playbook一键部署mysql双主集群

怼烎@ 2021-11-17 11:38 951阅读 0赞

前面的博客中,介绍过mysql的双主集群的搭建,那么ansible就是将之前的手动的操作过程转换成剧本的方式,然后执行剧本,就完成了mysql的双主集群的搭建,具体的搭建过程可看之前的mysql的博客模块,下面是ansible部署mysql双主的文件结构

  1. [root@wyl01 mysql]# tree
  2. .
  3. ├── group_vars
  4. └── mysql.yml # 存放的是所用到的参数
  5. ├── hosts # 主机清单
  6. ├── README.txt
  7. ├── roles
  8. └── mysql
  9. ├── files
  10. └── mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz # 安装的版本
  11. ├── tasks #目录下面是具体的每一项任务
  12. ├── add_user.yml
  13. ├── change_slave_to_master.yml
  14. ├── install_mysql.yml
  15. ├── main.yml
  16. └── pre_install.yml
  17. └── templates # 模板文件
  18. ├── my.cnf.j2
  19. └── mysql.service.j2
  20. └── site.yml # 执行的入口文件
  1. 查看主机清单和所用到的变量

    [root@wyl01 mysql]# cat hosts #主机清单
    [mysql]
    wyl02 ansible_ssh_host=192.168.52.129 ansible_ssh_pass=123456 master=true
    wyl03 ansible_ssh_host=192.168.52.130 ansible_ssh_pass=123456 slave=true

  1. [root@wyl01 mysql]# cat group_vars/mysql.yml # 变量,下面有的参数使用是为了多实例部署,是剧本具有高效性
  2. ---
  3. mysql_version: mysql-5.7.20-linux-glibc2.12-x86_64
  4. mysql_install_path: /usr/local
  5. mysql_link: mysql
  6. mysql_sock: /tmp/mysql.sock
  7. mysql_port: 3306
  8. mysql_root_passwd: "123456"
  9. master_ip: 192.168.52.129
  10. slave_ip: 192.168.52.130
  11. repl_user: repl
  12. repl_passwd: "123456"

2 剧本的入口文件

  1. [root@wyl01 mysql]# cat site.yml
  2. ---
  3. - hosts: all
  4. gather_facts: yes
  5. roles:
  6. - mysql

3 剧本执行的每一项任务

20190730194840849.png

  1. [root@wyl01 tasks]# cat pre_install.yml # 安装前的准备工作
  2. - name: install_MySQL-python
  3. yum:
  4. name: MySQL-python
  5. state: latest
  6. tags:
  7. - install_MySQL-python
  8. [root@wyl01 tasks]# cat add_user.yml # mysql的用户
  9. ---
  10. - name: add_mysql_user
  11. user:
  12. name: mysql
  13. create_home: no
  14. shell: /sbin/nologin
  15. tags:
  16. - add_mysql_user
  17. [root@wyl01 tasks]# cat install_mysql.yml # 解压,授权,启动,修改初始化密码等操作
  18. ---
  19. - name: unarchive_mysql_tar
  20. unarchive:
  21. src: "{
  22. { mysql_version }}.tar.gz"
  23. dest: "{
  24. { mysql_install_path }}"
  25. owner: mysql
  26. group: mysql
  27. tags:
  28. - unarchive_mysql_tar
  29. - name: chown_mysql
  30. file:
  31. dest: "{
  32. { mysql_install_path }}/{
  33. {mysql_version}}"
  34. owner: mysql
  35. group: mysql
  36. recurse: yes
  37. tags:
  38. - chown_mysql
  39. - name: link_mysql
  40. file:
  41. src: "{
  42. { mysql_install_path }}/{
  43. {mysql_version}}"
  44. dest: "{
  45. { mysql_install_path }}/{
  46. { mysql_link }}"
  47. owner: mysql
  48. group: mysql
  49. state: link
  50. tags:
  51. - link_mysql
  52. - name: mkdir_log
  53. file:
  54. path: "{
  55. { mysql_install_path }}/{
  56. { mysql_link }}/log"
  57. owner: mysql
  58. group: mysql
  59. state: directory
  60. tags:
  61. - mkdir_log
  62. - name: touch_mysql.log
  63. file:
  64. path: "{
  65. { mysql_install_path }}/{
  66. { mysql_link }}/log/mysqld.log"
  67. owner: mysql
  68. group: mysql
  69. state: touch
  70. tags:
  71. - touch_mysql.log
  72. - name: copy_my.cnf
  73. template:
  74. src: my.cnf.j2
  75. dest: /etc/my.cnf
  76. tags:
  77. - copy_my.cnf
  78. - name: init_mysql
  79. shell: ./bin/mysqld --initialize --user=mysql
  80. args:
  81. chdir: "{
  82. { mysql_install_path }}/{
  83. { mysql_link }}"
  84. tags:
  85. - init_mysql
  86. - name: get_mysql_passwd
  87. shell: cat log/mysqld.log |grep localhost|awk -F ':' '{print $4}'|cut -c 2-
  88. register: mysql_init_passwd
  89. args:
  90. chdir: "{
  91. { mysql_install_path }}/{
  92. { mysql_link }}"
  93. tags:
  94. - get_mysql_passwd
  95. - name: dispaly_passwd
  96. debug:
  97. msg: "{
  98. { mysql_init_passwd.stdout }}"
  99. tags:
  100. - dispaly_passwd
  101. - name: copy_mysql.server
  102. copy:
  103. src: "{
  104. { mysql_install_path }}/{
  105. { mysql_link }}/support-files/mysql.server"
  106. dest: /etc/init.d/mysql-{
  107. { mysql_port }}.server
  108. mode: 0755
  109. tags:
  110. - copy_mysql.server
  111. - name: add_mysql_systemd
  112. template:
  113. src: mysql.service.j2
  114. dest: /etc/systemd/system/mysql-{
  115. { mysql_port }}.service
  116. tags:
  117. - add_mysql_systemd
  118. - name: start_mysql_service
  119. systemd:
  120. name: mysql-{
  121. { mysql_port }}
  122. daemon_reload: yes
  123. enabled: yes
  124. state: restarted
  125. tags:
  126. - start_mysql_service
  127. - name: alter_passwd
  128. shell: ./bin/mysqladmin -u root -p'{
  129. {mysql_init_passwd.stdout}}' password '{
  130. { mysql_root_passwd }}'
  131. args:
  132. chdir: "{
  133. { mysql_install_path }}/{
  134. { mysql_link }}"
  135. tags:
  136. - alter_passwd
  137. [root@wyl01 mysql]# cat roles/mysql/tasks/change_slave_to_master.yml #change master操作
  138. ---
  139. - name: create_user
  140. mysql_user:
  141. login_host: 127.0.0.1
  142. login_port: "{
  143. { mysql_port }}"
  144. login_user: root
  145. login_password: "{
  146. { mysql_root_passwd }}"
  147. name: "{
  148. { repl_user }}"
  149. password: "{
  150. { repl_passwd }}"
  151. priv: "*.*:ALL"
  152. state: present
  153. host: "%"
  154. when: master is defined
  155. tags:
  156. - create_user
  157. - name: change_slave_to_master1
  158. mysql_replication:
  159. login_unix_socket: "{
  160. { mysql_sock }}"
  161. login_host: 127.0.0.1
  162. login_port: "{
  163. { mysql_port }}"
  164. login_user: root
  165. login_password: "{
  166. { mysql_root_passwd }}"
  167. master_host: "{
  168. { master_ip }} "
  169. master_user: "{
  170. { repl_user }}"
  171. master_password: "{
  172. { repl_passwd }}"
  173. master_port: "{
  174. { mysql_port }}"
  175. master_auto_position: "1"
  176. mode: changemaster
  177. when: slave is defined
  178. tags:
  179. - change_slave_to_master1
  180. - name: start_slave1
  181. mysql_replication:
  182. login_unix_socket: "{
  183. { mysql_sock }}"
  184. login_user: root
  185. login_host: 127.0.0.1
  186. login_port: "{
  187. { mysql_port }}"
  188. login_password: "{
  189. { mysql_root_passwd }}"
  190. mode: startslave
  191. tags:
  192. - start_slave1
  193. - name: change_slave_to_master2
  194. mysql_replication:
  195. login_unix_socket: "{
  196. { mysql_sock }}"
  197. login_host: 127.0.0.1
  198. login_port: "{
  199. { mysql_port }}"
  200. login_user: root
  201. login_password: "{
  202. { mysql_root_passwd }}"
  203. master_host: "{
  204. { slave_ip }} "
  205. master_user: "{
  206. { repl_user }}"
  207. master_password: "{
  208. { repl_passwd }}"
  209. master_port: "{
  210. { mysql_port }}"
  211. master_auto_position: "1"
  212. mode: changemaster
  213. when: master is defined
  214. tags:
  215. - change_slave_to_master2
  216. - name: start_slave2
  217. mysql_replication:
  218. login_unix_socket: "{
  219. { mysql_sock }}"
  220. login_user: root
  221. login_host: 127.0.0.1
  222. login_port: "{
  223. { mysql_port }}"
  224. login_password: "{
  225. { mysql_root_passwd }}"
  226. mode: startslave
  227. tags:
  228. - start_slave2
  229. - name: get_slave_info
  230. mysql_replication:
  231. login_host: 127.0.0.1
  232. login_user: root
  233. login_port: 3306
  234. login_password: "123456"
  235. mode: getslave
  236. register: info
  237. tags:
  238. - get_slave_info
  239. - name: dispaly_slave
  240. debug:
  241. msg: "Slave_SQL_Running={
  242. { info.Slave_IO_Running }} Slave_SQL_Running={
  243. { info.Slave_SQL_Running }}"
  244. tags:
  245. - dispaly_slave

执行结果如下:

  1. [root@wyl01 mysql]# ansible-playbook -i hosts site.yml
  2. PLAY [all] **********************************************************************************************************************************************************************************
  3. TASK [Gathering Facts] **********************************************************************************************************************************************************************
  4. ok: [wyl03]
  5. ok: [wyl02]
  6. TASK [mysql : install_MySQL-python] *********************************************************************************************************************************************************
  7. ok: [wyl02]
  8. ok: [wyl03]
  9. TASK [mysql : add_mysql_user] ***************************************************************************************************************************************************************
  10. ok: [wyl03]
  11. ok: [wyl02]
  12. TASK [mysql : unarchive_mysql_tar] **********************************************************************************************************************************************************
  13. changed: [wyl03]
  14. changed: [wyl02]
  15. TASK [mysql : chown_mysql] ******************************************************************************************************************************************************************
  16. changed: [wyl03]
  17. changed: [wyl02]
  18. TASK [mysql : link_mysql] *******************************************************************************************************************************************************************
  19. changed: [wyl02]
  20. changed: [wyl03]
  21. TASK [mysql : mkdir_log] ********************************************************************************************************************************************************************
  22. changed: [wyl02]
  23. changed: [wyl03]
  24. TASK [mysql : touch_mysql.log] **************************************************************************************************************************************************************
  25. changed: [wyl02]
  26. changed: [wyl03]
  27. TASK [mysql : copy_my.cnf] ******************************************************************************************************************************************************************
  28. ok: [wyl03]
  29. ok: [wyl02]
  30. TASK [mysql : init_mysql] *******************************************************************************************************************************************************************
  31. changed: [wyl03]
  32. changed: [wyl02]
  33. TASK [mysql : get_mysql_passwd] *************************************************************************************************************************************************************
  34. changed: [wyl03]
  35. changed: [wyl02]
  36. TASK [mysql : dispaly_passwd] ***************************************************************************************************************************************************************
  37. ok: [wyl02] => {
  38. "msg": "tosEGBto+3xg"
  39. }
  40. ok: [wyl03] => {
  41. "msg": "&CUQdQ&Qb7S4"
  42. }
  43. TASK [mysql : copy_mysql.server] ************************************************************************************************************************************************************
  44. ok: [wyl03]
  45. ok: [wyl02]
  46. TASK [mysql : add_mysql_systemd] ************************************************************************************************************************************************************
  47. ok: [wyl03]
  48. ok: [wyl02]
  49. TASK [mysql : start_mysql_service] **********************************************************************************************************************************************************
  50. changed: [wyl03]
  51. changed: [wyl02]
  52. TASK [mysql : alter_passwd] *****************************************************************************************************************************************************************
  53. changed: [wyl03]
  54. changed: [wyl02]
  55. TASK [mysql : create_user] ******************************************************************************************************************************************************************
  56. skipping: [wyl03]
  57. changed: [wyl02]
  58. TASK [mysql : change_slave_to_master1] ******************************************************************************************************************************************************
  59. skipping: [wyl02]
  60. changed: [wyl03]
  61. TASK [mysql : start_slave1] *****************************************************************************************************************************************************************
  62. ok: [wyl02]
  63. changed: [wyl03]
  64. TASK [mysql : change_slave_to_master2] ******************************************************************************************************************************************************
  65. skipping: [wyl03]
  66. changed: [wyl02]
  67. TASK [mysql : start_slave2] *****************************************************************************************************************************************************************
  68. changed: [wyl02]
  69. ok: [wyl03]
  70. PLAY RECAP **********************************************************************************************************************************************************************************
  71. wyl02 : ok=20 changed=12 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
  72. wyl03 : ok=19 changed=11 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0

最后显示sql和i/o进程yes状态,看到两个yes状态表示安装成功

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d5bDk1Mjc_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 1 条评论,951人围观)
蒲公英云0DF06D
蒲公英云0DF06DV铁粉 2022-08-03 03:16
亲爱的博主 main.yml和templates下的文件方便发一下吗

相关阅读