LVS学习笔记 8 crm实现Mysql高可用集群
2015-05-24 21:36
351 查看
172.16.10.11nfs.sweifan.com 提供LVM格式的nfs,lvm方便扩展和备份
我没空间了,要先删除分区,boot,home,根不能动,删除4,5
# fdisk /dev/sda
# partprobe /dev/sda
没办法,重启喽
# pvcreate /dev/sda6
# lvcreate -L 512M -n mydata myvg 只用了512M,剩余的以后试验备份用
# mke2fs -j /dev/myvg/mydata 格式化
然后开机自动挂载,输出为nfs。这里边要新建目录存数据,mysql用户要有读写权限
添加mysql用户mysql组,为普通用户,并且不能登录
# groupadd -g 3306 mysql gid:3306
# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql uid:3306
创建目录,根下的mydata,用以挂载新分区
# mkdir /mydata
然后设置开机自动挂载
# vim /etc/fstab
# mount -a
# mount
创建数据目录:
# mkdir /mydata/data
给mysql用户权限
# chown -R mysql.mysql /mydata/data
然后把目录导出去:当然写简单点,直接 172.16.0.0/255.255.0.0(rw)
# vim /etc/exports
# exportfs -arv
# service nfs restart 没有这一步可能远程挂载不上
看看文件权限:
然后在node节点操作:把所有之前的资源都删除
node1
# groupadd -g 3306 mysql
# useradd -g 3306 -u 3306 -s /sbin/nologin-M mysql
# mkdir /mydata
试一下:
# mount -t nfs 172.16.10.11:/mydata /mydata
看看权限是否应设正确:
映射不对,应该是mysql和root。
卸载nfs。解决问题
参考: http://www.361way.com/nfs-mount-nobody/2616.html
修改nfs服务器和客户端的idmapd.conf
# vim /etc/idmapd.conf
对nfs和所有node做如此修改,因为我的所有虚拟主机根域都是sweifan.com,根域一致,映射就没问题了。当然前提是所有主机上有同样的用户和组,且ID号都一样,才能完成映射。
修改之后:
# service rpcidmapd restart
然后在挂载。OK,用户权限映射没问题。
# usermod -s /bin/bash mysql mysql不能登录,指定shell
# su mysql
命令提示符变为:bash-4.1$。试着在data中创建文件,看能不能写,能写就OK
bash-4.1$ exit 退出bash,退出mysql
# umount /mydata 注意要退出mydata才能卸载
node2结点做同样设置。我就出现了node1权限映射正确,node2不正确,一个是root,另一个是nobody.搞不好.但是一重启,在挂载就好了,TMD.
编译安装mysql(需要cmake)
编译安装时是不需要现在就把nfs挂载的,安装完成之后,初始化数据库时才需要挂载。
#cmake . -LH
#cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFIGDIR=/etc-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DEFAULT_CHARSET=utf8
这么多无非是指定安装路径、数据文件路径、配置文件路径、各种存储引擎是否启用、各种功能是否启用、字符集。。。这些功能默认就有的,比如安装路径,默认就是/usr/local/mysql
警告:提领类型双关的指针将破坏强重叠规则 直接忽略
#make && make install
# chown -R :mysql /usr/local/mysql/ 数组改为mysql,然后初始化数据库
# mount -t nfs 172.16.10.11:/mydata /mydata
# scripts/mysql_install_db --user=mysql--datadir=/mydata/data
出错:
chown: 正在更改"/mydata/data"
的所有者: 不允许的操作
Cannot change ownershipof the database directories to the 'mysql'
user. Check that you have the necessary permissionsand try again.
why???
因为这里初始化时,我们以管理员身份在执行操作,而在nfs服务器上,exports文件里边输出目录默认root_squash,即登入nfs使用分享目录的使用者是root身份,那么这个使用者的权限将被压缩为匿名用户nobody。所以我们需要在nfs服务器/etc/exports输出目录权限加上no_root_squash,然后再初始化数据库,但是注意,此时该用户对于该共享目录就具有root权限,既不安全,但此时我们需要这个权限。所以我们的nfs共享主机最好只是指定的主机,而不是共享给某网段。IPtables添加规则也可以。
nfs.sweifan.com下操作:
# vim /etc/exports
/mydata 172.16.0.0/16(no_root_squash,rw)
# exportfs -arv 重新导出共享文件
切换回node1,mysql服务器
# scripts/mysql_install_db --user=mysql--datadir=/mydata/data
OK,数据库初始化成功
# ls -l /mydata/data/
启动之前,准备好配置文件:
# cp /usr/local/mysql/support-files/my-large.cnf/etc/my.cnf
# vim /etc/my.cnf
在[mysqld]加上datadir和innodb_file_per_table(每表一个表空间文件)
# cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld
但是记得么,我们的高可用服务不能自动启动哦
# chkconfig --add mysqld 加到服务列表
# chkconfig mysqld off
手动启动一下看看:
# service mysqld start
手动启动mysql客户端看看:一台主机内,mysql和mysqld连接是通过socket
# /usr/local/mysql/bin/mysql
OK没问题,退出\q
# service mysqld stop
#umount /mydata
OK接下来可以配置我们的高可用集群啦
启用heartbeat
# service heartbeat start
# ssh node2 'service heartbeat start'
# hb_gui 删除之前所有资源,这里只配置mysql集群
规划:依旧是三个资源,启动顺序从上到下
vip:172.16.10.10
filesystem
mysqld
协同(collocation) IP和filesystem
我觉得资源组比协同约束好用,定义一个资源组把:按照启动次序添加资源
这里mysqld的资源代理是lsb格式,不需要参数
建好后启动:
现在还不支持远程登录,mysqld在本机上登录添加用户:
# /usr/local/mysql/bin/mysql
mysql> GRANT ALL ON *.* TO 'root'@'%'IDENTIFIED BY 'mysql';
mysql> FLUSH PRIVILEGES;
在win7主机上使用Navicatfor mysql客户端连接测试
测试连接,OK 都没问题,新建一个表,然后down掉node1,rangnode2启用
看还能否连上并查看到刚新建的表.
OK没问题:
但是呢 现在nfs成了单点故障了.再对nfs高可用?buhao,4台主机就为了mysql.考虑DRDB,两台主机存储作镜像
DRDB:通过网络将两个主机上的磁盘做成镜像
下一篇将开始drbd+corosync
<
4000
p>
我没空间了,要先删除分区,boot,home,根不能动,删除4,5
# fdisk /dev/sda
# partprobe /dev/sda
没办法,重启喽
# pvcreate /dev/sda6
# lvcreate -L 512M -n mydata myvg 只用了512M,剩余的以后试验备份用
# mke2fs -j /dev/myvg/mydata 格式化
然后开机自动挂载,输出为nfs。这里边要新建目录存数据,mysql用户要有读写权限
添加mysql用户mysql组,为普通用户,并且不能登录
# groupadd -g 3306 mysql gid:3306
# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql uid:3306
创建目录,根下的mydata,用以挂载新分区
# mkdir /mydata
然后设置开机自动挂载
# vim /etc/fstab
# mount -a
# mount
创建数据目录:
# mkdir /mydata/data
给mysql用户权限
# chown -R mysql.mysql /mydata/data
然后把目录导出去:当然写简单点,直接 172.16.0.0/255.255.0.0(rw)
# vim /etc/exports
# exportfs -arv
# service nfs restart 没有这一步可能远程挂载不上
看看文件权限:
然后在node节点操作:把所有之前的资源都删除
node1
# groupadd -g 3306 mysql
# useradd -g 3306 -u 3306 -s /sbin/nologin-M mysql
# mkdir /mydata
试一下:
# mount -t nfs 172.16.10.11:/mydata /mydata
看看权限是否应设正确:
映射不对,应该是mysql和root。
卸载nfs。解决问题
参考: http://www.361way.com/nfs-mount-nobody/2616.html
修改nfs服务器和客户端的idmapd.conf
# vim /etc/idmapd.conf
对nfs和所有node做如此修改,因为我的所有虚拟主机根域都是sweifan.com,根域一致,映射就没问题了。当然前提是所有主机上有同样的用户和组,且ID号都一样,才能完成映射。
修改之后:
# service rpcidmapd restart
然后在挂载。OK,用户权限映射没问题。
# usermod -s /bin/bash mysql mysql不能登录,指定shell
# su mysql
命令提示符变为:bash-4.1$。试着在data中创建文件,看能不能写,能写就OK
bash-4.1$ exit 退出bash,退出mysql
# umount /mydata 注意要退出mydata才能卸载
node2结点做同样设置。我就出现了node1权限映射正确,node2不正确,一个是root,另一个是nobody.搞不好.但是一重启,在挂载就好了,TMD.
编译安装mysql(需要cmake)
编译安装时是不需要现在就把nfs挂载的,安装完成之后,初始化数据库时才需要挂载。
#cmake . -LH
#cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFIGDIR=/etc-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DEFAULT_CHARSET=utf8
这么多无非是指定安装路径、数据文件路径、配置文件路径、各种存储引擎是否启用、各种功能是否启用、字符集。。。这些功能默认就有的,比如安装路径,默认就是/usr/local/mysql
警告:提领类型双关的指针将破坏强重叠规则 直接忽略
#make && make install
# chown -R :mysql /usr/local/mysql/ 数组改为mysql,然后初始化数据库
# mount -t nfs 172.16.10.11:/mydata /mydata
# scripts/mysql_install_db --user=mysql--datadir=/mydata/data
出错:
chown: 正在更改"/mydata/data"
的所有者: 不允许的操作
Cannot change ownershipof the database directories to the 'mysql'
user. Check that you have the necessary permissionsand try again.
why???
因为这里初始化时,我们以管理员身份在执行操作,而在nfs服务器上,exports文件里边输出目录默认root_squash,即登入nfs使用分享目录的使用者是root身份,那么这个使用者的权限将被压缩为匿名用户nobody。所以我们需要在nfs服务器/etc/exports输出目录权限加上no_root_squash,然后再初始化数据库,但是注意,此时该用户对于该共享目录就具有root权限,既不安全,但此时我们需要这个权限。所以我们的nfs共享主机最好只是指定的主机,而不是共享给某网段。IPtables添加规则也可以。
nfs.sweifan.com下操作:
# vim /etc/exports
/mydata 172.16.0.0/16(no_root_squash,rw)
# exportfs -arv 重新导出共享文件
切换回node1,mysql服务器
# scripts/mysql_install_db --user=mysql--datadir=/mydata/data
OK,数据库初始化成功
# ls -l /mydata/data/
启动之前,准备好配置文件:
# cp /usr/local/mysql/support-files/my-large.cnf/etc/my.cnf
# vim /etc/my.cnf
在[mysqld]加上datadir和innodb_file_per_table(每表一个表空间文件)
# cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld
但是记得么,我们的高可用服务不能自动启动哦
# chkconfig --add mysqld 加到服务列表
# chkconfig mysqld off
手动启动一下看看:
# service mysqld start
手动启动mysql客户端看看:一台主机内,mysql和mysqld连接是通过socket
# /usr/local/mysql/bin/mysql
OK没问题,退出\q
# service mysqld stop
#umount /mydata
OK接下来可以配置我们的高可用集群啦
启用heartbeat
# service heartbeat start
# ssh node2 'service heartbeat start'
# hb_gui 删除之前所有资源,这里只配置mysql集群
规划:依旧是三个资源,启动顺序从上到下
vip:172.16.10.10
filesystem
mysqld
协同(collocation) IP和filesystem
我觉得资源组比协同约束好用,定义一个资源组把:按照启动次序添加资源
这里mysqld的资源代理是lsb格式,不需要参数
建好后启动:
现在还不支持远程登录,mysqld在本机上登录添加用户:
# /usr/local/mysql/bin/mysql
mysql> GRANT ALL ON *.* TO 'root'@'%'IDENTIFIED BY 'mysql';
mysql> FLUSH PRIVILEGES;
在win7主机上使用Navicatfor mysql客户端连接测试
测试连接,OK 都没问题,新建一个表,然后down掉node1,rangnode2启用
看还能否连上并查看到刚新建的表.
OK没问题:
但是呢 现在nfs成了单点故障了.再对nfs高可用?buhao,4台主机就为了mysql.考虑DRDB,两台主机存储作镜像
DRDB:通过网络将两个主机上的磁盘做成镜像
下一篇将开始drbd+corosync
<
4000
p>
相关文章推荐
- MySQL存储过程和触发器的实现--数据库学习笔记
- OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql) 学习笔记(含源代码)
- mysql dba系统学习(19)配置mysql+lvs+keeplived实现Mysql读操作的负载均衡
- Heartbeat学习笔记--HA高可用集群实现
- Mysql Fabric实现学习笔记(转载)
- 【PHP+MYSQL】实现登录界面的学习笔记
- Mysql Fabric实现学习笔记
- Servlet学习笔记--jsp+Servlet+MySQL实现用户注册
- LVS学习笔记 5高可用集群原理
- LVS学习笔记 7 heartbeat基于CRM进行资源管理
- 基于heartbeat v2 crm实现基于nfs的mysql高可用集群
- hibernate学习笔记02-- eclipse 下 hibernate+mysql 的实现。
- MySQL学习笔记之十:使用mysql-proxy实现MySQL读写分离
- 高可用集群之heartbeat v2--基于CRM实现mysql高可用集群(未完)
- MySQL学习笔记之数据的增、删、改实现方法
- MySQL学习笔记——复制的实现原理
- mysql dba系统学习(18)mysql主从复制的实现 mysql dba系统学习(19)配置mysql+lvs+keeplived实现Mysql读操作的负载均衡
- Heartbeat学习笔记--HA高可用集群实现
- 38.笔记 MySQL学习——使用连接实现多表连接
- 39.笔记 MySQL学习——使用子查询实现多表检索