3. 安裝MySQL-pxc
3.1. 說明
之前為了搭建高可用的MySQL的集群货矮,所以安裝MySQL-pxc稽揭,具體介紹可以看https://www.percona.com/software/mysql-database/percona-xtradb-cluster
不知道為什么服務(wù)器下載都巨慢登渣,所以我都使用離線安裝喷户。下載的是主要的包隙轻,還有其他一堆依賴需要服務(wù)器自己去下載始绍。
ansiblehosts
文件
[mysqlservers]
sz-1 node_name=pxc1
sz-2 node_name=pxc2
3.2. yml腳本
---
- hosts: mysqlservers
remote_user: root
vars_files:
- ../vars.yml
tasks:
- name: Ensure SELinux is set to enforcing mode
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=permissive
- name: Copy rpm
copy:
src: "{{ PLAYBOOK_DIR }}/files/mysql"
dest: /mnt
owner: root
group: root
mode: 0755
- name: install prepare
yum:
name: "/mnt/mysql/percona-release-latest.noarch.rpm"
state: present
- name: install pxc
shell: "yum localinstall -y /mnt/mysql/Percona/*"
- name: firewarld add 3306
firewalld:
port: 3306/tcp
permanent: true
immediate: true
zone: public
state: enabled
- name: firewarld add 4444
firewalld:
port: 4444/tcp
permanent: true
immediate: true
zone: public
state: enabled
- name: firewarld add 4567
firewalld:
port: 4567/tcp
permanent: true
immediate: true
zone: public
state: enabled
- name: firewarld add 4568
firewalld:
port: 4568/tcp
permanent: true
immediate: true
zone: public
state: enabled
- name: Copy config
template:
src: "{{ PLAYBOOK_DIR }}/mysql-pxc/templates/wsrep.cnf.j2"
dest: /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
owner: root
group: root
mode: 0755
- name: set SELinux to permissive
shell: setenforce 0
- name: start mysql@bootstrap
service:
name: mysql@bootstrap
state: started
when: inventory_hostname == groups['mysqlservers'][0]
因?yàn)槭谴罱和海枰葐?dòng)第一個(gè)節(jié)點(diǎn),進(jìn)行配置完后再啟動(dòng)其他節(jié)點(diǎn)亏推,各節(jié)點(diǎn)會(huì)自動(dòng)建立鏈接学赛。
3.3. 模板文件
因?yàn)榇罱ǖ氖羌涵h(huán)境,因此都需要配置節(jié)點(diǎn)
3.3.1 wsrep.cnf.j2
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://{% set comma = joiner(",") %}
{% for item in groups['mysqlservers'] -%}
{{ comma() }}{{ hostvars[item].inventory_hostname }}
{%- endfor %}
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB
# Slave thread to use
wsrep_slave_threads=8
wsrep_log_conflicts
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node IP address
wsrep_node_address={{ ansible_default_ipv4.address }}
# Cluster name
wsrep_cluster_name=newtranx-pxc-cluster
#If wsrep_node_name is not specified, then system hostname will be used
wsrep_node_name={{ node_name }}
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING
# SST method
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method
wsrep_sst_auth=sstuser:passw0rd
3.4. 運(yùn)行ansible-playbook
ansible-playbook -i /etc/ansible/hosts mysql/main.yml
3.5. 基本配置
修改密碼吞杭、創(chuàng)建遠(yuǎn)程用戶盏浇、修改權(quán)限,這里不做贅述篇亭,參考之前寫的《Ansible部署系列:(六)安裝MySQL》
3.6. 啟動(dòng)其他節(jié)點(diǎn)
---
- hosts: mysqlservers
remote_user: root
vars_files:
- ../vars.yml
tasks:
- name: set SELinux to permissive
shell: setenforce 0
- name: start mysql
service:
name: mysqld
state: started
when: inventory_hostname != groups['mysqlservers'][0]
3.7. 查看各節(jié)點(diǎn)狀態(tài)
show status like 'wsrep%';