2018-04-26 centos7 系统MariaDB Galera Cluster多主集群搭建

安全提示:如果需要打开防火墙,需要开放防火墙端口:3306, 4444, 4567, 4568 或者对指定ip允许访问

机器列表
192.168.124.137
192.168.124.139

所有机器操作:

关闭SELINUX
vi /etc/selinux/config
SELINUX=disabled 

setenforce 0
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
设置mariadb的yum源并安装(所有节点都要

vi /etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=0
yum install MariaDB-server MariaDB-client galera

数据库配置:

# 配置数据库密码,测试情况使用 root  % 123456
/usr/bin/mysql_secure_installation

grant all privileges on *.* to root@"%" identified by "123456";
flush privileges;

# 配置完成之后关闭数据库
systemctl stop mariadb

配置节点:
192.168.124.137 cat /etc/my.cnf.d/server.cnf | grep -v '#' :

[server]

[mysqld]

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.124.137,192.168.124.139"
wsrep_node_name = mariadb_cluster_1
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address=192.168.124.137
wsrep_sst_method=rsync

wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=1024M
wsrep_sst_auth=root:123456

[embedded]

[mariadb]

[mariadb-10.1]

192.168.124.139 配置 cat /etc/my.cnf.d/server.cnf | grep -v '#' :

[server]

[mysqld]

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.124.137,192.168.124.139"
wsrep_node_name = mariadb_cluster_2
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address=192.168.124.139
wsrep_sst_method=rsync
wsrep_sst_auth=root:123456

wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=1024M

[embedded]

[mariadb]

[mariadb-10.1]
启动 192.168.124.137:
/usr/sbin/mysqld --wsrep-new-cluster --user=root
查看集群状态:
MariaDB [(none)]> show  status like "wsrep_cluster_size"; 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+
1 row in set (0.00 sec)

打开 192.168.124.139 上面的mariadb:

systemctl start mariadb
MariaDB [(none)]> show  status like "wsrep_cluster_size"; 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+
1 row in set (0.00 sec)

集群大小已经发生变化了,数据库被可以使用了,下面进行数据写入测试 192.168.:

MariaDB [(none)]> create database qinfei;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> use qinfei;
Database changed
MariaDB [qinfei]> create table ha;
ERROR 1113 (42000): A table must have at least 1 column
MariaDB [qinfei]> create table ha(id int primary key);
Query OK, 0 rows affected (0.01 sec)

MariaDB [qinfei]> show tables;
+------------------+
| Tables_in_qinfei |
+------------------+
| ha               |
+------------------+
1 row in set (0.00 sec)

MariaDB [qinfei]> insert into ha value(1);
Query OK, 1 row affected (0.00 sec)

MariaDB [qinfei]> insert into ha value(2);
Query OK, 1 row affected (0.00 sec)

MariaDB [qinfei]> select * from ha;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)

查看从数据库:

MariaDB [(none)]> show databases;;
+--------------------+
| Database           |
+--------------------+
| galera             |
| information_schema |
| mysql              |
| performance_schema |
| qinfei             |
+--------------------+
5 rows in set (0.00 sec)

ERROR: No query specified

MariaDB [(none)]> use qinfei;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [qinfei]> select * from ha;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)

数据已经同步。

现在在另一个数据库192.168.124.139上面操作:

MariaDB [qinfei]> insert into ha value(88);
Query OK, 1 row affected (0.01 sec)

查看192.168.124.137:

MariaDB [qinfei]> select * from ha;
+----+
| id |
+----+
|  1 |
|  2 |
| 88 |
+----+
3 rows in set (0.00 sec)

数据完全同步,数据库集群可以正常使用。
停掉一个数据库之后一样可以正常使用。

遇见的问题1 :

2018-04-26  3:59:56 140697295214848 [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
2018-04-26  3:59:56 140697295214848 [ERROR] WSREP: wsrep::connect(gcomm://192.168.124.137,192.168.124.139) failed: 7
2018-04-26  3:59:56 140697295214848 [ERROR] Aborting

解决方案: 按照建议方式修改 vi /var/lib/mysql/grastate.dat

safe_to_bootstrap: 1

可以正常启动。

遇见的问题2:

[ERROR] Can't init tc log
[ERROR] Aborting

tc.log 文件有问题,调试环境直接删除文件捷克解决问题:

cd /var/lib/mysql/
rm -f ib_logfile*  
rm -f tc.log  
rm -f localhost.pid

最严重的问题:由于是日志同步 rsync ,每次停止实例都很可能会导致mysql 启动失败,很坑,不是一般的坑.

遇见的问题3: 备点加入集群一直失败
原因:在生产环境中必须打开防火墙,但是我只开放了 4567 和 针对指定ip开放3306 端口,导致加入集群失败,需要开放 3306, 4444, 4567, 4568 四个端口才可以正常启动

遇见问题4:

 Log file ./ib_logfile1 is of different size 5242880 bytes than other log files 27787264 bytes!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting'

解决办法:

  • 1、修改配置文件

    在[mysqld]下添加:

    innodb_log_file_size=50331648

  • 2、删除ib_logfile文件

    mv ib_logfile0 ib_logfile0_bak

    mv ib_logfile1 ib_logfile1_bak

遇见问题5:

pam_unix(su-l:session): session opened for user root by (uid=0)
pam_unix(su-l:session): session closed for user root
[b7929b] <passwd=-1> ldap_result() failed: Can't contact LDAP server: Connection reset by peer
[b7929b] <passwd=-1> ldap_abandon() failed to abandon search: Can't contact LDAP server: Transport endpoint is not connected
(to root) root on none
Started Session c127 of user root.

遇见这个问题,我只想说一句 Fuck 道行太浅啊!!!解决办法:

sudo systemctl start mariadb.service
启动顺序
方法1:

必须先:

/usr/sbin/mysqld --wsrep-new-cluster --user=root

才可以使用 systemctl 命令启动从节点。

方法2:

第一个需要启动的节点配置文件这样填写:

wsrep_cluster_address="gcomm://"

不指定集群地址,这样就可以使用 systemctl start mariadb.service

注意事项:这个非常非常重要 在停机维护的时候,必须最后一个停止主节点,否则主节点会启动失败,然后只能启动最后一个关闭的节点作为此次启动的主节点。
http://blog.51cto.com/xianglinhu/1676039 写道:

其中需要注意的地方有wsrep_cluster_address=gcomm://这条命令,gcomm://是一个特殊的参数,在启动第一台数据库时需要使用这个参数来启动,否则会启动失败,后面的节点使用wsrep_cluster_address="gcomm://192.168.1.162,192.168.1.163,192.168.1.164"这个参数来启动数据库。当第一台数据库需要重启时需要切换到wsrep_cluster_address="gcomm://192.168.1.162,192.168.1.163,192.168.1.164"这个参数来启动才能加入到集群中。这样讲有点抽象,换一种方式来讲就是最开始启动集群的第一台服务器时将wsrep_cluster_address="gcomm://192.168.1.162,192.168.1.163,192.168.1.164"这一行注释掉,使用下面那个参数来启动,后面的节点注释掉wsrep_cluster_address=gcomm://这个参数启动数据库,加入到集群中来。当集群全部起来以后万一第一台数据库要重启时将下面那条参数注释掉,开启上面那条参数。这样就能加入集群中来。至于wsrep_sst_auth=wsrep_sst-user:password这个参数就是我们之前设定的用来同步的用户名和密码。

实际运行发现的问题:


5155564-d6a811f847ad8f95.png
mysql_celery.png

上图的应用场景是celery 做分布式任务,并写入到mysql中,中间停顿前面部分是启用双活数据库之前的执行速度,后面部分是mysql 单点执行速度,大致可以看出运行时间大概延长了一倍,是不是可以得出这样的结论:双活数据库写入吞吐量降低了呢?尚未测试,待闲来测一下吧

优缺点:http://blog.sina.com.cn/s/blog_548c8a830102vrgw.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值