亲宝软件园·资讯

展开

超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数

lgx211 人气:0
# 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 > 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了。本文主要侧重实操,因为跟着百度前几页的搭建教程或多或少都有坑,前后配置逻辑矛盾的也有。终于,经过几个通宵的bug修复,反复验证,力求以最简洁的代码,最少的操作量,最直白的逻辑来完成集群的搭建。因为操作过程中,网上对wsrep相关参数的介绍少之又少,所以最后特别写了完整版的参数说明,供搭建成功后,各种测试调试使用,对于这些参数有坑的地方,欢迎在底下留言,供大家参考,谢谢。 对于mysql的集群方案,我之前总结过,详情点击查看, #### 一,需求了解 Galera Cluster需要至少三个节点的服务器硬件。 如果群集在单个交换机上运行,请使用三个节点。如果您的群集跨越多个交换机,请使用三个交换机。如果您的群集跨越网络,请使用三个网络。如果您的群集跨越数据中心,请使用三个数据中心。这样可以确保在网络中断的情况下,群集可以维护主组件。 ##### 1,硬体需求 对于服务器硬件,每个节点至少需要以下组件: - 1 GHz单核CPU; - 512 MB RAM; - 100 Mbps网络连接; 注意:Galera Cluster可能会由于内存不足而在有限的硬件上运行时偶尔崩溃。为避免这种情况,请确保分配了足够的交换空间。 ##### 2,软件需求 对于软件,群集中的每个节点至少需要以下条件: - 已安装Linux或FreeBSD操作系统; - 带有wsrep API补丁的MySQL或MariaDB服务器,已安装Galera复制插件。 注意:Galera Cluster的二进制安装软件包包括带有wsrep API补丁的数据库服务器。但是,从源构建时,必须手动应用此修补程序。 #### 二,准备服务器 在开始安装过程之前,需要完成一些任务以为Galera Cluster准备服务器。您必须在集群中的每个节点上执行以下步骤。 ##### 1,配置SELinux 如果在服务器上启用了SELinux(增强安全性的Linux),则它可能会阻止mysqld执行所需的操作。您必须对SELinux禁用mysqld或对其进行配置,以允许mysqld运行外部程序并在非特权端口上打开侦听套接字,即非特权用户可以执行的操作。在这里我看了看它的状态 `cat /etc/selinux/config `,然后就直接把它给禁用了。 ```shell sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 ``` 若服务器必须要启用SELinux,[请查阅selinux和mysql](https://blogs.oracle.com/jsmyth/selinux-and-mysql) ##### 2,配置防火墙 接下来需要更新每个节点上的防火墙设置,以便它们可以与群集通信。具体执行方式取决于您的发行版和所使用的特定防火墙软件。在这里我看了看防火墙状态 `firewall-cmd --state` ,就直接把它关闭了。 ```shell systemctl stop firewalld.service systemctl disable firewalld.service ``` 有关为Galera Cluster设置防火墙以及其他用于在Linux和FreeBSD中配置数据包过滤的程序的详细信息,[请参阅防火墙设置](https://galeracluster.com/libraryhttps://img.qb5200.com/download-x/documentation/firewall-settings.html)。 ##### 3,禁用AppArmor 默认情况下,某些服务器(例如Ubuntu)包括AppArmor,这可能会阻止mysqld打开其他端口或运行脚本。 您必须禁用AppArmor或对其进行配置,以允许mysqld运行外部程序并在非特权端口上打开侦听套接字。在这里我就禁用AppArmor了。 ```shell ln -s /etc/apparmor.d/usr /etc/apparmor.dhttps://img.qb5200.com/download-x/disable/.sbin.mysqld ``` 输入效果如下所示,因为我是centos,不是Ubuntu的,所以禁用APPArmor是不需要的操作,这里只是为了演示。 ![lgx_211](https://img-blog.csdnimg.cn/20200312161230340.png) #### 三,安装Galera群集 ##### 1,依赖包准备 安装过程十有八九会报错,会提示依赖检测失败,请按照提示,下载相关依赖。这是我依据下面的安装顺序进行安装而报错,我为此逐个而安装的依赖。我的centos是刚安装的最简版,所以缺很多东西,你可以先把以下这些依赖安装完,再安装mysql cluster相关的。 ```shell yum -y install lsof net-tools perl socat openssl openssl-devel boost-devel ``` 有个安装的文件和系统现有的有冲突,导致安装失败,卸载掉这个mariadb。 ```shell rpm -qa| grep mariadb rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64 ``` 修改配置文件的时候,还有几个依赖包是被需要的,提前下载好 ```shell rpm -ivh http:/https://img.qb5200.com/download-x/download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y install rsync jemalloc ``` ##### 2,下载、安装 Galera Cluster由两部分组成:Galera复制库(galera-3)和使用写集复制(WSREP)API扩展的MySQL版本(mysql-wsrep)。 若因软件版本变化,导致无法下载,或者你不是centos系统,请自行访问http://releases.galeracluster.com,找到可以下载的对应的版本。 强烈建议安装顺序按照下面所示,逐个来,因为后面的安装需要依赖前面的安装。 ```shell wget http://releases.galeracluster.com/galera-3/centos/7/x86_64/galera-3-25.3.29-1.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-client-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-common-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-devel-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-compat-5.7-5.7.29-25.21.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-server-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-common-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-libs-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-client-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-libs-compat-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-server-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh mysql-wsrep-devel-5.7-5.7.29-25.21.el7.x86_64.rpm rpm -ivh galera-3-25.3.29-1.el7.x86_64.rpm ``` 最终效果如下所示 ![lgx_211](https://img-blog.csdnimg.cn/2020031216131996.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) ##### 3,修改配置 ```shell vi /etc/my.cnf ``` 打开配置文件,按 `i` 进入编辑模式,增加以下配置信息。 ``` wsrep-provider=/usr/lib64/galera-3/libgalera_smm.so # wsrep提供者,我的是在这个目录下 wsrep_cluster_name='mysql_cluster' #集群的名字,必须是统一的 wsrep_cluster_address=gcomm://192.168.119.128,192.168.119.129,192.168.119.130 #集群中的其他节点地址 wsrep_node_name = node1 #该节点的名称 wsrep_node_address='192.168.119.128' #该节点的地址 wsrep_sst_method=rsync # 集群使用rsync同步方式 wsrep_sst_auth=lgx:666666 # 集群同步的用户名密码 ``` 完成以上修改,Esc退出编辑模式,输入`:wq` 保存并退出。 类似同样的操作操作再来两次。最终效果如下所示 ![lgx_211](https://img-blog.csdnimg.cn/20200312161400214.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) 注意:每个节点的 `server-id,wsrep_node_name,wsrep_node_address` 是不一样的。 ##### 4,启动第一个节点 启动第一个节点以前,其节点的配置文件里面,不能配置其它节点的ip,即 `wsrep_cluster_address=gcomm://` 这样就行了,否则会导致启动报错。待集群启动后,再修改它的配置文件,把其他节点的ip补充上去。 启动第一个节点,该命令会启动本机的 mysqld 服务,命令只在集群第一个节点启动时使用,因为该脚本中带有一个参数:–wsrep-new-cluster,代表新建集群。 ```shell /usr/bin/mysqld_bootstrap ``` 查看mysqld服务状态,判断是否成功启动,并创建了新集群。 ```shell systemctl status mysqld ``` 效果图如下所示 ![lgx_211](https://img-blog.csdnimg.cn/20200312161429840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) ##### 5,启动其它节点 逐个启动其它节点的服务,并查看是否启动成功。 ```shell systemctl start mysqld systemctl status mysqld ``` 可以看到,节点已经启动。 ![lgx_211](https://img-blog.csdnimg.cn/20200312161453470.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) ##### 6,集群验证 因为数据库刚刚初始化,超级用户root是没有密码的,系统会给几个临时的root密码。再修改root密码时,需要你用其中一个临时密码确认一下,即红框所示。新输入的密码若不够复杂,会被安全原因拒绝生效。 ```shell grep -i 'temporary password' /var/log/mysqld.log mysqladmin -u root -p 'LGX_211_lgx' ``` ![lgx_211](https://img-blog.csdnimg.cn/20200312161600695.png) 现在用刚刚设置的root密码,来登录某一台主机上的mysql,看看当前节点的数据库状态,再来看看集群的状况。 ```shell mysql -u root -p show status like 'wsrep_local_state_comment'; show status like 'wsrep_cluster_size'; ``` 由红框可以看出,当前的节点是正常提供服务的状态,且与集群数据状态是一致的。由篮框可知,当前集群一共有三个节点。 ![lgx_211](https://img-blog.csdnimg.cn/2020031216163192.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) > Open:节点启动成功,尝试连接到集群 > > Primary: 节点已处于集群中,在新节点加入时,选取donor进行数据库同步时会产生的状态 > Joiner: 节点处于等待接收或正在接收同步文件的状态 > Joined: 节点完成数据同步,但还有部分数据不是最新的,在追赶与集群数据一致的状态 > Synced: 节点正常提供服务的状态,表示当前节点数据状态与集群数据状态是一致的 > Donor: 表示该节点被选为Donor节点,正在为新加进来的节点进行全量数据同步,此时该节点对客户端不提供服务 ##### 7,数据复制验证 在节点1, `mysql -u root -p` 登录mysql,创建数据库,并建表,填充数据。 ```sql create database test; use test; create table t1(a int); insert into t1 values(1); ``` 如下所示 ![lgx_211](https://img-blog.csdnimg.cn/20200312161703699.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc1MDIxMg==,size_16,color_FFFFFF,t_70) 在节点2,也建一个表,填充数据。 ```sql use test; create table t2(a int); insert into t2 values(2); ``` 同理,在节点3,也建一个表,填充数据。 ```sql use test; create table t3(a int); insert into t3 values(3); ``` 然后,随机选一个节点,来查询刚刚输入的信息。 ```sql select t1.a,t2.a,t3.a from test.t1,test.t2,test.t3; ``` 效果如下所示,在任一一个节点上可以查出刚刚在三个节点上输入的信息。 ![lgx_211](https://img-blog.csdnimg.cn/20200312161732687.png) 8,其它测试 单个节点挂掉不影响其它节点正常对外的读写操作。 增加节点,我的电脑已经没有条件在装一台虚拟机了。 #### 四,wsrep配置一览 之前的配置文件是刚开始测试所必须的最简版。这里我汇总整理了所有的可配置项,供你上生产运营环境的时候,增加相关配置。 ##### wsrep_auto_increment_control 如果设置为1(默认值),将根据集群的大小以及集群大小的变化自动调整auto_increment_increment和auto_increment_offset变量。 这样可以避免由于auto_increment而引起的复制冲突。 在主从环境中,可以设置为OFF。 ##### wsrep_causal_reads 如果设置为ON(默认为OFF),则在整个集群中强制执行读取提交的特征。 如果主设备比从设备更快地应用事件,则两者可能会短暂地不同步。 在将此变量设置为ON的情况下,从站将等待事件应用,然后再处理其他查询。 设置为ON也将导致更大的读取延迟。 ##### wsrep_certification_rules 说明:要在集群中使用的认证规则。 可能的值为: strict:可能会导致更多认证失败的更严格的规则。 例如,对于外键,如果不同的节点大约在同一时间收到指向父表中同一行的无冲突插入,则可能导致认证失败 optimized:宽松的规则,允许更多的并发性,并减少更少的认证失败。 ##### wsrep_certify_nonPK 说明:设置为“开”(默认值)时,将自动为没有一个表的表生成主键。 这对于并行应用是必需的,强烈建议对所有表使用。 ##### wsrep_cluster_address 说明:启动时要连接的群集节点的地址,例如gcomm://192.168.0.1:1234?gmcast.listen_addr = 0.0.0.0:2345。 优良作法是以gcomm://

加载全部内容

相关教程
猜你喜欢
用户评论