MariaDB Galera Cluster Startup
1.环境
系统信息 CentOS-6.5-x86_64
服务器节点IP:192.168.1.200 , 192.168.1.201 , 192.168.1.202
2.关闭SELinux
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器(可以通过/usr/sbin/sestatus -v 查看状态)
3.安装基础软件支撑
yum -y install tcp_wrappers wget http://pkgs.repoforge.org/socat/socat-1.7.2.4-1.el6.rf.x86_64.rpm rpm -iv socat-1.7.2.4-1.el6.rf.x86_64.rpm
4.安装Mariadb Galera Cluster
创建 /etc/yum.repos.d/MariaDB.repo,内容如下
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
运行
yum install -y MariaDB-Galera-server MariaDB-client galera
安装结束后启动MySQL服务,service mysql start
执行 mysql_secure_installation 进行数据库环境初始化
设置数据库编码为UTF-8,refer to https://gitsea.com/2014/08/05/centos-web-server-init/
5.防火墙设置
在/etc/sysconfig/iptables 增加如下两条
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 4567 -j ACCEPT
重启防火墙 service iptables restart
6.配置集群
编辑 192.168.1.200的服务器下 /etc/my.cnf.d/server.conf
在 [mariadb-10.0]下面增加如下内容
binlog_format=ROW 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 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.1.200,192.168.1.201,192.168.1.202" wsrep_cluster_name='galera_cluster' wsrep_node_address='192.168.1.200' wsrep_node_name='db1' wsrep_sst_method=rsync wsrep_sst_auth=root:123456
201 服务器需要修改地方如下
wsrep_node_address='192.168.1.201' wsrep_node_name='db2'
202 服务器需要修改地方如下
wsrep_node_address='192.168.1.202' wsrep_node_name='db3'
启动192.168.1.200服务器
/etc/init.d/mysql start --wsrep-new-cluster
随后启动其他两个mysql服务 service mysql start
登录任意一台服务器节点通过 show status like ‘wsrep%’ 命令可以查看集群状态
现在可以在任意一个节点进行数据操作,其他节点会自动进行同步
关于动态增加节点,只需要在/etc/my.cnf.d/server.conf 修改 wsrep_cluster_address=”gcomm://192.168.1.200″ 地址为cluster其中一个节点即可,
然后通过service mysql start 启动服务,会自动增加到集群节点中
注意点:集群是乐观的并发控制,如果有两个事务同时向集群中不同的节点同一行写入并提交,失败的节点将中止,会造成死锁问题
通过设置单点写入多点读取的方式可以解决此问题。下面链接是其中一种解决方案