如何使用Galera Cluster配置MariaDB MaxScale Master-Slave
在本文中,我们将通过Mariadb Corporation将Mariadb Galera Cluster与MaxScale Proxy数据库安装。
MaxScale是智能代理数据库,可以将数据库语句从群集路由到一个服务器。
但与haproxy不同,maxscale使用Linux内核的Asynchronius I/O,它应该有助于性能。
我们将要做的群集将读写写入拆分,这意味着所有写入都是通过maxScale的主机完成的,并将它们复制到所有节点,如可以读取的位置。
在本文中,我们使用节点-01作为主站和节点02/node-03作为从站。
Node-04将是我们的MaxScale核心机器。
MaxScale的主要特点
a)如果任何数据库服务器发生故障,则连接将自动创建到另一个节点b)可以从会话动态添加或者删除的连接c)MaxScale将客户端请求路由到数据库服务器的数量
安装群集
第一件事是使用所有主机的HOSNAMES和私有IPS设置主机文件。
这是必需的,所以我们可以通过私有IPS进行通信,避免加密流量的需求。
以下是所有4个服务器上的主机文件(/etc/hosts):
10.132.84.235 node-01 node-01 10.132.86.222 node-02 node-02 10.132.19.195 node-03 node-03 10.132.53.122 node-04 node-04
前三名将是Galera Cluster,第四个用于MaxScale代理。
允许在前3个服务器上为Mariadb存储库添加密钥
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
然后我们将为x86添加重建和电源小endian架构,软件包将根据拱式安装包。
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'
更新源列表
apt update
然后安装MariaDB
apt install mariadb-server rsync
配置和构建群集
接下来,我们需要编辑配置文件并构建群集。
Node-01将是用于引导群集的节点,其他节点将连接到此。
所以允许首先在所有三个节点上编辑配置文件。
nano /etc/mysql/my.cnf
我们需要找到[Galera]部分并更改这些行:
[galera] # Mandatory settings wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name="theitroad-cluster" wsrep_cluster_address="gcomm://node-01,node-02,node-03" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 ## Allow server to accept connections on all interfaces. #bind-address=0.0.0.0 #wsrep_sst_method=rsync wsrep_node_address="10.132.84.235" wsrep_node_name="node-01"
最后两行需要具有当前节点的地址和主机名,因此以上是来自节点-01的文件。
在每个节点上,需要相应地更改两行,而其他线路可以相同。
完成此后,我们需要启动群集。
如果数据库服务器因任何机会运行,则在所有三个节点上停止它。
systemctl stop mysql
在第一个节点运行:
galera_new_cluster
在另外两个节点上
systemctl start mysql
回到第一个节点,我们需要设置密码,所以我们会运行
mysql_secure_installation
ran ran脚本后,可以在任何节点上键入此命令
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
它应该为我们提供类似的输出
MaxScale代理安装和准备群集
当我们有群集并运行时,我们可以转到Node-04以在其上安装MaxScale。
MaxScale现在仅支持X86_64架构。
让我们使用WGet下载MaxScale Deb软件包
wget https://downloads.mariadb.com/MaxScale/2.0.1-oct27/ubuntu/dists/xenial/main/binary-amd64/maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb
接下来我们将安装依赖
apt install libcurl3
然后是istall maxscale
dpkg -i maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb
MaxScale已安装MaxScale我们需要在Galera集群上再次输入MySQL提示符,以便制作MaxScale用户并为MaxScale提供足够的权限进行操作。
mysql -u root -p
在MySQL提示符按行键入此行
CREATE USER 'maxscale'@'%' IDENTIFIED BY 'you-password-here'; Query OK, 0 rows affected (0.00 sec) GRANT SELECT ON mysql.db TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec) GRANT SELECT ON mysql.user TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec) GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec)
配置maxscale.
让我们解释这个配置文件如何工作。
在[maxScale]下的第一部分将分别将CPU线程的数量设置为4,关闭日志记录到/var/log/syslog,打开日志记录到/var/log/maxscale,打开日志警告,记录到内存和日志通知,并转向日志信息和日志开发人员选项,以便调试代码。
下一个重要部分是[Galera Monitor]。
我们需要专注于几条线条。
说服务器=需要填充服务器名称的行。
这不是主机名,这是MaxScale如何在此配置文件中命名服务器。
在我们的情况下,我们将Server1设置为Server3.
用户是我们在上一节中创建的用户名,我们的案例中的MaxScale。
密码是我们为MaxScale用户设置密码的任何内容。
Galera Monotor将选择一个节点作为掌握和其他节点作为从属奴隶(我们的三个节点中的其他节点)。
将选择具有最低WSREP_LOCAL_INDEX的节点作为主设备。
如果群集配置更改,则可能会发生新选择,并且具有较低索引的节点将选择为主。
如果我们不希望掌握以这种方式更改,则可以使用选项Disable_master_failback并将其设置为1,如我们的配置文件中。
即使具有较低索引的新节点连接群集,这种方式也不会更改。
然后我们移动到下一个重要的部分,它是[RW分割路由器]。
其中我们再次输入三个服务器的名称以及与[Galera Monitor]部分相同的用户和密码。
最后,我们需要编辑这三个服务器,并输入MaxScale将看到它们的名称以及用于与它们通信的IP地址。
名称将是[Server1] [Server2]和[Server3],并且对于IP,我们将使用私有IP地址以避免必须加密流量。
现在,在MAXSCALE服务器上,即节点04,我们将要配置并启动MAXSCALE代理数据库。
首先让我们设置UFW以允许对所需端口的连接。
ufw allow 6603 ufw allow 4442
然后备份配置文件
mv /etc/maxscale.cnf /etc/maxscale.cnf.bk
文件备份并移动后,允许从头开始制作新文件。
nano /etc/maxscale.cnf
在那里,我们可以使用此作为骨架配置,除了摘要,我们需要更改粗体部分:
[maxscale] threads=4 syslog=0 maxlog=1 log_to_shm=1 log_warning=1 log_notice=1 log_info=0 log_debug=0 [Galera Monitor] type=monitor module=galeramon servers=server1,server2,server3 user=maxscale passwd=you-password-here monitor_interval=2000 disable_master_failback=1 available_when_donor=1 [qla] type=filter module=qlafilter options=/tmp/QueryLog [fetch] type=filter module=regexfilter match=fetch replace=select [RW Split Router] type=service router=readwritesplit servers=server1,server2,server3 user=maxscale passwd=you-password-here max_slave_connections=100% max_slave_replication_lag=30 [CLI] type=service router=cli [RW Split Listener] type=listener service=RW Split Router protocol=MySQLClient port=3306 [CLI Listener] type=listener service=CLI protocol=maxscaled address=127.0.0.1 port=6603 [server1] type=server address=10.132.84.235 port=3306 protocol=MySQLBackend [server2] type=server address=10.132.86.222 port=3306 protocol=MySQLBackend [server3] type=server address=10.132.19.195 port=3306 protocol=MySQLBackend
保存后,我们可以启动MaxScale服务
systemctl start maxscale.service
并测试它是否正常工作
maxadmin -pmariadb list servers