设为首页 收藏本站
查看: 770|回复: 0

[经验分享] corosync+pacemaker+RA实现mysql高可用

[复制链接]

尚未签到

发表于 2018-10-2 08:37:52 | 显示全部楼层 |阅读模式
  操作目的:
  基于Corosync和NFS服务器实现MySQL的高可用
  规划:
  
DSC0000.png
  准备工作:根据规划图,设置三台主机的主机名和地址
  
(这里不再给出具体过程)
  一、配置nfs服务器
  

  

  


  • #fdisk /dev/sda
  • 创建一个大小为20G 类型为8e的分区 本文为/dev/sda5

  • #partprobe /dev/sda
  • #pvcreate /dev/sda5
  • #vgcreate myvg /dev/sda5
  • #lvcreate -L 10G -n mydata myvg
  • #mke2fs -j -L MYDATA /dev/myvg/mydata
  • #mkdir /mydata
  • #vim /etc/fstab
  • 添加
  • LABEL=MYDATA            /mydata                 ext3    defaults        0 0
  • #mount -a

  • 添加用户
  • # groupadd -g 306 -r mysql
  • # useradd -g mysql -r -u 306 -s /sbin/nologin mysql
  • # id mysql
  • uid=306(mysql) gid=306(mysql) groups=306(mysql) context=root:system_r:unconfined_t:SystemLow-SystemHigh

  • 让mysql用户对/mydata目录有读写的权限
  • # chown -R mysql:mysql /mydata/

  • 通过nfs共享/mydata
  • #vim /etc/exports
  • /mydata         172.16.220.11(rw,no_root_squash) 172.16.220.12(rw,no_root_squash)

  • #service nfs start
  • # showmount -e localhost
  • Export list for localhost:  /mydata 172.16.220.12,172.16.220.11


  

  二、配置mysql的高可用
  1  配置node1 node2的时间同步和ssh互联
  

  


  • node1:
  • #hwclock -s
  • #ssh-keygen -i rsa
  • #vim /etc/hosts
  • 172.16.220.11 node1
  • 172.16.220.12 node2
  • # ssh-copy-id -i .ssh/id_rsa.pub root@node2
  • # ssh node2 'ifconfig'

  • node2:
  • #hwclock -s
  • #ssh-keygen -i rsa
  • #vim /etc/hosts
  • 172.16.220.11 node1
  • 172.16.220.12 node2
  • # ssh-copy-id -i .ssh/id_rsa.pub root@node1
  • # ssh node1 'ifconfig'

  

  2  添加用户
  

  

  


  • node1 node2:
  • # groupadd -r -g 306 mysql
  • # useradd -g mysql -u 306 -r mysql
  • # mkdir /mydata
  • # mount -t nfs 172.16.220.22:/mydata /mydata/
  • # ls /mydata/
  • lost+found

  • 验证mysql用户是否对/mydata目录有写的权限
  • # su - mysql
  • su: warning: cannot change directory to /home/mysql: No such file or directory
  • -bash-3.2$ cd /mydata
  • -bash-3.2$ mkdir data           //创建这个目录,作为mysql的数据目录
  • -bash-3.2$ ls
  • data  lost+found

  

  3  安装mysql
  

  


  • node1 :
  • 安装 mysql-5.5.22-linux2.6-i686.tar.gz

  • # tar xf mysql-5.5.22-linux2.6-i686.tar.gz -C /usr/local/
  • # cd /usr/local/
  • # ln -sv mysql-5.5.22-linux2.6-i686 mysql
  • #cd mysql

  • 初始化mysql
  • #chown -R mysql:mysql .
  • # scripts/mysql_install_db --user=mysql --datadir=/mydata/data/


  • 提供配置文件
  • # cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
  • #vim /etc/my.cnf
  • [mysqld]中修改
  • thread_concurrency = 2
  • datadir = /mydata/data

  • 提供脚本
  • # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  • # chkconfig --add mysqld
  • # service mysqld start
  • Starting MySQL........                                     [  OK  ]
  • # /usr/local/mysql/bin/mysql   连上mysql



  • 停止服务
  • #service mysqld stop
  • # chkconfig mysqld off
  • # chkconfig --list mysqld      //保证都是off

  • node2:
  • 安装 mysql-5.5.22-linux2.6-i686.tar.gz

  • # tar xf mysql-5.5.22-linux2.6-i686.tar.gz -C /usr/local/
  • # cd /usr/local/
  • # ln -sv mysql-5.5.22-linux2.6-i686 mysql
  • #cd mysql
  • #chown -R root:mysql
  • # cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
  • #vim /etc/my.cnf
  • [mysqld]中修改
  • thread_concurrency = 2
  • datadir = /mydata/data
  • # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  • # chkconfig --add mysqld
  • # service mysqld start
  • Starting MySQL........                                     [  OK  ]
  • # /usr/local/mysql/bin/mysql   连上mysql
  • #service mysqld stop
  • # chkconfig mysqld off
  • # chkconfig --list mysqld      //保证都是off

  • 到此两个mysql服务器可以实现nfs的共享存储了

  

  4  添加集群服务
  

  
准备的包:
  

  


  • corosync-1.2.7-1.1.el5.i386.rpm
  • corosynclib-1.2.7-1.1.el5.i386.rpm

  • pacemaker-1.1.5-1.1.el5.i386.rpm
  • pacemaker-libs-1.1.5-1.1.el5.i386.rpm

  • heartbeat-3.0.3-2.3.el5.i386.rpm
  • heartbeat-libs-3.0.3-2.3.el5.i386.rpm

  • cluster-glue-1.0.6-1.6.el5.i386.rpm
  • cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

  • perl-TimeDate-1.16-5.el5.noarch.rpm
  • libesmtp-1.0.4-5.el5.i386.rpm
  • resource-agents-1.0.4-1.1.el5.i386.rpm

  

  下载到node1 node2 的/root目录下
  4.1安装corosync
  

  


  • node1 node2:
  • #yum -y --nogpgcheck localinstall *.rpm
  

  4.2 corosync的配置文件
  

  

  


  • node1:
  • # cd /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
  • #vim /etc/corosync.conf
  • 修改内容如下:
  • secauth: on
  • bindnetaddr: 172.16.0.0
  • mcastaddr: 226.99.1.1
  • to_logfile: yes
  • to_syslog: no

  • 接着编辑添加如下内容:
  • service {
  •         ver: 0
  •         name: pacemaker
  •         use_mgmtd: yes
  • }

  • aisexec {
  •         user: root
  •         group: root
  • }

  • 生成节点间通信时用到的认证密钥文件:
  • # corosync-keygen        //会自动的在/etc/corosync目录下生成一个key文件,是二进制格式的,权限为400

  • 将corosync和authkey复制至node2:
  • # scp -p authkey corosync.conf node2:/etc/corosync/

  • 分别为两个节点创建corosync生成的日志所在的目录:
  • # mkdir  /var/log/cluster
  • # ssh node2 'mkdir  /var/log/cluster'

  • 启动服务
  • # service corosync start
  • # ssh node2 '/etc/init.d/corosync start'

  • 查看工作状态
  • # crm status
  • ============
  • Last updated: Tue Aug 21 09:07:33 2012
  • Stack: openais
  • Current DC: node1 - partition with quorum
  • Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
  • 2 Nodes configured, 2 expected votes
  • 0 Resources configured.
  • ============

  • Online: [ node1 node2 ]

  

  三、配置集群资源
  

  
node1:(集群资源的配置,在一个节点上完成即可)
  

  
1 禁用stonith
  
# crm configure property stonith-enabled=false
  2 修改忽略quorum不能满足的集群状态检查:
  
# crm configure property no-quorum-policy=ignore
  3 为资源指定默认黏性值:
  
# crm configure rsc_defaults resource-stickiness=100
  4 配置资源(资源的添加,在哪个节点上都可以)
  1)添加访问mysql的Ip
  
# crm configure primitive myip ocf:heartbeat:IPaddr params ip=172.16.220.21
  2)添加挂载目录的资源
  

  


  • 现在node1 node2上卸载挂载的目录
  • #umount /mydata

  • #crm
  • crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem params device="172.16.220.22:/mydata" directory="/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s

  • 资源的工作状态
  • # crm status
  • ============
  • Last updated: Tue Aug 21 09:46:30 2012
  • Stack: openais
  • Current DC: node1 - partition with quorum
  • Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
  • 2 Nodes configured, 2 expected votes
  • 2 Resources configured.
  • ============

  • Online: [ node1 node2 ]

  • myip (ocf::heartbeat:IPaddr): Started node1
  • mynfs (ocf::heartbeat:Filesystem): Started node2

  • 此时可以测试:
  • mynfs资源在node2上,查看即可
  • # ls /mydata/data
  • ibdata1      ib_logfile1  mysql-bin.000001  mysql-bin.000003  node1.err  performance_schema
  • ib_logfile0  mysql        mysql-bin.000002  mysql-bin.index   node2.err  test
  • 有数据文件了,此时在node1上是没有/data目录的

  • 让node2变为被动节点
  • #crm node standby
  • # crm status
  • ============
  • Last updated: Tue Aug 21 09:51:52 2012
  • Stack: openais
  • Current DC: node1 - partition with quorum
  • Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
  • 2 Nodes configured, 2 expected votes
  • 2 Resources configured.
  • ============

  • Node node2: standby
  • Online: [ node1 ]

  • myip (ocf::heartbeat:IPaddr): Started node1
  • mynfs (ocf::heartbeat:Filesystem): Started node1
  • 此时node1上查看
  • #ls /mydata/data
  • ibdata1      ib_logfile1  mysql-bin.000001  mysql-bin.000003  node1.err  performance_schema
  • ib_logfile0  mysql        mysql-bin.000002  mysql-bin.index   node2.err  test

  

  3)添加mysqld服务
  

  


  • (mysqld 一定要和myip mynfs在一起,并且mysqld要晚于mynfs和myip)
  • # crm
  • crm(live)# configure
  • crm(live)configure# primitive mysqld lsb:mysqld
  • 定义排列约束
  • crm(live)configure# colocation mysqld_with_mynfs_with_myip inf: mysqld mynfs myip

  • 定义顺序约束
  • crm(live)configure# order mysqld_after_myip mandatory: myip mysqld
  • crm(live)configure# order mysqld_after_mynfs mandatory: mynfs mysqld:start
  • 定义完顺序之后,查看xml
  • crm(live)configure# show xml 要确保是order是如下内容



  • 提交配置
  • crm(live)configure# commit

  • #crm status
  • Online: [ node1 node2 ]

  • myip (ocf::heartbeat:IPaddr): Started node1
  • mynfs (ocf::heartbeat:Filesystem): Started node1
  • mysqld (lsb:mysqld): Started node1
  • 此时可以测试以下,mysqld在node1,就在node1上测试
  • #/usr/local/mysql/bin/mysql
  • mysql> show databases;
  • +--------------------+
  • | Database           |
  • +--------------------+
  • | information_schema |
  • | mysql              |
  • | performance_schema |
  • | test               |
  • +--------------------+           证明资源生效了

  

  建立一个远程连接的用户
  

  


  • mysql> grant all on *.* to root@'%' identified by 'redhat';
  • mysql> flush privileges;
  

  远程连接172.16.220.21的mysql服务如图
DSC0001.png

DSC0002.png

  操作过程中遇到的问题
  

  


  • 1 添加mynfs资源时
  • Failed actions:
  •     mynfs_start_0 (node=node1, call=5, rc=5, status=complete): not installed
  •     mynfs_start_0 (node=node2, call=4, rc=5, status=complete): not installed
  • 第一次使用
  • # crm configure primitive mynfs ocf:heartbeat:Filesystem params device="172.16.220.22/mydata" directory="/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s
  • 来添加的,出现了如上错误

  • 第二次使用
  • #crm
  • crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem params device="172.16.220.22:/mydata" directory="/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s

  • 工作正常了 诡异啊
  • 2 添加进了mgmtd服务,但是5560服务还是没有启动。解决一下

  • 3 可以远程连接所在节点的mysql,但是不能通过vip连接,怎么原因?
  • 解决:地址冲突,其他主机占用了这个vip(一定要保证vip,虚拟ip没有被其他主机占用)
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-607366-1-1.html 上篇帖子: mysql SET old_passwords 含义 下篇帖子: HA专题: Corosync+Pacemaker+drbd实现MySQL高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表