CentOS7.6 安装MySQL Galera集群

CentOS 7.6 (1810) 64位DVD镜像安装Galera Cluster 5.7 for MySQL ,Galera集群是一个同步的多主集群,支持XtraDB/InnoDB存储引擎,提供高可用性、高吞吐量和低延迟,由至少三个节点组成了一个集群,与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,称为multi-master架构,当客户端要写入或者读取数据时,连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。


IP规划

galera1  192.168.1.110 

galera2  192.168.1.111 

galera3  192.168.1.112 


系统预配置

三个节点执行

yum -y update
setenforce 0 
sed 's/SELINUX=.*/SELINUX=disabled/g' -i /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

cat << EOF > /etc/hosts
192.168.1.110 galera1
192.168.1.111 galera2
192.168.1.112 galera3
EOF

yum -y groupinstall base "Development tools" --setopt=group_package_types=mandatory,default,optional
yum -y install socat policycoreutils-python boost-devel scons check-devel openssl-devel
yum -y install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm 
yum -y install percona-xtrabackup
yum remove MariaDB* mysql mysql-server mysql-libs mysql-devel -y
root

#如果需要开启firewalld防火墙
#firewall-cmd --add-port=4567/tcp --permanent
#firewall-cmd --add-port=4568/tcp --permanent
#firewall-cmd --add-port=4444/tcp --permanent
#firewall-cmd --add-port=3306/tcp --permanent
#firewall-cmd --reload
#如果需要开启selinux
#semanage port -a -t mysqld_port_t -p tcp 4567
#semanage port -a -t mysqld_port_t -p udp 4567
#semanage port -a -t mysqld_port_t -p tcp 4568
#semanage port -a -t mysqld_port_t -p tcp 4444
#semanage permissive -a mysqld_t


创建Galera Cluster安装源

三个节点执行

cat << EOF > /etc/yum.repos.d/galera.repo
[galera]
name = Galera
baseurl = http://releases.galeracluster.com/galera-3/centos/7/x86_64/
gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

[mysql-wsrep]
name = MySQL-wsrep
baseurl =  http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1
EOF

安装Galera Cluster for mysql

yum install galera-3 mysql-wsrep-5.7 mysql-wsrep-client-5.7 mysql-wsrep-server-5.7

CentOS7.6 安装MySQL Galera集群

离线安装方式

官方源太慢了,将Galera集群rpm包下载后上传进服务器,离线方式安装

rpm下载地址

http://releases.galeracluster.com/galera-3/centos/7/x86_64/
http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/

CentOS7.6 安装MySQL Galera集群


安装

cd /root/galera-rpm/
yum -y install ./mysql*.rpm
yum -y install ./gale*.rpm

CentOS7.6 安装MySQL Galera集群


集群节点配置

节点1

查看并修改临时密码

systemctl start mysqld
systemctl enable mysqld
cat /var/log/mysqld.log | grep "temporary password"
mysql -uroot -p'临时密码'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Vm0s.TEch';
grant all PRIVILEGES on *.* to galera@'%' identified by 'Vm0s.TEch+';   #创建新用户galera
FLUSH PRIVILEGES;
exit
/usr/bin/mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : 

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

修改配置文件

vi /etc/my.cnf
添加
!includedir /etc/my.cnf.d/

vi /etc/my.cnf.d/wsrep.cnf
添加
[mysqld]
server-id=1 #每个节点一个唯一的ID
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_provider_options='gmcast.listen_addr=tcp://192.168.1.110:4567' #本节点地址
wsrep_cluster_name="my_wsrep_cluster" #集群名称
wsrep_cluster_address=gcomm://192.168.1.110:4567,192.168.1.111:4567,192.168.1.112:4567 #节点中所有节点地址
wsrep_node_name=gelera1 #本节点名称
wsrep_node_address='192.168.1.110' #本节点地址
wsrep_node_incoming_address='192.168.1.110' #本节点地址
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=131072
wsrep_max_ws_size=1073741824
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_notify_cmd=
wsrep_sst_method=rsync
wsrep_sst_auth=root:Vm0s.TEch  #数据库用户名密码
wsrep_sst_donor='gelera1,gelera2,gelera3,'  #所有节点名称


节点2

vi /etc/my.cnf
添加
!includedir /etc/my.cnf.d/

vi /etc/my.cnf.d/wsrep.cnf
添加
[mysqld]
server-id=2 #每个节点一个唯一的ID
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_provider_options='gmcast.listen_addr=tcp://192.168.1.111:4567' #本节点地址
wsrep_cluster_name="my_wsrep_cluster" #集群名称
wsrep_cluster_address=gcomm://192.168.1.110:4567,192.168.1.111:4567,192.168.1.112:4567 #节点中所有节点地址
wsrep_node_name=gelera2 #本节点名称
wsrep_node_address='192.168.1.111' #本节点地址
wsrep_node_incoming_address='192.168.1.111' #本节点地址
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=131072
wsrep_max_ws_size=1073741824
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_notify_cmd=
wsrep_sst_method=rsync
wsrep_sst_auth=root:Vm0s.TEch  #数据库用户名密码
wsrep_sst_donor='gelera1,gelera2,gelera3,'  #所有节点名称


节点3

vi /etc/my.cnf
添加
!includedir /etc/my.cnf.d/

vi /etc/my.cnf.d/wsrep.cnf
添加
[mysqld]
server-id=3 #每个节点一个唯一的ID
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_provider_options='gmcast.listen_addr=tcp://192.168.1.112:4567' #本节点地址
wsrep_cluster_name="my_wsrep_cluster" #集群名称
wsrep_cluster_address=gcomm://192.168.1.110:4567,192.168.1.111:4567,192.168.1.112:4567 #节点中所有节点地址
wsrep_node_name=gelera3 #本节点名称
wsrep_node_address='192.168.1.112' #本节点地址
wsrep_node_incoming_address='192.168.1.112' #本节点地址
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=131072
wsrep_max_ws_size=1073741824
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_notify_cmd=
wsrep_sst_method=rsync
wsrep_sst_auth=root:Vm0s.TEch  #数据库用户名密码
wsrep_sst_donor='gelera1,gelera2,gelera3,'  #所有节点名称


增加日志文件和对日志文件授权

touch /var/log/mysqld.log
chown mysql:mysql /var/log/mysqld.log


节点1上运行专用脚本mnysqld bootstrap初始化集群

/usr/bin/mysqld_bootstrap
systemctl enable mysqld
systemctl status mysqld


节点2和节点3启动mysqld服务

systemctl start mysqld


验证

查看集群节点数量

mysql -u root -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';"


查看端口

lsof -i:4567
lsof -i:3306


集群测试

在一个节点上创建数据库
mysql -u root -e 'CREATE DATABASE clusterTest;'

其他节点查看此数据库
mysql -u root -e 'show databases;'



更新日期: 2018年12月23日
文章标签: LinuxMySQL
文章链接: https://www.vos.cn/db/251.html  
版权说明:如非注明,本站文章均为vOS原创,转载请注明出处和附带本文链接。