目录
一、galare的基础知识
1.galare cluster介绍
galare cluster就是集成了galare插件的集群,是一种新型的、数据不共享的高可用方案。mysql数据库广泛的使用,其高可用的架构方式也有很多如MHA、MMM等传统的组织架构,传统的mysql高可用的架构方式不能保证主从数据的一致性。而galare cluster解决了这个问题,galara cluster采用的是多主模式,从而能够保证数据的一致性。galera的搭建在每个数据库节点均执行。
2.galare cluster架构
如下图所示,图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,他们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当客户端要写入或者读取数据时,随便连接那个实例都是一样的,读取到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其他节点上面。
3.galare 复制工作原理
galare复制是一种基于验证的复制,基于验证的复制使用组通信和事务排序技术实现同步复制,它通过广播并发事务之间建立全局总序来协调事务提交。简单来说就是事务必须以相同的顺序应用于所有实例,先在本节点乐观执行,然后在提交时运行一个验证过程以保证全局数据的一致性,然后发送到其他节点,做冲突检测,若无冲突,所有节点提交,否则回滚。
-
乐观执行:指的是事务在某一节点提交时,被认为与其他节点上的事务没有冲突。
如下图所示,当客户端发出commit命令时,在实际提交之前,对数据库所做的更改将被收集到一个写集中,写集中包含事务信息和所更改行的主键,然后将此写集发送到其他节点。节点用写集中的主键与当前节点中未完成的事务所有写集的主键相比较,确定节点是否可以提交事务,验证失败后,节点将删除写集,集群将回滚原始事务。
二、mariadb集群搭建
1.修改内核
net.ipv4.ip_local_port_range定义了tcp/udp的端口范围,此值尤其在测试并发的时候非常有用;fs.file-max定义了系统文件打开的最大个数;net.ipv4.tcp_tw_recycle表示开启TCP连接中的TIME-WAIT sockets的快速回收,默认为0表示关闭。
在/etc/security/limits.conf文件中增加以下内容
* soft nofile 65536
* hard nofile 65536
在/etc/sysctl.conf文件中增加以下内容
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1
2.安装mariadb
mariadb的安装、修改配置、及其修改密码和启动步骤是每个节点都需要做的操作。
2.1安装mariadb
yum install mariadb mariadb-server -y
2.2修改配置
echo "#
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
#">/etc/my.cnf.d/openstack.cnf
systemctl enable mariadb.service systemctl start mariadb.service
2.3修改密码
DBPass=1q2w3e4r
/usr/bin/expect << EOF
set timeout 30
spawn mysql_secure_installation
expect {
"enter for none" { send "\r"; exp_continue}
"Y/n" { send "Y\r" ; exp_continue}
"password:" { send "$DBPass\r"; exp_continue}
"new password:" { send "$DBPass\r"; exp_continue}
"Y/n" { send "Y\r" ; exp_continue}
eof { exit }
}
EOF
3.安装mariadb-galera
mariadb-galera的安装、配置在每个节点上都执行,但安装完成之后,集群启动是有先后顺序的,先将所有的节点都stop,然后使用galera_new_cluster启动第一个节点,再使用systemctl restart mariadb.service启动其他的节点,最后启动第一个节点。
3.1安装galera
yum install mariadb-galera-serverexpect -y
3.2配置
1.修改/etc/my.cnf.d/galera.cnf文件
wsrep_on=ON
wsrep_sst_auth=root:/wsrep_sst_auth=root:1q2w3e4r(数据库密码)
wsrep_cluster_address="gcomm://节点1的IP地址,节点2的ip地址,节点3的ip地址"
wsrep_node_name=当前节点的ip地址
wsrep_node_address=当前节点的ip地址
2.修改/etc/my.cnf.d/openstack.cnf文件
bind-address = 当前节点的ip地址
3.集群启动
启动第一个节点
systemctl daemon-reload
systemctl stop mariadb.service
galera_new_cluster
启动其他所有节点
systemctl restart mariadb.service
最后启动第一个节点
systemctl restart mariadb.service
4.创建远程访问用户
mysql -u root -p$DBPass -e "
grant all privileges on *.* to 'root'@'%' identified by '$DBPass' with grant option;
flush privileges;
select user,host,password from mysql.user;"
5.验证
netstat -antp|grep mysqld
mysql -u root -p$DBPass -e "show status like 'wsrep_cluster_size';"
mysql -u root -p$DBPass -e "show status like 'wsrep_incoming_addresses';"
三、haproxy代理mariadb
1.创建haproxy用户
haproxy用户用来监控mariadb,此用户用选择将用户数据下发到哪一个节点中的数据表中,在任意一个mysql节点执行即可。
mysql -u root -p$DBPass -e "create user 'haproxy'@'%';flush privileges;"
2./etc/haproxy/haproxy.cfg配置
mysql的haproxy配置和重启,需要在所有的控制节点执行,配置中的server参数指的是后端服务器,同一个服务有几台服务器部署,就有几个server。
echo '#mariadb_cluster
listen mariadb_cluster
mode tcp
bind 代理ip地址(vip):3306
balance leastconn
option mysql-check user haproxy
server mysql节点1的ip地址 mysql节点1的ip地址:3306 weight 1 check inter 2000 rise 2 fall 5
server mysql节点2的ip地址 mysql节点2的ip地址:3306 weight 1 check inter 2000 rise 2 fall 5
'>>/etc/haproxy/haproxy.cfg
重启服务
systemctl restart haproxy.service